天天动画片 > 八卦谈 > PowerBI之DAX神功:第1卷第17回 KEEPFILTERS函数调节器与Values做筛选器

PowerBI之DAX神功:第1卷第17回 KEEPFILTERS函数调节器与Values做筛选器

八卦谈 佚名 2023-06-01 03:15:53

一、 KEEPFILTERS函数调节器

继续解决我们上节课的遗留问题:

本期销量1 = CALCULATE([总销量],'销售表'[日期]="本期")

本期销量2 = CALCULATE([总销量],filter(all('销售表'[日期]),'销售表'[日期]="本期"))

本期销量4 = CALCULATE([总销量],FILTER('销售表','销售表'[日期]="本期"))


本期销量1 = CALCULATE([总销量],'销售表'[日期]="本期")

官方解释:Calculate的筛选器是布尔类型时,它是取消了这个类别的筛选器。

很多权威书籍和一些恰饭的讲师,他们都用相同的图在演示,它左边画个龙右边画一道彩虹,然后写上文字告诉你删除了类别筛选器。其实最好理解的方法是写出等效公式,秒懂。等效公式如下:

本期销量2 = CALCULATE([总销量],filter(all('销售表'[日期]),'销售表'[日期]="本期"))

all('销售表'[日期]) :代表销售表中的日期列取消筛选。

再看本期销量4,里面没有ALL,所以没有取消任何筛选,但是也没有同期的值,因为内部筛选已经过滤掉了同期的值

本期销量4 = CALCULATE([总销量],FILTER('销售表','销售表'[日期]="本期"))

那么本期销量4的等效公式又是什么?

本期销量5 = CALCULATE([总销量],KEEPFILTERS('销售表'[日期]="本期"))

《火力全开》笔记28课(2)KEEPFILTERS【追加筛选】

与其说它是追加筛选,我认为说他是恢复筛选更加贴切。

当Calculate筛选器为布尔类型时,它相当于是取消了这一列的筛选,KEEPFILTERS做为调节器与all调节器功能正好相反,all是取消,KEEPFILTERS是恢复。

拓展知识:单列多条件怎么处理?答:原来怎么处理,就怎么处理

度量值 = CALCULATE([总销量],KEEPFILTERS('销售表'[日期] in ("本期","环比")))

二、Values做筛选器

表名:Sheet1

占比1= 

    VAR x = sum(Sheet1[销量])

    VAR y = CALCULATE(sum(Sheet1[销量]),ALL(Sheet1))

return

    DIVIDE(x,y)

大家都很清楚,一旦我使用了all(表),所有字段的内部与外部筛选器全部失效了。如果我想让日期可以筛选怎么办?使用Values或DISTINCT,继续向后写条件

占比2 = 

    VAR x = sum(Sheet1[销量])

    VAR y = CALCULATE(sum(Sheet1[销量]),ALL(Sheet1),VALUES(Sheet1[日期]))

return

    DIVIDE(x,y)


这个公式我们还可以怎么写?是不是,只有日期可以筛选其它都不能筛选呀?使用ALLEXCEPT就可以了?

占比3 = 

    VAR x = sum(Sheet1[销量])

    VAR y = CALCULATE(SUM(Sheet1[销量]),Allexcept('Sheet1',Sheet1[日期]))

return

    DIVIDE(x,y)

《The Definitive Guide to DAX》中这节课讲的功能:占比2与占比3效果上等价

它的语言是:当ALL(表)时,后面是Values(列),是将整张表的筛选上下文替换为一个单列上的筛选器。


拓展知识:上节课的案例

本期销量1 = CALCULATE([总销量],'销售表'[日期]="本期")

大家都知道,日期这一列取消了筛选功能,如果想实现筛选

本期销量5 = CALCULATE([总销量],KEEPFILTERS('销售表'[日期]="本期"))

那还可以怎么做呢?

本期销量6 = CALCULATE([总销量],'销售表'[日期]="本期",VALUES('销售表'[日期]))

现在,你看到了吧?方法不止一种,没有什么就是高大尚的说法,我自己也没有将所有方法都记到脑子里,而是相同的方法我选择了一个来讲,但是,恰饭的人就会说,我没讲什么内容。从头到尾一点不精简的讲,你真吸收的了吗?所以《DAX神功》是针对高手进阶来用的,你记不住不怪我。你心里只要明白一点,再听到有人说,什么什么某某人没讲时,你就要想想,是不是人家讲了等价可替代的东西。比如,某老师讲ExcelVBA并没有讲fso对象,但是讲了DIR函数,在遍历一个文件夹下所有文件时,功能是等价的。

总结:Values其实你根本就不用记

例如当calculate使用的筛选器是一个布尔类型时,它的日期列取消筛选,你如果想恢复就用keepfilters代替,不用使用Values

本期销量1 = CALCULATE([总销量],'销售表'[日期]="本期")

本期销量5 = CALCULATE([总销量],KEEPFILTERS('销售表'[日期]="本期"))

本期销量6 = CALCULATE([总销量],'销售表'[日期]="本期",VALUES('销售表'[日期]))


例如当Calculate的筛选器是all(表)时所有字段全部取消了筛选,这时如果你想让日期列恢复筛选,就使用Allexcept(列),不用使用Values

度量值1=CALCULATE([总销量],ALL(Sheet1))

度量值2=CALCULATE([总销量],Allexcept('Sheet1',Sheet1[日期]))

度量值3=CALCULATE([总销量],ALL(Sheet1),VALUES(Sheet1[日期]))


但是大家需要注意,Allexcept与ALL+Values还是有区别的,我会在《DAX神功》第2卷末做出讲解。但是在这里它们是一样的。


《DAX神功》文字版合集,同步更新中:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集,同步更新中:

https://www.bilibili.com/video/BV1YE411E7p3

更多教程合集:

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110



本文标题:PowerBI之DAX神功:第1卷第17回 KEEPFILTERS函数调节器与Values做筛选器 - 八卦谈
本文地址:www.ttdhp.com/article/32237.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们