CROSSFILTER函数
CROSSFILTER函数属于“筛选”类函数,其本身不返回值也不返回表。
CROSS是什么意思?交叉! FILTER呢?筛选!
因此,CROSSFILTER函数的意思就是交叉筛选的意思。其用途也是简洁明了,改变计算过程中的筛选方向。
用途:
使用模型关系筛选时,数量过大会导致模型运载变慢,这个时候可以使用CROSSFILTER函数进行优化。
语法
DAX=
CROSSFILTER(<列1>, <列2>, <方向>)
参数
列1:现有固定列的名称,不可以是表达式,代表多端。
列2:现有固定列的名称,不可以是表达式,代表一端。
方向:
有三个选项ONEWAY,BOTH,NONE。
ONEWAY:表示单向筛选;BOTH表示双向筛选;NONE表示无交叉筛选。
注意事项
1、如果模型关系是一对一的情况,使用ONEWAY和BOTH没区别。
2、如果多端列和一端列位置反了,函数本身会自我修正。
3、此函数只能在接受筛选器作为参数的函数中使用:
CALCULATE系列
CLOSINGBALANCE系列
OPENINGBALANCE系列
TOTAL系列
4、CROSSFILTER函数会覆盖任何现有筛选关系。
5、如果两个参数没有任何链接关系,那么返回结果会报错。
6、如果使用多个CROSSFILTER,最内层的会覆盖外面的。
返回结果
本身不返回任何值,只是改变函数内部的筛选方向。
例子
模拟数据:
这是白茶随机模拟的一份数据。
例子:白茶决定统计各个颜色出现的次数,分别放在不同的上下文中进行对比。
代码1:
统计颜色数量 =
COUNTROWS ( '例子' )
代码2:
通过维度表 =
COUNTROWS ( '维度' )
代码3:
CROSSFILTER例子 =
CALCULATE ( COUNTROWS ( '例子' ), CROSSFILTER ( '例子'[类别], '维度'[类别], ONEWAY ) )
结果如下:
通过上图,我们能看出来以下结果:
单纯的利用COUNTROWS统计“例子”表的结果是正确的;
统计“维度表”的数据因为上下文的问题结果是不符合我们要求的;
利用CROSSFILTER函数激发筛选关系的结果是正确的。
注:
可能有的小伙伴说了,我直接计算事实表就行了,为啥要计算维度表呢?
因为一旦数据量过大,迭代事实表的速度会变慢,这样做可以使其优化,提升速度。
小伙伴们❤GET了么?
白茶会不定期的分享一些函数卡片
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。