向 Excel 2016 Power Query 添加自定义类别类型列

向 Excel 2016 Power Query 添加自定义类别类型列

使用 Excel 2016 的 Power Query 功能导入了几个包含个人财务历史记录的 CSV 文件,并尝试使用 Power Pivot。

问题是我确实需要按类别对交易进行分组,但源文件中没有这样的内容。我真的不想将其添加到源文件中,因为它们是由我的银行自动生成的,或者事后手动选择和分组。

那么,有没有办法在 Power Query 编辑器中添加一个步骤,该步骤将添加一个新列,其值基于文本字段并使用某种切换/匹配/映射函数?

在伪代码中我正在思考这样的事情:

if [Column] in {"foo", "bar", "baz"} return "Cat A"
if [Column] starts with "blah" return "Cat B"
if [Column] matches /\d+/ return "Cat C"
else return No Cat

或者如果有其他解决这个问题的好方法......


样本数据

╔══ Date ════╦══ Text ═══════════════════════════╦══ Amount ═╦══ (new) ══╗
║ 01.05.2014 ║ Boots Apotek Bogstadvn.34 Oslo    ║ -289,70   ║ Health    ║
║ 01.05.2014 ║ 143 Boots Apotek Skøyen           ║ -73,00    ║ Health    ║
║ 01.05.2014 ║ Rema Industriga Industrigata Oslo ║ -25,70    ║ Groceries ║
║ 30.09.2014 ║ Råh Avd Industr Industrigt 4 Oslo ║ -575,00   ║ Hair      ║
║ 30.09.2014 ║ Random stuff                      ║ -68,00    ║ Other     ║
║ 30.09.2014 ║ Rema Industriga Industrigata Oslo ║ -39,90    ║ Groceries ║
║ 29.09.2014 ║ To Church Betel                   ║ -200,00   ║ Offering  ║
║ 29.09.2014 ║ To Church Cornelius               ║ -200,00   ║ Offering  ║
║ 29.09.2014 ║ To Johnny Landlord                ║ -9 015,00 ║ Rent      ║
║ 29.09.2014 ║ To Johnny Landlord                ║ -500,00   ║ Other     ║
╚════════════╩═══════════════════════════════════╩═══════════╩═══════════╝

例如我想要

  • 如果文本包含“Boots Apotek”或其他药店名称,则表示健康
  • 如果文本以 Rema 开头或以其他商店名称开头或包含其他商店名称,则为杂货
  • 如果文本包含教堂名称列表之一,则提供
  • 如果文本包含房东姓名,则为租金amount 大于 -9000,因为低于这个数字的任何东西都很可能是其他的

答案1

由于您似乎采用了程序员的方法,因此您可以“添加一列”并编写一个冗长的嵌套 if 语句来解决这个问题,使用一些 PQ 函数。它看起来像这样:

if Text.Contains ( "foo|bar|baz|" , [Column] & "|" ) then "Cat A" else if Text.StartsWith( [Column] , "blah" ) then "Cat B" else if not ( ( try Number.From ( [Column] ) otherwise null ) is null ) then "Cat C" else "No Cat"

答案2

添加“条件列”。这将提供一个基于其他列数据的规则引擎,并可执行您想要的操作。

相关内容