函数周期表丨筛选丨值丨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的初学者。

Fabric丨白茶 文章被收录于专栏

数据分析进阶之路,带你深入了解可视化技巧。

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务