PowerBI DAX需求:按月和地点分组取最大Total关联数据计算
问题背景
数据源
| ID | Month | Place | Female Students | Male Students | Total |
|---|---|---|---|---|---|
| 1 | January | Place_1 | 250 | 10 | 260 |
| 2 | January | Place_2 | 50 | 50 | 100 |
| 3 | February | Place_1 | 100 | 50 | 150 |
| 4 | February | Place_1 | 175 | 25 | 200 |
| 5 | February | Place_2 | 100 | 100 | 200 |
| 6 | February | Place_2 | 200 | 50 | 250 |
| 7 | March | Place_1 | 200 | 50 | 250 |
| 8 | March | Place_1 | 10 | 190 | 200 |
| 9 | March | Place_2 | 100 | 200 | 300 |
| 10 | March | Place_2 | 300 | 100 | 400 |
已实现的度量值
已完成按Month和Place分组取最大Total的求和,DAX代码如下:
Sum of Total Max = SUMX ( SUMMARIZE ( 'Table', 'Table'[Month], 'Table'[Place], "Max Total", MAX('Table'[Total] )), [Max Total] )
待解决问题
- 编写DAX度量值,计算每个(Month,Place)分组中
Total为最大值的行对应的Female Students总和(对应ID:1、2、4、6、7、10); - 获取每个(Month,Place)分组中
Total为最大值的ID列表。
原尝试代码问题分析
你之前的Total Female Students Max度量值未达预期,核心问题是MaxTotal变量计算的是全局所有(Month,Place)分组中的最大Total值,而非当前上下文每个分组的最大值,导致过滤逻辑错误。
解决方案
问题1:分组最大Total对应的Female Students总和
以下两种写法均可实现需求:
写法一:结合SUMMARIZE分组计算
Sum Female Students at Max Total = SUMX ( SUMMARIZE ( 'Table', 'Table'[Month], 'Table'[Place], "Group Max Total", MAX('Table'[Total]), "Sum Female", CALCULATE( SUM('Table'[Female Students]), 'Table'[Total] = MAX('Table'[Total]) ) ), [Sum Female] )
写法二:嵌套SUMX处理上下文
Sum Female Students at Max Total = SUMX ( VALUES('Table'[Month]), SUMX ( VALUES('Table'[Place]), VAR CurrentMaxTotal = CALCULATE(MAX('Table'[Total])) RETURN CALCULATE( SUM('Table'[Female Students]), 'Table'[Total] = CurrentMaxTotal ) ) )
最终计算结果为:250+50+175+200+200+300=1175
问题2:分组最大Total对应的ID列表
使用CONCATENATEX函数将符合条件的ID拼接为字符串,可在卡片或表格中展示:
IDs at Max Total = CONCATENATEX ( FILTER ( 'Table', 'Table'[Total] = CALCULATE(MAX('Table'[Total]), ALLEXCEPT('Table', 'Table'[Month], 'Table'[Place])) ), 'Table'[ID], ", " )
代码说明
ALLEXCEPT('Table', 'Table'[Month], 'Table'[Place]):保留当前Month和Place的上下文,计算该分组的最大Total;FILTER:筛选出当前分组中Total等于最大值的行;CONCATENATEX:将这些行的ID用逗号连接成字符串。
内容的提问来源于stack exchange,提问作者Papios
相关产品推荐
相关产品推荐

