DAX计算列实现按ClientID分组、重复日期按ID排序的累计求和
DAX 按分组多字段排序累计运行总计计算列解决方案
问题原因
原有代码仅对日期做了小于等于的筛选,没有覆盖同日期下按ID从小到大累加的规则,会导致同一ClientID同日期的所有行得到的累计值完全相同,不符合需求。
正确DAX计算列代码
Running Sum = // 存储当前行的三个关键维度值,避免上下文转换偏差 VAR CurrentClientID = TBL[ClientID] VAR CurrentDate = TBL[Date] VAR CurrentID = TBL[ID] RETURN CALCULATE( SUM(TBL[Amount]), // 限定仅统计同ClientID的行 TBL[ClientID] = CurrentClientID, // 筛选符合排序规则的行:要么日期更早,要么同日期且ID小于等于当前行ID TBL[Date] < CurrentDate || (TBL[Date] = CurrentDate && TBL[ID] <= CurrentID) )
逻辑说明
- 变量提前存储当前行的ClientID、日期、ID,解决行上下文转筛选上下文时的取值偏差问题
- 第一层筛选限定累加范围仅为当前行所属的ClientID分组
- 第二层筛选实现双重排序规则:所有日期早于当前行的记录全部纳入累加;同一日期下仅ID小于等于当前行ID的记录纳入累加,完美匹配要求的排序累加规则
结果验证
以ClientID=2、日期为07/01/2021的三行记录为例:
- ID=3的行:累计范围为03/01的100、06/01的50、自身的50,合计200,符合预期
- ID=7的行:在上述基础上累加ID=7的100,合计300,符合预期
- ID=9的行:在上述基础上累加ID=9的200,合计500,符合预期
内容的提问来源于stack exchange,提问作者xl0911
相关产品推荐
相关产品推荐

