欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:第3卷第9回 切片器实现或(or)条件与反向筛选

2021-12-04 13:28 作者:孙兴华zz  | 我要投稿

很多网友反馈,《The Definitive Guide to DAX》与各大平台关于此知识点的文章中的代码在实际测试中遇到了问题。我们都用倚天剑,他们用峨眉剑法,我用太极剑法,兵器相同,武功招式不同。书中写了OR1、OR2、OR3但是都没往矩阵上,你可以按它的方法放到矩阵上看看,测试能否成功。(我没测过,我不清楚,以你实际测试结果为准)

我今天要讲的内容,只需要你知道,切片器的字段来自哪张表:)问题就全解决了

我们直奔主题,讲我的方法:

表名:Sheet1

PS:我用一张表举例,您多张表也没有问题。但是多张表时,你表与表之间要符合1对多关系

切片器默认情况下使用的and关系,例如:筛选一班男生,结果是:一班 and 男生

如果我们想实现OR关系,例如:一班同学 or 所有男生

如果我想筛选  一班 or 男生  怎么处理?

方法一:99.99%情况下都用这种方法,缺点:当切片器内容较多时,速度会下降。

// 你能把切片器搞出100个选项来,你也是人才了。我只是幼儿园毕业,我在汇报时,从20个选项中选择1个都要找几秒,100选1或100选N,我会崩溃的。但是100个切片器选项并不会影响太多速度,要影响速度至少要数千甚至上万个选项。那是婆婆了,万里挑一:)

【度量值】总分 = sum(Sheet1[分数])

【新建表】性别 = VALUES(Sheet1[性别])

【新建表】班级 = VALUES(Sheet1[班级]) 

注意:新建表不要与原始表之间发生关系,新建表就是切片器选项

度量值:

原理:

 'Sheet1'[班级] in VALUES('班级'[班级])  等同于  'Sheet1'[班级] in {"一班","三班"}

而 {"一班","三班"}就相当于我们在切片器上的选择。

即可实现切片器or关系:

其中不必新建两张表,一张表就可以搞定:

【新建表】笛卡儿积表 = CROSSJOIN(ALL(Sheet1[性别]),ALL(Sheet1[班级]))

两张表不建立连线关系:

很多小伙伴有这样一个需求,当只选择性别切片器时,例如选择男,就筛选所有男生,如下图所示:

如果只筛选班级,例如选择一班,就只筛选一班人员,如下图所示:

当我两个切片器都使用时,让切片器之间实现OR关系。

原理:

<1>当笛卡儿积表性别列被筛选,但是笛卡儿积表班级列未被筛选时,返回性别筛选的结果。

<2>当笛卡儿积表班级列被筛选,但是笛卡儿积表性别列未被筛选时,返回班级筛选的结果。

<3>否则,返回度量值or1改

方法二:SUMMARIZE代替CROSSJOIN。

友情提示:速度是虚无缥缈的事情,信则有,不信则无。与其追求优化不如升级电脑,升级电脑也无效时,不如换软件。100万行的Excel用M函数或DAX函数优化的再好都会很慢,用SQL或Pandas等处理就是几秒的事情。

我们打游戏时,你用木棍打丧尸,你走位再好,也不如有重装备打起来爽,你装备再好,也不如开着飞机扔炸弹来得爽。

【新建表】summzrize表 = SUMMARIZE('Sheet1',Sheet1[性别],'Sheet1'[班级])

// SUMMARIZECOLUMNS也可以

两张表之间没有连线关系:

我们这次直接照着OR1升级版的度量值写:

最后一个问题:切片器反向筛选

有很多网友发消息问我,网上看的文章,好多赞,而且各大平台都有,发文章的人也是PowerBI界的泰山北斗,但是自己照着抄就是不对。因为他提供的代码就不对,并不是能力问题,人家肯定会,我是以免费传播知识为目的,而对方是以你关注他某某号为目的。你测试不成功,就会关注他某某号,某某号会定期有广告,这条路线就这样形成了。

《DAX神功》第3卷第8回 Except函数要求两张表具有相同列,且顺序相同,数据类型相同。你观察代码符合这个语法规则不?接下来我讲一下能运行的代码:

【新建表】班级 = VALUES(Sheet1[班级])

两张表之间没有连线关系:

// 如果班级表中的班级列被筛选,我们就返回Sheet1表班级列去重后的全部元素除去在切片器上选择的班级后筛选的【总分】。否则返回【总分】。

现在我筛选一班时,会自动筛选出除了一班以外的班级:

孙兴华讲PowerBI火力全开》PowerBI必学课程

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

《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

Power BI之DAX神功:第3卷第9回 切片器实现或(or)条件与反向筛选的评论 (共 条)

分享到微博请遵守国家法律