Power BI DAX中CALCULATE忽略外部筛选上下文问题咨询
DAX计算中CALCULATE忽略外层筛选上下文的底层逻辑问题
问题背景
- 此前曾在Power BI社区发布过相关问题,重新梳理逻辑后仍未理解其底层运行规则,因此再次提问。
- 已检索「running total(累计值)」「filter context(筛选上下文)」相关公开资料,未在合理时间内找到匹配的解答。
- 核心需求为使用DAX计算累计值,模型中包含两张表:
- 业务事实表
- 已标记为正式日期表的日历表:表内设有
is_this_year标记字段,当前年份(2021)对应值为1,其余年份对应值为0,表中日期最早从2019年初开始。
- 报表层配置:已设置
is_this_year字段的页级筛选器,筛选值为1,即页面默认仅展示2021年的相关数据。
问题复现
基于上述配置编写的初始度量值如下:
theMeasure = VAR cur_max = MAX ( 'Calendar'[Date] ) RETURN CALCULATE ( MIN ( 'Calendar'[Date] ), 'Calendar'[Date] <= cur_max )
预期表现:受页级筛选器约束,每一行返回的符合条件的最小日期应为2021年1月1日,例:日期为2021年5月5日的行,度量值应返回2021-01-01。
实际表现:页级筛选规则似乎被完全忽略,2021年5月5日对应的度量值返回了2019年1月3日,与预期完全不符。
初始逻辑判断
按照对DAX筛选上下文的常规理解,推导逻辑如下:
- 页级筛选器会自动在外层筛选上下文中加入
Calendar[is_this_year] = 1的条件,仅保留标记为当年的日历行 - 度量值内新增的是
Calendar[Date]列的筛选条件,两个筛选作用于同一张表的不同列,应当共存生效 - 最终筛选上下文需要同时满足
is_this_year = 1、Date <= 当前行最大日期两个条件,再返回符合条件的最小日期
但实际返回了筛选范围外的2019年日期,该现象无法通过现有逻辑推导解释。
已验证的可行方案
目前测试发现在CALCULATE中额外添加VALUES('Calendar'[is_this_year])作为筛选参数,可以得到符合预期的正确结果,对应度量值写法如下:
theMeasure = VAR cur_max = MAX ( 'Calendar'[Date] ) RETURN CALCULATE ( MIN ( 'Calendar'[Date] ), 'Calendar'[Date] <= cur_max, VALUES('Calendar'[is_this_year]) )
核心疑惑:is_this_year = 1的筛选条件本应存在于外层页级筛选上下文中,为何需要在CALCULATE中重复传入才能生效?
可通过配套示例文件完整复现上述问题,期望得到该现象对应的DAX底层运行逻辑解释。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

