DAX实现基于lookup表所有distinct月份过滤事实表聚合计算
优化后的DAX度量值
Measure = VAR _monthsToCheck = 12 // 计算当前site+service组合下的去重月份数,仅清除月份维度的筛选 VAR _uniqueMonthCnt = CALCULATE ( DISTINCTCOUNT ( 'key'[month] ), REMOVEFILTERS ( 'key'[month] ) ) // 仅月份数等于12的组合返回val求和结果,否则返回空 VAR _result = IF ( _uniqueMonthCnt = _monthsToCheck, SUM ( 'fact'[val] ), BLANK() ) RETURN _result
原度量值问题说明
- 矩阵维度取自
key表,但原度量值基于fact表做聚合,fact表无数据的月份组合不会被纳入统计,导致明细行计算逻辑异常 - 原写法临时表在月份明细行上下文仅包含单月记录,嵌套
CALCULATE的筛选上下文传递会出现逻辑偏差,无法统一适配明细、汇总层级的计算要求
优化逻辑说明
- 基于维度表
key计算去重月份数,REMOVEFILTERS('key'[month])仅清除月份筛选,保留site、service的上下文,保证无论在明细还是汇总层级,判断的都是当前site+service组合的全年月份数 - 依托
key表到fact表的一对多筛选关系,SUM('fact'[val])会自动继承当前行的维度筛选,明细行自动匹配对应月份的交易汇总值,汇总行自动聚合全年数据,完全适配矩阵的多层级展示要求
内容的提问来源于stack exchange,提问作者smpa01
相关产品推荐
相关产品推荐

