PowerBI之DAX神功:第2卷第2回 理解度量值中迭代函数的行数
前景回顾:
上节课 《PowerBI之DAX神功:答网友问03.VAR变量与惰性计算》

以第一行为例:
毛利额= Calculate(sumx('Sheet1',21),all(Sheet1))
因为Sheet1这张表有3行,所以21*3=63
sumx需要迭代的行数,取决于第1参数表
我们间接的理解了,迭代函数行数在新建列上面的应用。
新建列是行上下文,是逐行计算(迭代)。
度量值是筛选上下文
这节课我们主要讲一下,度量值中迭代函数的行数
回忆《DAX神功》第1卷第19回 上下文转换你还不知道的秘密
有一张表,表名叫'多端'


sum('多端'[销量]) // 对多端这张表,销量这列求和,sum是聚合函数,它只是对这一列的数字进行聚合,结果是60,公式推导如下:
度量值1=sumx('多端',60)
将【度量值1】放到矩阵中:

解释:多端有6行,每行是60,所以总计6*60=360
当矩阵的行标题,使用年和商品时:

你会发现总计显示360
关于这个问题,我在《DAX神功》第1卷第19回 上下文转换你还不知道的秘密 中跟大家介绍过,度量值有着将行上下文转换成筛选上下文的功能,但是只能转最外层的sumx。sumx内层的行上下文它无法转换。
sumx是妈妈,你娶了一个未婚先孕的妈妈,女人可以变成你的妻子,里面套着的sum是孩子与你没有血缘关系。

如果我们不使用所有字段,而是只用年或商品字段时:


孩子不是你的,DNA无法改变,但是户口本上可以随你的姓
度量值1将sumx(妈妈)行上下文转化为你的妻子
Calculate将sum(孩子)行上下文转化为你的孩子

现在女人和孩子都是你的了,想什么筛选就怎么筛选。

正片开始:
还是这张表格:

度量值1 = sumx('多端',sum('多端'[销量]))
等价公式
度量值2 = sumx('多端',sumx('多端','多端'[销量]))
你学习度量值1时,你可能蒙圈了,因为它不直观,而度量值2更易理解迭代函数的行数


如果我们想将度量值2的内部与外部都转换为筛选上下文:
度量值2= sumx('多端', calculate(sumx('多端', '多端'[销量])))

单张表我们理解了,那多张表怎么处理呢?


度量值3 = sumx('一端',sumx('多端','一端'[售价]*'多端'[销量]))
《DAX神功第1卷第18回》我讲过,DAX所有函数计值顺序都是从内向外,包括Calculate和CalculateTable,并且用事实证明了。
第1步:我们先分析内部的sumx计算情况

第2步:我们再分析外部的sumx计算情况

所以我们将这个度量值放到矩阵中:

我们只是用两个表的商品字段举例就可以了:


现在,想对内层的实现筛选功能,在内层的sumx外面套上Calculate
度量值3 = sumx('一端',CALCULATE(sumx('多端','一端'[售价]*'多端'[销量])))

它报错的意思是:在这里你不能省略关系函数,因为原来是行上下文嵌套行上下文,你是否写关系函数都可以,由于外层已经引用了一端表,内层可以直接写: '一端'[售价]
所以以下两个度量值都是正确的
度量值3 = sumx('一端',sumx('多端','一端'[售价]*'多端'[销量]))
度量值3 = sumx('一端',sumx('多端',RELATED('一端'[售价])*'多端'[销量]))
当你对内层嵌套了Calculate,内层是筛选上下文,外层是行上下文,由于上下文不同,所以这里的: '一端'[售价] 要使用关系函数,这一点你忘记了也没关系,系统会提示你
度量值3 = sumx('一端',CALCULATE(sumx('多端',RELATED('一端'[售价])*'多端'[销量])))
还有另一种写法:
度量值4 = sumx('一端',sumx(RELATEDTABLE('多端'),'一端'[售价]*'多端'[销量]))
原理:
RELATED('一端'[售价]) // 多端从一端获取
RELATEDTABLE('多端') // 一端筛选多端表
而度量值4,使用了关系函数实现对内层的筛选。
我们绕了一大圈,现在回到了《The Definitive Guide to 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等等