今天研究一下AllCrossfiltered函数及与All的区别
在这篇文章中介绍了All函数可以去清除指定的表中可能已应用的筛选器,筛选器来自本表或者其扩展表,如下图
假如我们有两张表:科目表与成绩表,成绩表中包含不同科目的成绩。科目表与成绩表建立“一对多”的关系。


可以通过All函数去掉来自科目表的筛选,看以下度量值:
All.course.Score = CALCULATE(sum(Score[Score]), all(Score))

正因为All函数通过清除Score表的筛选器(因为Score表的扩展表包含course表,所以也就清楚了来自course表的筛选器),所以course 表中的CouseName 不再起作用,得到分数总是340;
在这里做点小小的改动,将关系由 一对多 改成 多对多,还是使用同样的度量值, 看一下All函数是否能通过清除Score的筛选器,也间接的清除来自Course的筛选器
All.course.Score = CALCULATE(sum(Score[Score]), all(Score))

显然,此时All函数不再能够通过清除Score的筛选器,来清除来自Course的筛选器,这个时候就可以采用AllCrossfiltered函数了

根据上图结果,Allcrossfiltered函数在多对多的关系中,能够清除来自其他表的筛选器,例如示例中,在成绩表与科目表变为多对多的关系后,All函数不能够通过清除Score的筛选器来清除来自course表的筛选器,但是Allcrossfiltered 可以。
在最后整理一下Allcrossfiltered的用法,其语法如下:
Allcorossfiltered(TableName)
它只有一个参数,表名
它只能用作calculate的调节器
它不能返回表
在清除筛选器功能上,All函数能做到的,它也能做到,意思是它也能清楚某张表的扩展表上筛选器;
在清除筛选器功能上,它还能做到All函数做不到的,还能够清除来自多对多关系中筛选器
参考资料:
https://dax.guide/allcrossfiltered/
https://docs.microsoft.com/en-us/dax/allcrossfiltered-function-dax




