PowerBI之DAX神功:第1卷第13回 嵌套多个表的行上下文
上节课我们了解到,迭代函数可以创建行上下文,现在就来深入学习创建的方法:


无论你有多少张表,要遵循《DAX神功》第1课讲的表关系,表与表之间都是1对多的关系
配合我们的关系函数:
Related函数:(多端找一端)
Relatedtable函数:(一端找多端)
【新建列】实际得分 = CALCULATE(sumx('成绩表','成绩表'[分数]+RELATED('学生表'[加分])))

【度量值】实际得分 = sumx('成绩表','成绩表'[分数]+RELATED('学生表'[加分]))
无论有多少张表连线,只要是符合一对多关系,我们创建行上下文时,都这样做。

现在回答网友问题:
网友在一端表中,新建列,公式如下:
列 = CALCULATE(sumx('学生表','学生表'[加分]+Relatedtable('成绩表'[分数])))


很明显语法错了:
Related(表[列]):(多端找一端)
Relatedtable(表):(一端找多端)
知道为什么这两个函数参数不一样吗?因为多端可以向一端获取某列的值类似Vlookup,而一端可以筛选多端表。
如果我想在一端表上新建列实现这个功能应该怎么做?
列 = CALCULATE(sum('成绩表'[分数]))+'学生表'[加分]
解读:CALCULATE(sum('成绩表'[分数])) 就是一个度量值,也可以看成是一个行上下文套了Calculate,具备了筛选功能,将他放在一端表中自然可以筛选,再与加分字段生成行上下文。

这件事正确的姿势是什么?
答:写一个度量值,放到矩阵或表
【度量值】最终得分 = sumx('成绩表','成绩表'[分数]+Related('学生表'[加分]))


现在回答网友第2个问题:
sumx第1参数,为什么必须是多端表,为什么不能是一端表?
答:sumx第一参数并没有规定必须使用哪端表,sumx只是一个迭代函数逐行计算。
以这个度量值为例:
最终得分 = sumx('成绩表','成绩表'[分数]+Related('学生表'[加分]))
如果你将sumx第一参数改为1端表,请问,你一端如何找多端的列进行相加呢?
因为:
Related(表[列]):(多端找一端)
Relatedtable([表]):(一端找多端)
除了以上问题你要考虑,你还要考虑1端筛选多端的问题
假设:
【度量值】加分上升 = sumx('学生表','学生表'[加分]*2)

我在自己表里筛选肯定没问题


