Power Query分组筛选需求:按ID获取TAX与CODE双最大值
Power Query 分组筛选问题
我尝试用以下Power Query代码添加列来获取指定字段的最大值,但希望对Custom列值为1的行进行分组,需要修改这段代码:
[ filter = [ID] /*这里要不要加额外筛选?*/, max2=Table.Group( Source, {"ID"}, {{"MaxFiltered2", each List.Max([CODE])}} ){[ID=filter]}[MaxFiltered2] ][max2] )
完整代码序列如下:
#"Added Custom" = Table.AddColumn( #"Changed Type", "maxInt", each [ filter = [ID], max=Table.Group( Source, {"ID"}, {{"MaxFiltered", each List.Max([TAX])}} ){[ID=filter]}[MaxFiltered] ][max] ), #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom", each if [maxInt]=[TAX] then 1 else 0), #"Filtered Rows" = Table.SelectRows(#"Added Custom1", each ([Custom] = 1)), #"Added Custom2" = Table.AddColumn( #"Changed Type", "maxInt2", each [ filter = [ID], max2=Table.Group( Source, {"ID"}, {{"MaxFiltered2", each List.Max([CODE])}} ){[ID=filter]}[MaxFiltered2] ][max2] ) in #"Added Custom2"
输入数据示例:
| ID | TAX | CODE |
|---|---|---|
| A | 4 | 921 |
| A | 6 | 500 |
| A | 6 | 200 |
| B | 2 | 700 |
| B | 2 | 500 |
| B | 1.5 | 100 |
期望输出:
| ID | TAX | CODE |
|---|---|---|
| A | 6 | 500 |
| B | 2 | 700 |
(需按ID分别获取TAX和CODE的最大值)
解决方案
核心需求是先按ID筛选出TAX最大的行,再在这些行里按ID取CODE的最大值,无需多次添加列,直接通过分组+筛选的组合逻辑实现更高效:
修改后的完整代码:
let Source = /* 替换为你的数据源 */, #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", type text}, {"TAX", type number}, {"CODE", type number}}), // 1. 按ID分组,计算每个ID的最大TAX值 #"Grouped by ID" = Table.Group(#"Changed Type", {"ID"}, {{"MaxTAX", each List.Max([TAX]), type number}}), // 2. 合并原表与最大TAX表,筛选出TAX等于对应ID最大TAX的行 #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"ID"}, #"Grouped by ID", {"ID"}, "Grouped by ID", JoinKind.LeftOuter), #"Expanded Grouped by ID" = Table.ExpandTableColumn(#"Merged Queries", "Grouped by ID", {"MaxTAX"}, {"MaxTAX"}), #"Filtered Rows" = Table.SelectRows(#"Expanded Grouped by ID", each [TAX] = [MaxTAX]), // 3. 在筛选后的行里按ID分组,提取TAX最大值和CODE最大值 #"Final Group" = Table.Group(#"Filtered Rows", {"ID"}, { {"TAX", each List.Max([TAX]), type number}, {"CODE", each List.Max([CODE]), type number} }) in #"Final Group"
代码说明:
- 先通过分组得到每个
ID对应的最大TAX值,作为筛选基准 - 将原表与基准表合并,筛选出所有符合
TAX=MaxTAX的行(也就是你原来代码中Custom=1的行) - 最后在这些筛选后的行里再次分组,直接提取
TAX和CODE的最大值,一步得到目标结果
这种方式避免了重复计算,逻辑更清晰,也能精准匹配你的需求。
内容的提问来源于stack exchange,提问作者chaosKnight
相关产品推荐
相关产品推荐

