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

PowerBI-Dax-KEEPFILTERS

BISeven 2021-05-26
980

KEEPFILTERS, 修改在calculate或者calculatetable函数中筛选调节器的筛选方式

其语法:

KEEPFILTERS(expression), expression一般情况下指的是筛选表达式


根据定义,KEEPFILTERS是修改CALCULATE(CALCULATETABLE)筛选调节器的筛选方式,在这里想讨论两点内容:


  • CALCULATE函数中filter的工作方式:

CALCULATE函数中的筛选调节器覆盖已经存在于当前列(calcuate调节器指定的列)上的所有筛选器,对其他列的筛选器不产生影响--(参考官方文档-remarks第二段)


  • 如何定义修改呢?

用一句简单的话,  calculate 覆盖当前上下文,而keepfilters就是将筛选条件添加到当前上下文中。

在使用keepfilters参数时,calculate中计算公式的上下文是已经存在的上下文(Query context) 与 keepfilters参数中上下文的交集


可以通过具体的例子来感受一下

新建两个度量值计算每门课程的分数

score.filter =
CALCULATE (
SUM ( 'YiLuXiangBei Stu Score'[Score] ),
'YiLuXiangBei Stu Course'[CourseName] = "英语" // 未使用keepfilters
)


score.keepfilters =
CALCULATE (
SUM ( 'YiLuXiangBei Stu Score'[Score] ),
    KEEPFILTERS ( 'YiLuXiangBei Stu Course'[CourseName] = "英语" )// 使用filters
)

结果是度量值score.filter的值全部是60,而score.keepfilters的值只有英语为60,其他全部为空白。


我们就结果分析一下


度量值score.filter使用了calculate函数,其筛选参数(调节器)是覆盖列CourseName中的筛选,在第一行中CourseName的筛选器为语文,那calculate的作用覆盖它,语文被替换成英语,结果就是60,其他同理,所以结果红框部分;


度量值score.keepfilters 使用了keepfilters函数,其作用是改变calculate的filter的工作方式,将CourseName中的筛选器添加到当前的上下文中,在第一行中CourseName的筛选器为语文,那语文与英语的交集为空,所以第一行的结果就为空,其他同理


参考文章:

https://dax.guide/keepfilters/

https://docs.microsoft.com/en-us/dax/keepfilters-function-dax

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

评论