如何在Power BI/DAX中保持切片器对应计算结果不受其他筛选影响
根因说明
之前使用ALL()函数未生效的核心原因:点选质量问题维度的具体值(如“凹痕”)时,筛选上下文会同时加入两层筛选:一是问题维度本身的直接筛选,二是通过表间关系传递到审计事实表、日期字段的交叉筛选,这也是无对应问题的日期(5/17、5/20、5/23)被自动剔除的原因。普通ALL(问题表)写法仅能清除问题表的直接筛选,无法清除传递到事实表、日期字段的交叉筛选,因此计数结果异常。
可用DAX方案
以下写法仅修改度量值逻辑即可生效,无需调整视觉对象交互,可直接应用于视觉对象外的其他计算场景,度量值将始终保留「审计日期」切片器的选中范围,完全忽略质量问题维度的所有筛选影响。
规范建模场景(存在独立日期表,日期表与审计事实表通过审计日期字段建立关系)
所选范围去重审计部件数 = CALCULATE ( DISTINCTCOUNT ( '审计事实表'[部件唯一标识] ), // 保留审计日期切片器的选中范围筛选 ALLSELECTED ( '日期表'[审计日期] ), // 清除质量问题维度的所有直接、交叉筛选 REMOVEFILTERS ( '质量问题维度表' ) )
轻量建模场景(无独立日期表,审计日期字段直接存放在审计事实表中)
所选范围去重审计部件数 = CALCULATE ( DISTINCTCOUNT ( '审计事实表'[部件唯一标识] ), // 保留审计日期切片器的选中范围筛选 ALLSELECTED ( '审计事实表'[审计日期] ), // 清除问题维度及事实表问题字段带来的所有筛选 REMOVEFILTERS ( '质量问题维度表' ), REMOVEFILTERS ( '审计事实表'[质量问题字段] ) )
注意事项
- 不要直接使用
ALL(审计事实表)写法,该写法会同时清除审计日期切片器的筛选,返回全量日期范围的去重部件数,不符合需求。 - 上述写法在选择5月17日-6月2日日期区间时,无论是否点选任意质量问题项,都会固定返回正确值413。
REMOVEFILTERS仅作用于清除筛选,不会触发上下文转换,比同位置使用ALL()的稳定性更高。
内容的提问来源于stack exchange,提问作者bvy
相关产品推荐
相关产品推荐

