DAX实现透视表所选范围内动态累计去重客户数的问题咨询
动态累计去重客户数DAX实现方案
问题根因
原度量值出错的核心是ALL('Table1'[date])会完全清除所有作用于date字段的筛选约束,包括透视表筛选、切片器选择的日期范围,因此会统计到被过滤掉的日期的客户数据。
解决方案
直接将ALL替换为ALLSELECTED即可自动适配当前生效的日期筛选范围:
Cumulative_Distinct_cust:=CALCULATE ( [Distinct_cust]; FILTER ( ALLSELECTED ( 'Table1'[date] ); 'Table1'[date] <= MAX ('Table1'[date]) ) )
ALLSELECTED('Table1'[date])会自动获取当前透视表/报表上下文里用户实际选中的所有日期范围,仅移除透视表行/列维度带来的日期行上下文筛选,不会清除用户手动施加的日期过滤条件,无需每次调整筛选范围后手动修改代码。
优化写法(可选)
使用变量封装逻辑可读性更强,也兼容更复杂的筛选场景:
Cumulative_Distinct_cust:= VAR CurrentRowMaxDate = MAX('Table1'[date]) VAR ValidDateRange = ALLSELECTED('Table1'[date]) RETURN CALCULATE( [Distinct_cust]; FILTER( ValidDateRange; 'Table1'[date] <= CurrentRowMaxDate ) )
该写法同时保留category1、category2等其他维度的筛选上下文,和原有Distinct_cust度量值的维度适配逻辑完全一致,在小计、总计、多维度交叉场景下都可正确计算。
内容的提问来源于stack exchange,提问作者Tetlanesh
相关产品推荐
相关产品推荐

