如何在DAX中按分组汇总最新日期的金额并求和
DAX实现分组取最新日期并汇总金额
需求说明
按Group1和Group2分组,仅保留每个分组下最大(最新)日期的数据,同时对该日期对应的Amount求和。
示例数据
| Group1 | Group2 | Date | Amount |
|---|---|---|---|
| A1 | B1 | 6/20/2025 | 3 |
| A1 | B1 | 6/20/2025 | 5 |
| A1 | B1 | 6/19/2025 | 7 |
| A2 | B2 | 6/20/2025 | 9 |
| A2 | B2 | 6/19/2025 | 11 |
预期结果
| Group1 | Group2 | Date | 总金额 |
|---|---|---|---|
| A1 | B1 | 6/20/2025 | 8 |
| A2 | B2 | 6/20/2025 | 9 |
解决方案
以下两种DAX写法均可实现需求,选择适合你数据模型的方式即可:
方法1:先获取分组最大日期再关联求和
最新日期金额汇总 = VAR 分组最大日期 = SUMMARIZE( '原表', '原表'[Group1], '原表'[Group2], "最大日期", MAX('原表'[Date]) ) RETURN SUMMARIZE( NATURALINNERJOIN('原表', 分组最大日期), '原表'[Group1], '原表'[Group2], '原表'[Date], "总金额", SUM('原表'[Amount]) )
- 步骤说明:
- 用
SUMMARIZE生成每个Group1+Group2组合的最大日期临时表; - 通过
NATURALINNERJOIN关联原表与临时表,过滤出仅包含最大日期的行; - 再次用
SUMMARIZE对过滤后的数据按分组和日期求和。
- 用
方法2:直接筛选最大日期后求和
最新日期金额汇总 = CALCULATETABLE( SUMMARIZE( '原表', '原表'[Group1], '原表'[Group2], '原表'[Date], "总金额", SUM('原表'[Amount]) ), FILTER( '原表', '原表'[Date] = CALCULATE(MAX('原表'[Date]), ALLEXCEPT('原表', '原表'[Group1], '原表'[Group2])) ) )
- 步骤说明:
- 内部
SUMMARIZE负责常规分组求和逻辑; - 外层
FILTER结合ALLEXCEPT,保留Group1和Group2的上下文,计算每个分组的最大日期,仅筛选出该日期对应的行; CALCULATETABLE将筛选后的结果传入求和逻辑,得到最终汇总表。
- 内部
注意:将代码中的
'原表'替换为你实际使用的表名即可。
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

