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

Power Query合并表返回预排序前值问题求助

问题分析与解决方案

核心问题

你的代码存在三个关键错误:

  • 处理table1_final时,错误合并了table1和table2,table2不含value1列,会引入大量null值,干扰排序和去重逻辑;
  • 生成table2_final时,变量名写错,用了remove_duplicates(对应table1的去重结果)而非remove_duplicates2;
  • 排序去重的方式存在隐患,Power Query的Table.Distinct在部分场景下可能保留原始数据顺序而非排序后的顺序,导致结果不符合预期。

修正方案一:修复原有逻辑

针对你的思路调整代码,确保单独处理每个表,修正变量名错误:

let
    // 处理table1:单独取每个ID的value1最大值
    table1_processed = 
        let
            source = table1,
            sorted = Table.Sort(source,{{"value1", Order.Descending}}),
            remove_duplicates = Table.Distinct(sorted, {"ID"}),
            sorted_id = Table.Sort(remove_duplicates,{{"ID", Order.Ascending}})
        in
            sorted_id,
    // 处理table2:单独取每个ID的value2最大值(修正变量名错误)
    table2_processed = 
        let
            source = table2,
            sorted = Table.Sort(source,{{"value2", Order.Descending}}),
            remove_duplicates = Table.Distinct(sorted, {"ID"}),
            sorted_id = Table.Sort(remove_duplicates,{{"ID", Order.Ascending}})
        in
            sorted_id,
    // 合并两个处理后的表
    merged = Table.NestedJoin(table1_processed, {"ID"}, table2_processed, {"ID"}, "table2_processed", JoinKind.FullOuter),
    expanded = Table.ExpandTableColumn(merged, "table2_processed", {"value2"}, {"value2"})
in
    expanded

修正方案二:更高效的分组取最大值(推荐)

直接用Table.Group分组计算每个ID的最大值,逻辑更清晰且结果更可靠:

let
    // 处理table1:分组取每个ID的value1最大值
    table1_max = Table.Group(table1, {"ID"}, {{"value1", each List.Max([value1]), type number}}),
    // 处理table2:分组取每个ID的value2最大值
    table2_max = Table.Group(table2, {"ID"}, {{"value2", each List.Max([value2]), type number}}),
    // 合并两个表
    merged = Table.Join(table1_max, {"ID"}, table2_max, {"ID"}, JoinKind.FullOuter)
in
    merged

验证结果

两种方案都会得到你期望的结果:

IDvalue1value2
a10.950
b5.260
c9.080

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:31:05