Power BI按Tool Name分组取Price最大值并保留对应Country列的优化方法
Power BI分组取最大值并保留对应关联列的更优解法
针对你需要按Tool Name分组、取Price最大值并保留对应Country列的需求,以下是几种比现有合并方法更简洁的解决方案:
方法1:分组时直接自定义聚合(一步到位)
在Power Query的分组依据对话框中选择「高级」模式,配置如下:
- 分组依据:
Tool Name - 添加两个聚合规则:
- 名称:
MaxPrice,操作:最大值,列:Price - 名称:
Country,操作:自定义,公式:Table.SelectRows(_, each [Price] = List.Max(_[Price])){0}[Country]
- 名称:
点击确定后直接得到结果:每个Tool Name对应的最高价格及对应国家。
注:如果同一
Tool Name下有多个行价格同为最大值,此公式会取第一个匹配行的Country,和你原方法逻辑一致。
方法2:通过排名列筛选
- 在Power Query中添加排名列,按
Tool Name分区、Price降序排名:= Table.AddRankColumn(源, "PriceRank", {"Tool Name", Order.Ascending}, {"Price", Order.Descending}, [RankKind = RankKind.Competition]) - 筛选出
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
相关产品推荐
相关产品推荐

