如何在Excel Power Query中按多字段分组提取列的最大值?
在Excel Power Query中实现多列分组并计算最大值
你需要的是对应SQL GROUP BY Year,month,name 并聚合MAX(qty)的功能,Power Query中可以通过可视化界面操作或编写M代码两种方式实现,以下是具体步骤:
一、可视化界面操作(适合新手)
- 将原表加载到Power Query:
选中你的数据区域,点击Excel顶部菜单栏的「数据」→「从表格/区域」,确认弹窗后进入Power Query编辑器。 - 执行分组操作:
点击编辑器顶部的「转换」→「分组依据」,在弹出的窗口中选择高级模式。 - 设置分组与聚合规则:
- 依次添加3个分组列:点击「添加分组」,分别选择
Year、month、name,操作均选择「分组依据」; - 添加聚合列:点击「添加聚合」,新列名输入
MaxQty,操作选择「最大值」,列选择qty;
- 依次添加3个分组列:点击「添加分组」,分别选择
- 调整列名(匹配期望输出):
右键点击name列,选择「重命名」,改为product; - 保存结果:
点击「关闭并上载」,将处理后的表格导入Excel。
二、直接编写M代码(适合高效操作)
如果熟悉Power Query的M语言,可以直接在编辑器的「高级编辑器」中替换代码,假设你的原表在Excel中名为Table1,代码如下:
let 源 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], 按多列分组并计算最大值 = Table.Group(源, {"Year", "month", "name"}, {{"MaxQty", each List.Max([qty]), type number}}), 重命名列 = Table.RenameColumns(按多列分组并计算最大值,{{"name", "product"}}) in 重命名列
代码说明:
Table.Group是Power Query实现分组聚合的核心函数,对应SQL的GROUP BY:- 第一个参数:要处理的源表;
- 第二个参数:分组列的列表(对应SQL中
GROUP BY后的字段); - 第三个参数:聚合规则列表,格式为
{"新列名", 聚合逻辑, 数据类型},这里用List.Max([qty])计算分组内的最大数量;
Table.RenameColumns用于将name列改为product,匹配你的期望输出格式。
补充说明
你之前尝试的List.Distinct(Table1[Year])仅能实现单列去重,无法处理多列分组和聚合计算,而Table.Group才是Power Query中对应SQL分组聚合场景的标准方案。
内容的提问来源于stack exchange,提问作者Milligator
相关产品推荐
相关产品推荐

