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

Power Query添加多自定义列时前序列丢失问题求助

问题:Power Query添加多列时前序自定义列消失

我用Power Query创建单个自定义列maxInt时能正常生成预期值,但尝试添加第二列maxInt2(基于其他字段求最大值)时,之前的maxInt、过滤行等前序步骤的结果全部消失,仅保留最后添加的maxInt2列。

问题代码分析

原代码的核心错误:

  • Added Custom2的数据源直接使用了#"Changed Type",而非前一步的#"Filtered Rows",相当于跳过所有中间步骤,从原始转换表重新开始添加列
  • 每次添加列都重复执行Table.Group,效率极低
  • 存在索引匹配错误:{[BOOKING ID=filter]}应为{[ID=filter]},否则无法正确匹配分组结果

解决方案

优化思路

  1. 提前一次性计算所有分组最大值,避免重复分组操作
  2. 通过表合并的方式将最大值列批量添加到原表
  3. 确保每一步转换都基于前一步的结果,保证所有列被传递

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:15:52