在DAX中按分组求TopN:获取各Source对应MAX(FYandFW num)的sum值
解决DAX计算每个Source最大FYandFW num对应sum总和的问题
需求说明
按每个Source分组,找到每组内最大的FYandFW num,然后计算这些最大值对应的sum字段的总和(预期结果为6:Company A最大202453对应sum=1,Company B最大202502对应sum=5,1+5=6)
样本数据集
| Source | FYandFW num | sum |
|---|---|---|
| Company A | 202453 | 1 |
| Company A | 202452 | 2 |
| Company A | 202451 | 3 |
| Company B | 202501 | 4 |
| Company B | 202502 | 5 |
| Company B | 202453 | 6 |
原代码问题分析
你当前的DAX代码逻辑存在冲突:
VAR j = VALUES('Table'[FYandFW num])会引入当前上下文的FYandFW num筛选,干扰对每个Source最大值的匹配- 最终
CALCULATE中同时使用t和j作为筛选条件,导致无法正确定位到每个Source的最大值对应的sum记录
正确DAX写法
写法一:使用SUMX遍历分组计算
Amt = SUMX( VALUES('Table'[Source]), // 计算当前Source分组下的最大FYandFW num VAR MaxFYandFW = CALCULATE(MAX('Table'[FYandFW num])) // 取当前分组下等于最大值的sum总和 RETURN CALCULATE(SUM('Table'[sum]), 'Table'[FYandFW num] = MaxFYandFW) )
写法二:先构建最大值表再筛选求和
Amt = // 生成每个Source对应的最大FYandFW num的临时表 VAR MaxFYandFWPerSource = SUMMARIZE( 'Table', 'Table'[Source], "@MaxFYandFW", MAX('Table'[FYandFW num]) ) RETURN // 用临时表筛选原数据,计算符合条件的sum总和 CALCULATE( SUM('Table'[sum]), TREATAS( MaxFYandFWPerSource, 'Table'[Source], 'Table'[FYandFW num] ) )
两种写法都能得到预期的合计结果6,可根据你的模型上下文选择使用。
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

