Power Query:如何基于变量按信用编号维度添加条件列
解决Power Query中跨多行判断的Pass/Fail列问题
核心思路
通过分组聚合提取每个Credit Number对应的USD、EUR信用值,按规则统一判断结果后,再合并回原表实现批量标记。
分步操作(Power Query编辑器内)
分组获取每个编号的币种数据
选中Reference Register表,进入「转换」选项卡 → 点击「分组依据」,配置:- 分组依据:
Credit Number - 新列名:
CurrencyData - 操作:
所有行
确定后得到包含每个编号对应所有行数据的分组表。
- 分组依据:
添加自定义列判断Pass/Fail结果
选中CurrencyData列,点击「添加列」→ 「自定义列」,输入以下M代码:let // 提取当前分组的USD信用值 USD_Credit = List.First(List.Select([CurrencyData][Credit], (x) => List.PositionOf([CurrencyData][Currency], "USD") = List.PositionOf([CurrencyData][Credit], x))), // 提取当前分组的EUR信用值 EUR_Credit = List.First(List.Select([CurrencyData][Credit], (x) => List.PositionOf([CurrencyData][Currency], "EUR") = List.PositionOf([CurrencyData][Credit], x))), // 按规则输出结果 Result = if USD_Credit = null then "Fail" else if USD_Credit > EUR_Credit then "Pass" else if USD_Credit < EUR_Credit then "Fail" else "Pass" in Result将该列重命名为
Pass/Fail。合并回原表
删除CurrencyData列,点击「合并查询」→ 「合并查询作为新查询」,选择原Reference Register表与当前分组表,匹配列选Credit Number,合并类型选「左外部」。最后展开合并列,仅保留Pass/Fail列即可。
完整M代码示例
若不想分步操作,可直接替换原表的M代码(注意替换表名):
let Source = Excel.CurrentWorkbook(){[Name="Reference Register"]}[Content], // 分组获取每个编号的所有行数据 Grouped = Table.Group(Source, {"Credit Number"}, {{"CurrencyData", each _, type table [Credit Number=text, Currency=text, Credit=number]}}), // 添加判断结果列 AddResult = Table.AddColumn(Grouped, "Pass/Fail", (row) => let USD = List.First(List.Select(row[CurrencyData][Credit], (c) => List.PositionOf(row[CurrencyData][Currency], "USD") = List.PositionOf(row[CurrencyData][Credit], c))), EUR = List.First(List.Select(row[CurrencyData][Credit], (c) => List.PositionOf(row[CurrencyData][Currency], "EUR") = List.PositionOf(row[CurrencyData][Credit], c))) in if USD = null then "Fail" else if USD > EUR then "Pass" else if USD < EUR then "Fail" else "Pass"), // 删除临时列并合并回原表 RemoveTemp = Table.RemoveColumns(AddResult, {"CurrencyData"}), Merged = Table.NestedJoin(Source, {"Credit Number"}, RemoveTemp, {"Credit Number"}, "PassFailData", JoinKind.LeftOuter), Expanded = Table.ExpandTableColumn(Merged, "PassFailData", {"Pass/Fail"}, {"Pass/Fail"}) in Expanded
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

