DAX Calculate函数未按日期筛选返回预期结果排查
问题分析与解决方案
你的问题出在筛选上下文的作用范围上:
- 卡片视觉对象没有逐行的日期筛选,所以
MAX('Date'[Date])能正确取到切片器所选的最大日期,计算出的起止日期是对的。 - 但图表(比如折线图/柱状图)的X轴绑定
'Date'[Date]时,每个X轴的日期会生成独立的筛选上下文,此时MAX('Date'[Date])会取当前X轴点的日期,而非切片器的整体结束日期。这就导致每个数据点都在计算自己的过去12个月,而非基于切片器选定的统一时间范围,所以图表会显示超出预期的日期。
修改后的DAX度量值
Cases Total Current 12mo (Slicer) = VAR SelectedEndDate = CALCULATE(MAX('Date'[Date]), ALLSELECTED('Date')) VAR EndDate = DATE(YEAR(SelectedEndDate), MONTH(SelectedEndDate), 1) VAR StartDate = EDATE(EndDate, -11) RETURN CALCULATE( SUM(Sales[Cases]), 'Date'[Date] >= StartDate && 'Date'[Date] <= EndDate )
关键改动说明
- 使用
CALCULATE(MAX('Date'[Date]), ALLSELECTED('Date'))获取切片器选定的最大日期,这个值不受图表X轴的逐行筛选影响,保证起止日期始终基于切片器的统一范围。 - 去掉原度量值中的
FILTER('Date', ...),直接在CALCULATE的筛选参数中写日期条件,DAX会更高效地处理这种简单筛选逻辑。
修改后,图表中超出StartDate的X轴点会返回空白,只会显示目标12个月范围内的销量总和。
内容的提问来源于stack exchange,提问作者OhioMike1987
相关产品推荐
相关产品推荐

