小罗啊哈

2020-05-13   阅读量: 1066

Power BI

DAX函数:关于能否将聚合函数直接嵌套进其他函数内部使用的问题

扫码加入数据分析学习群

首先看两个新建度量值的公式:

度量值1=rankx(all('公司信息'[城市]),[1.金额合计])

度量值=rankx(all('公司信息'[城市]),sum('商机记录'[商机金额(M)])

其中[1.金额合计]的公式就是sum('商机记录'[商机金额(M)]的公式

然而,两个度量值在拖入表格后的结果不同

前者是1,2,3,4,5

后者是1,1,1,1,1

这因为在PowerBI的底层运算逻辑中存在“行上下文”和“筛选上下文”的区别,要完全弄懂两者的区别很浪费时间,可以简单理解为行上下文是双层循环,筛选上下文是单层循环,而计算排名如果使用筛选上下文会导致错误。

个人的浅显理解如下(可能很片面,希望读者能够补充):

筛选上下文,因为是单层循环,只会遍历一次城市名列表,所以在算完一个城市的金额以后会直接排序,此时其他城市没有计算结果,所以排名是1,在遍历下一个城市的时候,前面的计算值会刷新,第二个城市有金额,然后直接排序,其他的还是没金额,仍然是第1,以此类推。

行上下文是两层循环,外层第一个城市北京,内层sum全部遍历,返回了所有城市的金额,然后对外层的第一个城市排序,这时候名次正确,然后外层循环到第二个城市,这时候内层sum又全部计算一次,第二个城市又生成排名,然后是外层第三个城市,这时候内层sum再次全部遍历,生成第三个城市正确排名,以此类推。

如果仅仅是数据分析,我们需要做到的是避免犯这种错误,所以“不要把聚合函数直接嵌套进其他函数内部使用,需要先把聚合函数在外部创建度量值,然后将度量值引用进入其他函数内部”或者“使用calculate函数包裹聚合函数放入其他函数内部,因为calculate可以把筛选上下文转成行上下文”

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
24.6498 3 1 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子