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

Power Query嵌套连接多匹配场景下,如何获取最大值及对应详情?

解决Power Query Left Outer Join后取最新匹配行的优雅方案

嘿,我刚好也踩过类似的坑,给你个更简洁的开箱即用解法,不用折腾分组去重那套繁琐操作:

核心思路就是在展开嵌套表之前,先对每个嵌套的Table2表筛选出c列最大值对应的完整行,这样展开后自然就不会出现重复的Table1行了。

具体步骤&优化后的M代码

let
    Source = Table.NestedJoin(Table1, {"a", "b"}, Table2, {"a", "b"}, "Table2", JoinKind.LeftOuter),
    // 对每个嵌套的Table2表,直接提取c列最大值对应的完整行
    #"Get Latest Table2 Row" = Table.AddColumn(Source, "LatestTable2", each Table.Max([Table2], "c")),
    // 展开最新行的字段,替换成你实际需要的列名
    #"Expanded Latest Table2" = Table.ExpandRecordColumn(#"Get Latest Table2 Row", "LatestTable2", {"c", "d", "e", "f"}, {"c", "d", "e", "f"}),
    // 可选:移除没用的嵌套表列
    #"Removed Nested Column" = Table.RemoveColumns(#"Expanded Latest Table2", {"Table2"}),
    // 保留你原来的非空筛选逻辑
    #"Filtered Rows" = Table.SelectRows(#"Removed Nested Column", each ([a] <> null))
in
    #"Filtered Rows"

为什么这个方法更优雅?

  • 用Power Query内置的Table.Max函数直接定位到每个分组的最大值行,完全是原生开箱即用的功能,不需要自己写复杂的分组逻辑
  • 从根源上避免了重复行的产生,不需要后续再做去重操作,代码逻辑更清晰
  • 完美保留Left Outer Join的特性:如果Table2没有匹配项,Table.Max会返回null,展开后对应列会显示空值,完全符合你的需求

补充说明

如果你的“最新”判断不是基于数值大小,而是日期之类的字段,只需要把Table.Max([Table2], "c")里的"c"换成对应的日期列名就行,Table.Max会自动处理日期的先后比较。

内容的提问来源于stack exchange,提问作者mfaiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:43:11