DAX中Previous Week Amount计算异常:选中多周时取值错误
DAX计算上周金额异常问题解决
问题说明
我有一张包含FiscalWeeks和Rank字段的FactTable,计算上周金额(Previous Week Amount)时出现异常。
现有DAX公式
Previous Week = CALCULATE( SUM(FactTable[Amount]), KEEPFILTERS('FactTable'[Week] = MAX('FactTable'[Week] ) )) Current Week = CALCULATE( SUM(FactTable[Amount]), KEEPFILTERS('FactTable'[Rank] = MIN('FactTable'[Rank] ) ))
样本数据
| Rank | Product | Amount | FiscalWeeks |
|---|---|---|---|
| 1 | R | 10 | FY24 WK52 |
| 1 | A | 5 | FY24 WK52 |
| 2 | R | 35 | FY24 WK51 |
| 2 | A | 5 | FY24 WK51 |
| 3 | R | 20 | FY24 WK50 |
| 3 | A | 10 | FY24 WK50 |
| 4 | R | 25 | FY24 WK49 |
| 4 | A | 25 | FY24 WK49 |
| 5 | R | 15 | FY24 WK48 |
| 5 | A | 5 | FY24 WK48 |
| 6 | R | 30 | FY24 WK47 |
| 6 | A | 20 | FY24 WK47 |
| 7 | R | 15 | FY24 WK46 |
| 7 | A | 25 | FY24 WK46 |
| 8 | R | 10 | FY24 WK45 |
| 8 | A | 40 | FY24 WK45 |
问题表现
选中3个周时,Current Week正确取到选中的最后一周FY24 WK52的金额15,但Previous Week却取到最早的FY24 WK49的金额50,而非与当前周最接近的FY24 WK50的金额30。
期望结果
- Current Week:15
- Previous Week:30(与当前周最接近的上一周)
解决方案
修正后的DAX公式
Previous Week = CALCULATE( SUM(FactTable[Amount]), KEEPFILTERS('FactTable'[Rank] = MIN('FactTable'[Rank]) + 1) )
原因分析
原Previous Week公式错误使用FiscalWeeks文本字段做匹配,文本排序逻辑与实际周顺序不符,导致多周筛选时返回错误结果。而Rank字段已经明确了周的先后顺序(Rank值越小,周越新),因此基于当前周的最小Rank值加1,即可精准定位到上一周的数据,符合业务期望。
内容的提问来源于stack exchange,提问作者symkly
相关产品推荐
相关产品推荐

