Power BI之DAX神功:答网友问16 使用ALL函数避免上下文转换与ISEMPTY函数
一、第1位网友提问
你在《DAX神功》第1卷第21回讲的Calculate计值顺序,与权威指南本节背道而驰
权威指南第二版(国译)P312 写着Calculate执行步骤:首先计算筛选器参数,然后如果有行上下文,则执行上下文转换,接下来应用调节器。
还有这节课书中提供的两个度量值都是错的!(友情提示:不要轻易说别人是错的)
二、回答第1位网友问题
我向同事借了中文版第二版,已经确认,拜托你看一下P313页第2段
今天这个问题是豪无意义的讨论,事情非常简单,不建议陷入死循环研究原理。有些事情是具有特殊性的,需要具体问题具体分析的:
罗老师曾经提到过这样的案例:张三持武器打李四,李四无处可逃并且已经受伤了,他能否在保护自己生命安全的情况下还手呢?
负责任的告诉大家:回答还手和不还手都是害李四。你要李四还手李四轻则拘留重则判刑。你不让李四还手,轻则受伤,重则残疾,甚至永远的离开我们。
罗老师也是把事情的严重性和后果都讲清楚,让李四自己决定。
今天你问的ALL函数避免上下文转换这件事,你整了一堆官方语言,只能让你怀疑人生。
《DAX神功》第1卷第8回 我已经讲清楚了书中这节课要表达的意思
你第二个问题,我声明:人家书没错,是你将新建列写成度量值,所以结果错了
三、意思很简单,书上讲的太官方
有如下两张表,一端表连接多端表:


【度量值】总分 = SUMX('成绩表','成绩表'[平时成绩]+'成绩表'[考试成绩])
【新建列】分=[总分]
// 如果在新建列时使用 分=SUMX('成绩表','成绩表'[平时成绩]+'成绩表'[考试成绩]) 那么sumx要套上Calculate将迭代函数行上下文转换成筛选上下文才能实现下图的结果,但是使用度量值时,它相当于天生就套上了Calculate。

【新建列】all列 = CALCULATE([总分],ALL('学生表'))
// 当我们使用all(学生表)时,学生表所有字段都删除筛选(不能筛选),我们是在学生表中新建列,所以每一行显示的都是所有学生的总成绩90

【新建列】allexcept列 = CALCULATE([总分],ALLEXCEPT('学生表','学生表'[班级]))
// ALLEXCEPT('学生表','学生表'[班级]) 除了学生表中的班级列以外删除其它所有表字段的筛选(包含关联表【就是有连线关系的表】),所以一班对应60,二班对应30

这样就可以方便的算出:每人占全校总分的百分比,和占班级总分的百分比。
以上,《DAX神功》第1卷第8回,我们都讲过!这样记,我觉得比官方语言好多了。
四、第2位网友问题
《PowerBI火力全开》第22课信息函数ISEMPTY很鸡肋呀,有什么实际用途吗?
还有权威指南上关于这节课公式中使用了ALLSELECTED()没有写参数,是什么意思
PS:关于ALLSELECTED()没有写参数这个问题我会在《DAX神功》第3卷中做详细讲解,案例你可以先跳过,我会在精讲ALLSELECTED函数时,解读这个案例,ALLSELECTED是最复杂的DAX函数。
五、回答第2位网友问题
这个函数可以代替的方法很多,使用它也只是性能(速度)提升
ISEMPTY(表或表达式生成的表)
作用:检查表或表表达式是否为空
使用 COUNTROWS 统计表的行数也可以检查表是否为空,但这种做法的弊端在于当表不为空时,公式还计算出了它的行数,增加计算时间
以上来自《火力全开》笔记

【度量值】慢 = COUNTROWS ('Sheet1') = 0
// 计算Sheet1这张表有多少行,再判断是不是等于0行,这样效率是最低的
【度量值】中 = ISBLANK ( COUNTROWS ('Sheet1') )
// 计算Sheet1这张表有多少行,再判断是不是为空,效率会比上一个好一点
【度量值】快 = ISEMPTY ( 'Sheet1' )
// 判断Sheet1这张表是否为空,效率最快

上面三个度量值都是真实的表格,表达式如何表示呢?所有的表函数,大部分时间智能日期函数都可以。
【度量值】判断 = ISEMPTY(CALCULATETABLE('Sheet1','Sheet1'[性别]=BLANK()))
// 因为Sheet1表中三个人我都填写了性别,筛选性别空的表就是一张空表,所以ISEMPTY结果返回True

关于权威指南上的本课案例建议你先跳过,权威指南在第14章讲的ALLSELECTED(),可是在第10章就开始超前使用,我的建议是一步一个脚印,等我讲完ALLSELECTED(),会解读这个案例的原理。
《孙兴华讲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等等