使用 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
添加“条件列”。这将提供一个基于其他列数据的规则引擎,并可执行您想要的操作。