上篇文章提到All函数可以清除筛选器,但是在某些情景中并不能清楚筛选器,原因是auto-exist的存在,那到底什么是auto-exist? auto-exist什么时候起作用?
在powerBI中,auto-exist是一种优化筛选的技术,在某些特定Dax查询减少需处理数据的数量
当多个筛选列(大于等于两列)及计算列来自同一张表时,会触发auto-exist
话不多说,看示例:
有一张表,记录学生姓名的成绩,其中李四比张三的成绩多一门:英语

我们看看以下计算学生分数的Dax:
第一个公式计算的是学生的成绩;
第二个公式在计算成绩前,要清除列Student的筛选;
# Student.Score =SUM ( 'YiLuXiangBei auto_exist'[Score] )# AllStudent.Score =CALCULATE ([Student.Score],ALL ( 'YiLuXiangBei auto_exist'[Student] ) -- 清除列student的筛选)
我们利用上面的度量值建立一个Dashboard

在当前的筛选条件下,Student.Score 计算是李四的数学及英语的总成绩为130,AllStudent.Score计算的是所有学生的数学及英语的总成绩210 ,嗯,这看起来都没有问题
接着看下图,当切换为张三后,度量值Student.Score为80,计算为正确的,但是AllStudent.Score 计算是错误,还是应该为210,但是结果却为150

原因就是auto-exist,使得All函数不能清除所有的筛选器,auto-exist的工作原理当同一张表中的多列被筛选时,powerbi 会用多列的拼接键去数据源中查询,不会返回拼接键不存在的记录。例如示例中,PowerBI 在查询时会用姓名+科目去查询,示例中张三没有英语科目,查询出的结果就只有张三+数学的组合,所以用all函数清楚筛选器时,也只有张三+李四的数学成绩了,为150。
所以针对这种情况,解决办法就是星型结构,在维度表中进行筛选,在事实表中进行计算,这时就不会触发这个auto-exist了
其他文章:
文章转载自BISeven,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




