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

PowerBI之DAX神功:答网友问03.VAR变量与惰性计算

2021-08-30 19:10 作者:孙兴华zz  | 我要投稿

在学习《DAX神功》第2卷第1回时,有小伙伴误操作写错一个新建列,但是发现了一个问题:

毛利额

    VAR x='Sheet1'[销量]*'Sheet1'[售价]

    VAR y='Sheet1'[销量]*'Sheet1'[进价]

return

    CALCULATE(sumx('Sheet1',x-y),all(Sheet1))

为什么会发生这样的事情,这个事情不能直接讲!需要推理!

我们从最熟悉的地方开始操作:

【度量值】总毛利 = sumx('Sheet1','Sheet1'[销量]*'Sheet1'[售价]-'Sheet1'[销量]*'Sheet1'[进价]) 

【新建列】毛利额 = CALCULATE([总毛利],all(Sheet1))

【总毛利】这个度量值,本身具有筛选功能,如果直接放到新建列上,就可以筛选

但是,当我写成all(表)形式以后,sheet1表所有列都不能筛选了,所以我们得到的是 21+24+27=72这个固定值

我们在《DAX神功》第2卷第1回讲的惰性计算,以下为我课上的原文,并且在那节课我们举了案例,想必很多小伙伴忽略了这个问题

名词解释:

惰性计算(Lazy Evaluation),又称懒惰计算、懒汉计算,是一个计算机编程中的一个概念,它的目的是要最小化计算机要做的工作。

VAR就是惰性计算:

<1> 没有被使用过的变量永远不会被计算

<2> 当变量完成了首次计算,则它不会在同一范围内被再次计算。


回到我们的问题上来,由于我们使用了变量,VAR就是惰性计算

毛利额

    VAR x='Sheet1'[销量]*'Sheet1'[售价]

    VAR y='Sheet1'[销量]*'Sheet1'[进价]

return

    CALCULATE(sumx('Sheet1',x-y),all(Sheet1))


变量x和y当我们没有使用它们时,它们不会被计算,就在那摆着,就是玩

在新建列中,我们的  变量=表[列]   时代表当前行(是一个标量值)

但是,当他们参与计算时,只完成首次计算,就是x-y   (这就是惰性计算)


因为你在新建列里面操作,那么它就变成了:

由于每一行里面都有一个迭代函数sumx,它的作用就是每一行求和,且all(sheet1)就限制了这个表所有列都不能筛选。

第一行:

毛利额= Calculate(sumx('Sheet1',21),all(Sheet1))

因为Sheet1这张表有3行,所以21*3=63

第二行:

毛利额= Calculate(sumx('Sheet1',24),all(Sheet1))

因为Sheet1这张表有3行,所以24*3=72

第三行:

毛利额= Calculate(sumx('Sheet1',27),all(Sheet1))

因为Sheet1这张表有3行,所以27*3=81


最终结果:

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

https://www.bilibili.com/read/cv10222110 


PowerBI之DAX神功:答网友问03.VAR变量与惰性计算的评论 (共 条)

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