Power Query中如何按动态列名实现分组求和?
在Power Query中按动态列名实现分组求和
你可以通过动态生成分组聚合规则来实现,不用手动写死每一列的求和逻辑,完美适配列名每月变动的场景。具体实现方式如下:
- 先用
List.Difference筛选出所有需要求和的动态列(排除固定分组列Bütçe Kodu和无需求和的Bütçe Kalemi) - 将这些动态列转换成
Table.Group所需的聚合项格式 - 把固定聚合项(比如你的
Sum Total)和动态生成的聚合项合并,传入分组函数执行操作
完整代码如下:
let Source = #"Cost Summary", // 获取所有需要求和的动态列(排除固定列) x = List.Difference(Table.ColumnNames(Source),{"Bütçe Kodu", "Bütçe Kalemi"}), // 为每个动态列生成对应的求和聚合规则 DynamicAggregations = List.Transform(x, each {"sum " & _, each List.Sum([_]), type nullable number}), // 合并固定聚合项与动态聚合项 AllAggregations = List.Combine({{{"Sum Total", each List.Sum([Total Cost]), type number}}, DynamicAggregations}), // 执行分组求和 #"Grouped Rows" = Table.Group(Source, {"Bütçe Kodu"}, AllAggregations) in #"Grouped Rows"
核心逻辑说明
List.Transform(x, ...):遍历动态列列表x,自动为每个列生成求和规则,命名格式和你手动写的sum 2023.08保持一致List.Combine:把固定的Sum Total求和项和动态生成的规则合并成完整的聚合列表,确保分组时同时包含固定项和所有动态列的求和结果- 后续新增月份列时,代码会自动识别并加入求和逻辑,完全不用手动修改
内容的提问来源于stack exchange,提问作者Umut K
相关产品推荐
相关产品推荐

