Power Query按ID分组未合并同ID行的问题及解决需求
Power Query按ID合并行并取最后一行Name的解决方案
我有如下结构的表格,尝试用Power Query的Group By功能按ID合并数据,但因为Name字段值不同,合并后还是多行。需求是:同一ID的数据合并为一行,Name字段取该ID对应最后一行的名称,各销售列合并非空数值。
输入表格
| ID | Name | Q1 Sales | Q2 Sales | Q3 Sales | Q4 Sales |
|---|---|---|---|---|---|
| A1 | Demo | 100 | 200 | 300 | |
| A1 | Demo1 | 400 |
期望输出表格
| ID | Name | Q1 Sales | Q2 Sales | Q3 Sales | Q4 Sales |
|---|---|---|---|---|---|
| A1 | Demo1 | 100 | 200 | 300 | 400 |
原Power Query代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Grouped Rows" = Table.Group(Source, {"ID"}, {{"All", each _, type table [ID=nullable text, Name=nullable text, Q1 Sales=nullable number, Q2 Sales=nullable number, Q3 Sales=nullable number, Q4 Sales=nullable number]}}), #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows", "All", {"Name", "Q1 Sales", "Q2 Sales", "Q3 Sales", "Q4 Sales"}, {"Name", "Q1 Sales", "Q2 Sales", "Q3 Sales", "Q4 Sales"}) in #"Expanded All"
原代码仅将同ID的行打包成子表,展开后仍保留原始多行,未做字段级聚合,因此无法实现合并效果。
修改后的Power Query代码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Grouped Rows" = Table.Group(Source, {"ID"}, { {"Name", each List.Last([Name]), type nullable text}, {"Q1 Sales", each List.Sum([Q1 Sales]), type nullable number}, {"Q2 Sales", each List.Sum([Q2 Sales]), type nullable number}, {"Q3 Sales", each List.Sum([Q3 Sales]), type nullable number}, {"Q4 Sales", each List.Sum([Q4 Sales]), type nullable number} }) in #"Grouped Rows"
关键修改说明
在Table.Group中针对每个字段单独设置聚合规则:
- Name字段:用
List.Last([Name])直接提取分组内最后一行的Name值 - 各销售字段:由于每个ID对应的销售列仅存在一个非空数值,
List.Sum会自动忽略空值,直接得到有效数值;若需处理多值场景,可根据需求替换为List.Max或List.Combine等函数。
内容的提问来源于stack exchange,提问作者Kushal Srivastava
相关产品推荐
相关产品推荐

