Power Query添加多自定义列时前序列丢失问题求助
问题:Power Query添加多列时前序自定义列消失
我用Power Query创建单个自定义列maxInt时能正常生成预期值,但尝试添加第二列maxInt2(基于其他字段求最大值)时,之前的maxInt、过滤行等前序步骤的结果全部消失,仅保留最后添加的maxInt2列。
问题代码分析
原代码的核心错误:
Added Custom2的数据源直接使用了#"Changed Type",而非前一步的#"Filtered Rows",相当于跳过所有中间步骤,从原始转换表重新开始添加列- 每次添加列都重复执行
Table.Group,效率极低 - 存在索引匹配错误:
{[BOOKING ID=filter]}应为{[ID=filter]},否则无法正确匹配分组结果
解决方案
优化思路
- 提前一次性计算所有分组最大值,避免重复分组操作
- 通过表合并的方式将最大值列批量添加到原表
- 确保每一步转换都基于前一步的结果,保证所有列被传递
修正后的完整代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes( Source, {{"ID", type text}, {"TAX", Int64.Type}, {"CODE", Int64.Type}} // 根据实际字段类型调整 ), // 一次性计算ID分组下TAX和CODE的最大值 #"Grouped Max Values" = Table.Group( #"Changed Type", {"ID"}, { {"maxInt", each List.Max([TAX])}, {"maxInt2", each List.Max([CODE])} } ), // 合并分组结果到原表,同时得到两个最大值列 #"Merged Max Columns" = Table.NestedJoin( #"Changed Type", {"ID"}, #"Grouped Max Values", {"ID"}, "MaxData", JoinKind.LeftOuter ), #"Expanded Max Columns" = Table.ExpandTableColumn( #"Merged Max Columns", "MaxData", {"maxInt", "maxInt2"}, {"maxInt", "maxInt2"} ), // 后续步骤基于完整的表继续处理 #"Added Custom1" = Table.AddColumn(#"Expanded Max Columns", "Custom", each if [maxInt]=[TAX] then 1 else 0), #"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Custom] = 1)) in #"Filtered Rows"
关键修改说明
- 提前分组:只执行一次
Table.Group计算所有需要的最大值,大幅提升效率 - 表合并添加列:通过嵌套合并+展开的方式,一次性将多个最大值列添加到原表,避免分步添加时的数据源错误
- 步骤依赖正确:每一步转换都基于前一步的输出表,确保所有列(包括之前的自定义列)都被保留到最终结果中
- 修正匹配错误:优化后通过合并表自动匹配分组,无需手动索引查找,避免了原代码中的字段名匹配错误
内容的提问来源于stack exchange,提问作者chaosKnight
相关产品推荐
相关产品推荐

