暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PowerBI-Dax-All函数(四)

BISeven 2021-05-17
934

上篇文章提到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了


其他文章:

  1.  PowerBI中ALL函数

  2. PowerBI-Dax-All函数(二)

  3. PowerBI-Dax-All函数(三)

  4. https://www.sqlbi.com/articles/understanding-dax-auto-exist/



文章转载自BISeven,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论