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

Power BI按Tool Name分组取Price最大值并保留对应Country列的优化方法

Power BI分组取最大值并保留对应关联列的更优解法

针对你需要按Tool Name分组、取Price最大值并保留对应Country列的需求,以下是几种比现有合并方法更简洁的解决方案:

方法1:分组时直接自定义聚合(一步到位)

在Power Query的分组依据对话框中选择「高级」模式,配置如下:

  • 分组依据:Tool Name
  • 添加两个聚合规则:
    1. 名称:MaxPrice,操作:最大值,列:Price
    2. 名称:Country,操作:自定义,公式:
      Table.SelectRows(_, each [Price] = List.Max(_[Price])){0}[Country]
      

点击确定后直接得到结果:每个Tool Name对应的最高价格及对应国家。

注:如果同一Tool Name下有多个行价格同为最大值,此公式会取第一个匹配行的Country,和你原方法逻辑一致。

方法2:通过排名列筛选

  1. 在Power Query中添加排名列,按Tool Name分区、Price降序排名:
    = Table.AddRankColumn(源, "PriceRank", {"Tool Name", Order.Ascending}, {"Price", Order.Descending}, [RankKind = RankKind.Competition])
    
  2. 筛选出PriceRank = 1的行,再移除PriceRank列,即可得到每个Tool Name下价格最高的完整行(自动保留Country)。

方法3:简化合并逻辑的M代码

若偏好合并思路,可简化原步骤,无需额外添加自定义列:

let
    源 = 你的数据源表,
    // 分组提取每个Tool Name的最高价格
    分组取最高价 = Table.Group(源, {"Tool Name"}, {{"MaxPrice", each List.Max(_[Price]), type number}}),
    // 按Tool Name+MaxPrice合并回原表,直接匹配对应Country
    合并匹配 = Table.Join(分组取最高价, {"Tool Name", "MaxPrice"}, 源, {"Tool Name", "Price"}, JoinKind.LeftOuter),
    // 移除重复的Price列
    最终结果 = Table.RemoveColumns(合并匹配, {"Price"})
in
    最终结果

以上方法均无需繁琐的复制表、多步合并操作,其中方法1最贴近JMP/Pandas的便捷操作逻辑,一步完成分组+关联列保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:56:15