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

Power BI之DAX神功:第2卷第20回 ISCROSSFILTERED和ISFILTERED函数

2021-11-17 15:36 作者:孙兴华zz  | 我要投稿

一、ISCROSSFILTERED和ISFILTERED函数的区别

《PowerBI火力全开》笔记14 我们详细讲解了这两个函数并提供了相应案例

今天我们来讲原理并处理《火力全开》本函数案例中你们反馈不连续日期怎么处理的问题

【1】ISFILTERED函数

作用:判断指定表中的列指定表中所有列是否被筛选

【度量值】指定日期列 = ISFILTERED('销售表'[日期])  // 指定销售表中的日期列

【度量值】指定商品表 = ISFILTERED('商品表')  // 指定商品表中的所有列

网友问题1:我们观察下图,为什么红框内是True,我的切片器没有筛选?

因为你的矩阵行标题来自销售表的日期列。

所以,不要认为只有切片器才对ISFILTERED生效,筛选不代表切片器。100年后也许某些互联网公司已经不在了,可是教育还会存在,但是XXX你不能代表教育。

网友问题2:为什么指定日期列的总计是False

因为切片器并没有筛选销售表日期列,总计是不可能被行标题筛选的,如果我们使用切片器(如下图所示)我们相当于只筛选出一个日期,所以总计被筛选了,这时总计才会返回True。

总计既不取决于行筛选也不取决于列筛选,他取决于值的变化。


【2】ISCROSSFILTERED函数

作用:是否具有经过传递的筛选

这又绕回我们早已普及的知识,一端表筛选多端表,多表端不能筛选一端表,强烈反对使用双向箭头。

从小看香港动作片的我,懂一个道理,以古惑仔为例,如果小弟出事了,大哥不一定会被抓起来,也许小弟自作主张做了坏事。当大哥带着小弟去闹事,只要大哥被抓起来了,小弟一个跑不了,因为大哥领导小弟。

大哥是一端表,小弟是多端表。因为大哥只能有一个,小弟可以有一群。

【度量值】指定商品表 = ISCROSSFILTERED('商品表')

【度量值】指定日期列 = ISCROSSFILTERED('销售表'[日期])

// 销售表[日期列]  多端表, 商品表  一端表

如上图所示,当我筛选销售表日期列时,指定日期列返回True,但是指定商品表返回False。因为小弟抢了老奶奶的退休金被阿Sir叫去喝茶了,又不是大哥指使他做的,肯定不会请大哥去喝茶。

但是,当大哥带着小弟去火拼时,他们都会被阿Sir叫去喝茶(如下图)

因为一端筛选多端,你筛选了一端,多端就跟着筛选,这就是经过传递的筛选。

同理,当我们切片器没有筛选时

指定日期列受到行标题筛选所以显示True,因为日期列来自多端表(销售表),所以不影响一端表(商品表)。总计在这时并没有被筛选所以返回False。(如下图所示)

当我在切片器上筛选日期时,仍然是对多端表的筛选,但是总计也会被筛选,可是不影响一端表(商品表),如下图所示。因为我们的箭头是单向传递,请不要使用双向传递给自己添乱。

当我们对一端商品表筛选时,它们都返回True了,这是经过传递的筛选

二、进化《火力全开》中ISCROSSFILTERED的案例

《火力全开》第14课,我们讲了通过切片器筛选一个日期,就显示他前12个月的数据,有些小伙伴告诉我,如果这个日期不连续,也许中间有几个月没有销售数据,但是他仍想让其向前忽略空月显示前12个月数据,怎么破?

以下课件来自《孙兴华讲PowerBI火力全开》课件打包中的:14.xlsx

因为网友对我说,如果日期不连续怎么办?那我们就假设没有2020年一月和三月的数据

所以,我们将14.xlsx这张表删除画红线的两行

表名:表

如果我删除上面两行画红线的,年月序号就要发生变化。这个年月序号本身就不是手动增加的。我的确没有PowerBI火力全开中讲,因为PowerBI中包含了PowerQuery,而我当时已经完成了PowerQuery合集107集的讲解,数据清洗本身就不是DAX的工作,它是PowerQuery的工作。

最简单的方法是将这张表在导入PowerBI时,点击【转换数据】来到PowerQuery

【1】删除【年月序号】列,仅剩下面三列

【2】按【年月】列分组(可视化界面使用分组依据年月分组即可)

分组 = Table.Group( 删除的列,"年月",{"数据",each _})

【3】添加【索引】列,从1开始,将字段名改成【年月序号】


【4】展开【数据】列(不选里面的【年月】),最后点确定

【5】我们做日期表:点左侧的查询,右键~复制,下面空白处粘贴

【6】将表(2)重命名为日期表,删除多余列

【7】主页~关闭并应用:就回到DAX中了

现在,你再按照我们《火力全开》第14课  ISCROSSFILTERED函数和ISFILTERED函数的区别 视频中讲的内容去操作。

当前以上方法可以使用DAX完成!

但是各位要清楚一点,专业的人做专业的事!菜不洗就拿去炒,你让厨师处理菜上面的虫子?难到不应该是你洗菜时搞定吗?学原理的目的是处理复杂的问题,而不是人为制造复杂的问题用原理去处理。

《孙兴华讲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神功:第2卷第20回 ISCROSSFILTERED和ISFILTERED函数的评论 (共 条)

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