You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query:如何基于变量按信用编号维度添加条件列

解决Power Query中跨多行判断的Pass/Fail列问题

核心思路

通过分组聚合提取每个Credit Number对应的USD、EUR信用值,按规则统一判断结果后,再合并回原表实现批量标记。


分步操作(Power Query编辑器内)

  1. 分组获取每个编号的币种数据
    选中Reference Register表,进入「转换」选项卡 → 点击「分组依据」,配置:

    • 分组依据:Credit Number
    • 新列名:CurrencyData
    • 操作:所有行
      确定后得到包含每个编号对应所有行数据的分组表。
  2. 添加自定义列判断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。

  3. 合并回原表
    删除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:51:09