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
验证结果
两种方案都会得到你期望的结果:
| ID | value1 | value2 |
|---|---|---|
| a | 10.9 | 50 |
| b | 5.2 | 60 |
| c | 9.0 | 80 |
内容的提问来源于stack exchange,提问作者Karol Duarte
相关产品推荐
相关产品推荐

