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

Power Query按条件分组聚合+动态列实现方案咨询

按聚合条件列动态聚合周度数值的M代码方案

数据结构说明

假设你的表格列名对应如下(可根据实际情况调整):

  • 国家: Country(原A列)
  • 产品分类: Product_Category(原E列)
  • 产品名称: Product_Name(原F列)
  • 聚合条件: AGG_Condition(原G列)
  • 动态周度列: 列名包含Week_(原H-L列,对应周44-48)

核心M代码(以求和聚合为例)

let
    // 加载原始数据,替换成你的数据源引用(比如Excel表名/CSV路径)
    Source = Excel.CurrentWorkbook(){[Name="YourRawDataTable"]}[Content],
    
    // 自动识别所有周度列(适配动态周数,无需硬编码)
    WeekColumns = List.Select(Table.ColumnNames(Source), each Text.Contains(_, "Week_")),
    
    // 按维度列+聚合条件分组,对每个周度列执行求和聚合
    AggregatedData = Table.Group(Source, 
        {"Country", "Product_Category", "Product_Name", "AGG_Condition"},
        List.Transform(WeekColumns, each {_, each List.Sum(_), type number})),
    
    // 移除聚合列的自动后缀(.1),恢复原始周度列名
    CleanColumnNames = Table.RenameColumns(AggregatedData,
        List.Zip({List.Select(Table.ColumnNames(AggregatedData), each Text.EndsWith(_, ".1")), WeekColumns})),
    
    // 最终输出结果
    FinalResult = CleanColumnNames
in
    FinalResult

聚合逻辑说明

  1. 动态周列识别:通过List.Select匹配所有含Week_的列,不管周数怎么变化(比如新增周49、删除周44)都能自动适配,避免硬编码列名的维护问题。
  2. 分组聚合:以维度列(国家、产品信息)和AGG_Condition为分组键,对每个周度列执行List.Sum求和。如果需要其他聚合方式,直接替换List.Sum即可:
    • 平均值:List.Average
    • 计数:List.Count
    • 最大值:List.Max
  3. 列名清理:分组后的聚合列会自动添加.1后缀,通过Table.RenameColumns将其恢复为原始周度列名,保证输出格式的一致性。

扩展:按聚合条件值切换聚合方式

如果AGG_Condition列的不同值对应不同聚合规则(比如"Sum"对应求和,"Avg"对应平均),可以修改分组逻辑:

AggregatedData = Table.Group(Source, 
    {"Country", "Product_Category", "Product_Name", "AGG_Condition"},
    List.Transform(WeekColumns, each {_, each 
        if [AGG_Condition]{0} = "Sum" then List.Sum(_)
        else if [AGG_Condition]{0} = "Avg" then List.Average(_)
        else if [AGG_Condition]{0} = "Count" then List.Count(_)
        else null, type number}))

内容的提问来源于stack exchange,提问作者Artemy Panin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:32