计算当年平均箱数的DAX度量值返回空白问题咨询
当年平均箱数DAX度量值排查与实现方案
我尝试创建计算当年平均箱数的DAX度量值,两种写法都返回空白。已验证日期列按年份筛选数据正常,日期格式也没问题,但度量值逻辑无法生效,现在需要排查错误原因,同时要实现当年与上年数据对比,但目前连当年数值都拿不到。
尝试过的两种DAX写法
方法1
Bins CY Avg = CALCULATE( AVERAGE('All-Pivoted'[Value]), 'All-Pivoted'[Component] = "Bins/ Containers", YEAR('All-Pivoted'[Year]) = YEAR(TODAY()) )
方法2
Bins CY Avg2 = VAR CurrentYear = MAX('All-Pivoted'[Year].[Year]) RETURN CALCULATE( AVERAGE('All-Pivoted'[Value]), 'All-Pivoted'[Component] = "Bins/ Containers", FILTER( 'All-Pivoted', YEAR('All-Pivoted'[Date]) = CurrentYear ) )
错误原因分析
方法1问题:
- 如果
'All-Pivoted'[Year]是数值型年份列,不需要嵌套YEAR()函数,直接写'All-Pivoted'[Year] = YEAR(TODAY())即可;如果[Year]是日期列,应该用YEAR('All-Pivoted'[Date])而非YEAR('All-Pivoted'[Year]),否则会导致年份判断错误。 - 未考虑外部筛选上下文冲突,比如报表中已有其他年份筛选时,会覆盖度量值内的条件。
- 如果
方法2问题:
MAX('All-Pivoted'[Year].[Year])是针对日期层次结构的写法,如果[Year]是独立的数值列,应该用MAX('All-Pivoted'[Year]);如果没有外部年份筛选,CurrentYear会返回空白,导致FILTER无结果。- FILTER遍历整个表会忽略外部筛选上下文,同时如果
[Year]列和[Date]列的年份不匹配,也会筛选不到数据。
修正后的DAX度量值
当年平均箱数(基础版)
如果用日期列判断年份:
Bins CY Avg = CALCULATE( AVERAGE('All-Pivoted'[Value]), 'All-Pivoted'[Component] = "Bins/ Containers", YEAR('All-Pivoted'[Date]) = YEAR(TODAY()), ALLSELECTED('All-Pivoted') // 保留报表中的其他筛选条件 )
如果有独立的数值型Year列:
Bins CY Avg = CALCULATE( AVERAGE('All-Pivoted'[Value]), 'All-Pivoted'[Component] = "Bins/ Containers", 'All-Pivoted'[Year] = YEAR(TODAY()) )
当年与上年对比度量值
先创建上年平均箱数:
Bins PY Avg = CALCULATE( [Bins CY Avg], DATEADD('All-Pivoted'[Date], -1, YEAR) )
再计算差值和同比变化:
Bins CY vs PY Diff = [Bins CY Avg] - [Bins PY Avg] Bins CY vs PY % Change = DIVIDE([Bins CY vs PY Diff], [Bins PY Avg], 0)
注意事项
- 确认
'All-Pivoted'[Date]是真正的日期类型,而非文本格式 - 推荐使用单独的日期维度表(与事实表关联),可以用
DATESYTD、SAMEPERIODLASTYEAR等更稳定的时间智能函数 - 检查
"Bins/ Containers"的拼写、空格、大小写是否与数据中完全一致 - 确保当前年份在数据集中有对应记录,否则度量值会返回空白
内容的提问来源于stack exchange,提问作者Mehek Salim
相关产品推荐
相关产品推荐

