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

PowerBI之DAX神功:第1卷第13回 嵌套多个表的行上下文

2021-08-15 08:16 作者:孙兴华zz  | 我要投稿

上节课我们了解到,迭代函数可以创建行上下文,现在就来深入学习创建的方法:

无论你有多少张表,要遵循《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)


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


多端就无法筛选一端了

所以,并不是迭代函数(例如sumx)第一参数用什么表的问题,而是与你的业务逻辑有关,看你需要做什么样的分析。

《DAX神功》视频版同步更新中....

https://www.bilibili.com/video/BV1YE411E7p3


PowerBI之DAX神功:第1卷第13回 嵌套多个表的行上下文的评论 (共 条)

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