函数周期表丨筛选丨值丨KEEPFILTERS
KEEPFILTERS函数
如果说,CALCULATE函数和CALCULATETABLE函数是霸道的话,那么KEEPFILTERS函数就是温柔。
CALCULATE函数,本身的作用我们都知道,就是修改上下文形成新的上下文,会覆盖原有列的所有上下文,以CALCULATE函数的结果作为新的上下文。
其本身行为是霸道的,KEEPFILTERS函数就是为了弥补这种霸道而产生的。
用途:将CALCULATE函数本身的覆盖上下文修改为追加上下文。
语法
DAX=
KEEPFILTERS(<表达式>)
参数
表达式:任意表达式。
返回结果
值
例子
模拟数据:
这是白茶随机模拟的数据。
CALCULATE例子 =
CALCULATE ( SUM ( '例子'[数据] ), '例子'[类别] = "白茶" )
结果:
这段CALCULATE的代码,将条件限定为“白茶”,因此白茶这一条件直接覆盖了当前列中的其他筛选条件,只显示这一项。
KEEPFILTERS例子 =
CALCULATE ( SUM ( '例子'[数据] ), KEEPFILTERS ( '例子'[类别] = "白茶" ) )
对比一下结果:
而使用KEEPFILTERS函数的结果,是将“白茶”这一条件,追加到当前筛选中。
CALCULATE是找到“白茶”这个人,在你们团队,那么你们团队就一起处罚;
而KEEPFILTERS是追加筛选是什么意思?就是我找到“白茶”这个人了,和其他人无关,只对“白茶”进行处罚。
虽然白茶说的话可能粗糙一点,但是意思差不多。
可能还是不太好理解,我们再添加两组代码进行对比:
代码1:
聚合 =
SUM ( '例子'[数据] )
代码2:
CALCULATE例子 =
CALCULATE ( SUM ( '例子'[数据] ), '例子'[类别] = "白茶" )
代码3:
CALCULATE例子2 =
CALCULATE ( SUM ( '例子'[数据] ), '例子'[类别] = "白茶", VALUES ( '例子'[类别] ) )
代码4:
KEEPFILTERS例子 =
CALCULATE ( SUM ( '例子'[数据] ), KEEPFILTERS ( '例子'[类别] = "白茶" ) )
结果:
分别进行解释:
SUM本身受到上下文的影响,因此会自动呈现每个筛选条件的数值;
CALCULATE例子只有一个筛选条件为“白茶”,这个条件覆盖了当前的筛选,导致每行的条件都是“白茶”;
KEEPFILTERS例子将“白茶”这一条件,追加到当前筛选中,二者取交集,因此只有“白茶”呈现;
CALCULATE例子2先是受到内部优先级影响,运行VALUES函数,其次“白茶”这一条件围绕着VALUES函数进行,二者取交集,呈现“白茶”结果。
因此,虽然KEEPFILTER例子结果与CALCULATE例子2结果是一样的,但是运行逻辑不同。
前者是内部条件与外部筛选取交集;
后者是内部条件取交集,不涉及外部。
白茶是用CALCULATE函数进行举例的,对于CALCULATETABLE函数效果也差不多,这里就不赘述了。
小伙伴们❤GET了么?
白茶会不定期的分享一些函数卡片
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。
数据分析进阶之路,带你深入了解可视化技巧。