Power BI DAX度量值使用ALL()函数无法获取未过滤数据问题求助
DAX动态时钟度量值返回0问题排查与修复方案
问题根因定位
- ALL函数调用逻辑错误:
AVERAGEX(ALL(Facts_Values), Facts_Values[Value])已经移除了Facts_Values表上的所有筛选,外层CALCULATE新增的'Facts_Values'[Quarter from] == _CURRENT_DATE筛选器无法作用于已经清除筛选的表,导致筛选条件失效,平均值计算逻辑完全错误。 - 时间智能函数未保留独立上下文:计算回溯日期时调用的
'Date'[Date]受外部切片器/可视化轴筛选影响,当所选日期范围不包含回溯日期时,时间智能函数返回空值,后续计算直接为0。 - 字段拼写错误:短周期平均值计算中引用的
Facts_Values[Values]多了末尾的s,与事实表实际字段Facts_Values[Value]不匹配,返回空值。 - CALCULATE嵌套冗余:无意义的双层CALCULATE嵌套会干扰筛选上下文传递,进一步提升逻辑出错概率。
修复后的DAX代码
New Clock = VAR _SHORTTERM = 3 VAR _LONGTERM = 6 // 取当前上下文最小日期的当月1号,可响应X轴日期维度/用户日期选择 VAR _CURRENT_DATE = DATE(YEAR(MIN('Date'[Date])), MONTH(MIN('Date'[Date])), 1) // 计算回溯日期时强制使用完整日期表,不受外部筛选限制 VAR _SHORT_TERM_DATE = PREVIOUSDAY( FIRSTDATE( DATESINPERIOD( ALL('Date'[Date]), _CURRENT_DATE, -(3*_SHORTTERM), MONTH) )) VAR _LONG_TERM_DATE = PREVIOUSDAY( FIRSTDATE( DATESINPERIOD( ALL('Date'[Date]), _CURRENT_DATE, -(3*_LONGTERM), MONTH) )) // 平均值计算:先清除事实表外部筛选,再应用季度筛选,保证筛选条件生效 VAR _CURRENT_AVERAGE = CALCULATE( AVERAGE(Facts_Values[Value]), ALL(Facts_Values), 'Facts_Values'[Quarter from] == _CURRENT_DATE ) VAR _LONGTERM_AVERAGE = CALCULATE( AVERAGE(Facts_Values[Value]), ALL(Facts_Values), 'Facts_Values'[Quarter from] == _LONG_TERM_DATE ) VAR _SHORTTERM_AVERAGE = CALCULATE( AVERAGE(Facts_Values[Value]), // 修复字段拼写错误 ALL(Facts_Values), 'Facts_Values'[Quarter from] == _SHORT_TERM_DATE ) // 用DIVIDE避免除零错误 VAR _LONGTERM_AVERAGE_RELATIVE = DIVIDE(_CURRENT_AVERAGE - _LONGTERM_AVERAGE, _LONGTERM - 1, 0) VAR _SHORTTERM_AVERAGE_RELATIVE = DIVIDE(_CURRENT_AVERAGE - _SHORTTERM_AVERAGE, _SHORTTERM - 1, 0) // 下方原有业务逻辑保持不变 .. .. .. VAR _ALL = ROUNDDOWN((12 * (RDV+YDV+IDV+RLV+YLV+ILV)),0)+ 1 Return _ALL
优化建议
- 建议在
Date表上标记为官方日期表,保证时间智能函数运行稳定,可通过模型视图 -> 选中Date表 -> 标记为日期表完成设置。 - 若需要保留除日期外其他维度的切片器筛选,可将
ALL(Facts_Values)替换为ALL('Date'),仅移除日期维度的外部筛选即可。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

