Power BI之DAX神功:第3卷第15回 理解活动关系慎用表筛选
上节课文末,我们提到了在扩展表中防火防盗防虚线(关系)
我们利用《DAX神功》第1卷第21回的案例


建立下面两个度量值:
返回结果:

以上案例来自《DAX神功》第1卷第21回 当时我们已经将原理进行了证明
我们在《DAX神功》第1卷第21回讲了计算顺序:
Calculate(计算器,筛选器或调节器) // 在本例中先调节器,后计算器,使用USERELATIONSHIP建立了新的关系,屏蔽了旧的关系,在新的关系上使用count('Sheet1'[姓名])进行计算。

很久很久以前,老师让学生们画蛇,有一个名叫“DAX原理”的孩子很快就画完了,他抬头看看四周,看到大家刚画完一半,于是心生优越感,在自己画的蛇添了四只脚。


思考,要激活虚线关系并生成一张表,filter行吗?不行!因为虚线关系USERELATIONSHIP是Calculate的调节器,如果你想返回表,需要用Calculatetable
返回结果:

但是,在Calculate中使用表筛选和新建表可不是一回事,使用表筛选,我们引用的是扩展表。由于日期表与Sheet1是一对多关系。

如果我们将公式写成了:
但是,我问你,你的USERELATIONSHIP是谁的调节器?
是Calculatetable的调节器!当USERELATIONSHIP在Calculatetable中工作结束后,通过Calculatetable生成了一张表。外层的calculate是什么关系?是实线关系!
总结:用虚线生成的扩展表,筛选实线生成的扩展表,再计算人数!
这里你要与 Calculate+Filter/ALL区分:
ALL是Calculate的调节器,但是在Filter中ALL是表函数,当Filter/ALL放到Calculate中ALL才起到Calculate调节器的作用。

返回结果:为什么返回结果是空,你心里明白不行,要说明白

我们分别模拟实线关系激活或虚线关系激活时的Sheet1扩展表:

通过上图你能看出来什么?我用虚线生成的扩展表筛选实线生成的扩展表,它们每一行都不同(表筛选当然要看所有列)。最后筛选出来的结果是空表。所以你外层的Calculate计算出的结果都是BLANK()
是不是这样的,我们来证明一下:
我们对Sheet1增加一行,孙兴华,2021/1/3来上班,看到同事是哈罗雷球白夕尚*,完了芭比q了,于是当天就离职了。

现在,用虚线生成的扩展表去筛选实线生成的扩展表:得到下表

再计算姓名有几个?答案是:1

不过,度量值的名字叫【表筛选离职】就不太好了,建议改成:离职与入职在同一天的人数
今天的知识总结成一句话:调节器好比女朋友,是谁的就是谁的!
张三((李四,李四女朋友),张三女朋友)

《孙兴华讲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等等