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

基于分组最大值在PowerBI中查找对应值的DAX实现问题

PowerBI DAX实现分组最大值对应值(匹配SQL窗口函数逻辑)

问题背景

有深厚SQL背景,刚接触DAX,需实现类似SQL中CASE WHEN MAX(column) OVER (PARTITION BY group) = column2 THEN column3 ELSE "" END的逻辑:在PowerBI中基于分组内的ID最大值,仅在对应行显示该分组的Amount值,其余行留空,同时保证目标列总计为分组最大值的汇总。

原始数据

ID    GroupID    Amount
1     2          8502
2     2          8502
3     2          8502
4     2          8502
1     6          80
2     6          80

期望结果

ID    GroupID    Amount    LatestGroupAmount
1     2          8502
2     2          8502
3     2          8502
4     2          8502      8502
1     6          80
2     6          80        80

要求:LatestGroupAmount列总计为8582(8502+80)

已尝试方法及问题

  • 创建了两个度量值:
    MaxID = MAX(data[ID])
    MaxIDbyGroup = CALCULATE([MaxID], ALLEXCEPT(data, data[GroupID]))
    
  • 尝试用LOOKUPVALUE(data[Amount], data[GroupId], data[MaxIDbyGroup])未得到正确结果
  • 用CALCULATE实现时,出现数据行被过滤的问题,仅添加MaxID列后才显示全部行,但不需要该列

解决方案

方案1:计算列+度量值组合实现

  1. 添加计算列标记最大ID行
    先创建计算列,标记当前行是否为对应GroupID下的最大ID行:
IsMaxIDInGroup = IF(data[ID] = CALCULATE(MAX(data[ID]), ALLEXCEPT(data, data[GroupID])), TRUE(), FALSE())
  1. 创建目标度量值
    通过度量值控制显示逻辑,同时保证总计正确:
LatestGroupAmount = 
VAR CurrentIsMax = SELECTEDVALUE(data[IsMaxIDInGroup])
VAR GroupAmount = CALCULATE(MAX(data[Amount]), ALLEXCEPT(data, data[GroupID]))
RETURN
IF(CurrentIsMax = TRUE(), GroupAmount, BLANK())

方案2:纯度量值实现(无需额外计算列)

直接在度量值内完成判断逻辑,不需要新增计算列:

LatestGroupAmount = 
VAR CurrentID = SELECTEDVALUE(data[ID])
VAR MaxIDInGroup = CALCULATE(MAX(data[ID]), ALLEXCEPT(data, data[GroupID]))
VAR GroupAmount = CALCULATE(MAX(data[Amount]), ALLEXCEPT(data, data[GroupID]))
RETURN
IF(CurrentID = MaxIDInGroup, GroupAmount, BLANK())

效果说明

  • 仅分组内ID最大的行显示对应Amount,其余行留空
  • 总计自动汇总所有分组的最大Amount值,符合8582的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:15