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

Power BI之DAX神功:第3卷第13回 表筛选器与列筛选器的区别与扩展表就没有关系

2021-12-09 11:40 作者:孙兴华zz  | 我要投稿

当表筛选器与列筛选器的区别与扩展表扯上关系后,只能越讲越乱!切记:不要乱了步伐!

这一回很短,但是你一定要明白,这对你今后使用有很大帮助!

以下三个度量值:

从表面上看,列筛选与表筛选没有什么区别?为什么没有区别呢?

因为度量值天生具有筛选功能,它相当于给公式套上了一个Calculate,无论公式最外层是否有Calculate,度量值都相当于给公式再套上了Calculate。上面三个度量值的写成下面的样子是一样的:

但是DAX到处都是陷阱,恰饭的人管这个陷阱叫“原理”。大家还记得我在《DAX神功》第2卷第15回讲过Filter与Calculatetable的区别吗?当时我们讲了Filter的计算顺序,先第1参数表,后第2参数筛选。

个人建议:能用简单的列筛选就不用表筛选。原理亦可救人,亦可害人。例如:发生火灾时,下面有救生气垫接着你,跳下来是生存。平时放着楼梯不走,往下跳,那是病得不轻。

原理课开始:

新建表,对学生表姓名列添加两个列,分别适配列筛选与表筛选

返回结果:

官方解释:表筛选引用的是扩展表,成绩表的扩展表中包含了学生表中的所有列,当然也包含学生表中的姓名列,所以上下文转换的影响被忽略。Calculate的筛选器参数在原始筛选上下文中计算,忽略上下文转换。在Calculate执行上下文转换后,姓名列的筛选器才会生效。

上面的官方解释,太绕了,你能听懂吗?这件事即便避开扩展表也能说得很清楚。

孙兴华解释:你是某公司老板,你招聘我时谈好月薪45k,发完工资后,我用这笔钱买了一个徕卡Q2,钱花完了,我回到公司跟你说,刚才发的钱我花完了,你再发我一次吧。你还发不?

因为ADDCOLUMNS在新建表中是迭代每一行,现在是行上下文

从上图来看,即便我没有说扩展表,不也是这个道理吗?我已经将度量值分配给filter生成后的那张表了,再应用到Addcolumns行上下文时,返回每一行都必然是2+3+4的总值。

那列筛选就更好解释了:

【总分】是一个度量值,我们通过列筛选,并没有分配这个度量值,我们只是将【总分】的范围缩小了,所以在应用到Addcolumns行上下文时他仍然具有筛选功能。

建议:这件事就别提扩展表,越提越乱!

口说无凭我证明给你们看:

返回结果:

当然也可以写成这样:因为刚才我们已经生成了【表筛选】这个度量值

《孙兴华讲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卷第13回 表筛选器与列筛选器的区别与扩展表就没有关系的评论 (共 条)

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