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

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"

输入数据示例:

IDTAXCODE
A4921
A6500
A6200
B2700
B2500
B1.5100

期望输出:

IDTAXCODE
A6500
B2700

(需按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"

代码说明:

  1. 先通过分组得到每个ID对应的最大TAX值,作为筛选基准
  2. 将原表与基准表合并,筛选出所有符合TAX=MaxTAX的行(也就是你原来代码中Custom=1的行)
  3. 最后在这些筛选后的行里再次分组,直接提取TAX和CODE的最大值,一步得到目标结果

这种方式避免了重复计算,逻辑更清晰,也能精准匹配你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:39:18