面积图中30天周期同比对比出现天数偏差问题排查
最近30天与前30天DAX度量值及图表显示异常问题
我正在计算最近30天与前30天的数据对比,使用的DAX度量值如下:
当前30天度量值
Total Current 30 Days = CALCULATE( [Switch Currency], FILTER( 'Calendar', 'Calendar'[Date] >= TODAY() - 31 && 'Calendar'[Date] <= TODAY() - 2 ) )
前30天度量值
Total Previous 30 Days = CALCULATE( 'Costs Summary Table'[Sum of measures], FILTER( 'Calendar', 'Calendar'[Date] >= TODAY() - 61 && -- Go back 61 days to cover a full 30-day period before the previous 30 days 'Calendar'[Date] <= TODAY() - 32 -- Go back 32 days to end 31 days ago ) )
将这两个度量值放入面积图后,出现以下情况:
- Total Previous 30 Days:周期为4月25日至5月24日(共29天)
- Total Current 30 Days:周期为5月25日至6月23日(共29天)
手动验证这两个周期确实是29天,但移除X轴月份后重叠显示时,一个显示30天,另一个显示31天。请问问题出在哪里?
问题根源与解决办法
1. DAX日期范围计算错误
你当前的公式本身就只能算出29天,不是30天:
- 当前30天公式:
TODAY()-31到TODAY()-2,天数计算为(TODAY()-2) - (TODAY()-31) + 1 = 29 - 前30天公式:
TODAY()-61到TODAY()-32,天数计算为(TODAY()-32) - (TODAY()-61) + 1 = 29
这就是实际周期只有29天的核心原因。
2. 图表X轴的自动填充/分组问题
移除X轴月份后,Power BI图表会自动将X轴范围扩展到两个周期的最大跨度(比如从4月25日到6月23日),再加上如果你的日历表存在日期断档,或者开启了自动时间智能功能,就会导致视觉上显示的天数和实际数据周期不符,出现一个30天一个31天的错觉。
修正方案
第一步:修正DAX度量值,确保准确的30天周期
用DATESINPERIOD函数替代手动写FILTER,逻辑更清晰且不易出错:
当前30天(最近结束的完整30天,不含今天和昨天)
Total Current 30 Days = CALCULATE( [Switch Currency], DATESINPERIOD('Calendar'[Date], TODAY()-1, -30, DAY) )
示例:若今天是6月24日,该公式会覆盖5月25日至6月23日,正好30天。
前30天(当前30天的上一个完整30天)
Total Previous 30 Days = CALCULATE( 'Costs Summary Table'[Sum of measures], DATESINPERIOD('Calendar'[Date], TODAY()-31, -30, DAY) )
示例:若今天是6月24日,该公式会覆盖4月25日至5月24日,正好30天。
第二步:解决图表重叠显示异常
- 确保你的
Calendar表是连续无缺失的完整日期表,时间智能函数依赖无断档的日期序列。 - 在图表X轴设置中,将日期粒度固定为「天」,并关闭「自动时间智能」功能(在X轴字段的下拉菜单中操作),避免图表自动补全多余日期。
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

