[已解决] 关于SUMX等高级聚合函数第二参数问题

  [复制链接]
查看306656 | 回复200 | 2020-12-18 00:44:58 | 显示全部楼层 |阅读模式
有两张表,销售记录及产品分类,需要计算公路自行车的销售量。写了7个度量值:



复制代码
  1. 1、销售金额:=SUM('销售记录'[金额])

  2. 2、第二参数为列字段:=SUMX(FILTER('销售记录','销售记录'[产品名称]="公路自行车"),'销售记录'[金额])

  3. 3、第二参数为度量值:=SUMX(FILTER('销售记录','销售记录'[产品名称]="公路自行车"),[销售金额])

  4. 4、第二参数为聚合函数:=SUMX(FILTER('销售记录','销售记录'[产品名称]="公路自行车"),sum('销售记录'[金额]))

  5. 5、第二参数为列字段(产品分类表):=SUMX(FILTER('产品分类','产品分类'[产品名称]="公路自行车"),'销售记录'[金额])

  6. 6、第二参数为聚合函数(产品分类表):=SUMX(FILTER('产品分类','产品分类'[产品名称]="公路自行车"),sum('销售记录'[金额]))

  7. 7、第二参数为度量值(产品分类表):=SUMX(FILTER('产品分类','产品分类'[产品名称]="公路自行车"),[销售金额])
复制代码




得出的结果如图:

疑问:
1、同样是用聚合函数(4、6),第4个不能得出正确结果,而第6个却可以?但第6个的写法得出的结果不仅只有“公路自行车”
2、第5个写法为什么是错的?而第2个写法却可以?

谢谢!




10709110016131.png
10709110016132.rar (276.98 KB, 下载次数: 0)
回复

使用道具 举报

tianhong | 2020-12-18 00:49:59 | 显示全部楼层
所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换
    第4/6度量值差异(简称M4/M6)
    需要把一参也一同考虑进来:你不妨自己模拟计算过程,分别在“销售记录”和“产品分类”按照"公路自行车"筛选,看看分别有什么结果,不妨简单的说,一参的行数(假设有N行)就是SUMX累计的次数,累计的内容就是“为表中的每一行计算的表达式”(官方文档的表述),通俗的语言,就是:二参对着这N行分别计算的结果。这里我之所以用“对着”,意思指的是:二参计算时,这N行中的每一行到底参不参与计算,要看具体写法。
    对某一列实施的累计SUM(Tb[Col]),在计算过程中,会被解析为SUMX(Tb, Tb[Col]),重点提一下:这里的Tb已经是经过初试筛选上下文筛选后的表。(VertiPaq创始人之一Jeffrey Wang在近10年前的这篇blog里解释了很多细节,我觉得要理解好估值上下文及转换,这篇blog是绕不开的!)铺垫了这么半天,终于要着重关注二参了。
    如果你对上下文转换有了一定的基础,就会看出:M4/M6中的一参所筛选的结果(表),和二参的计算没有半毛钱关系!(或者说,最多最多也就只是决定了需要计算N个二参而已)
    二参sum('销售记录'[金额])的计算被转为SUMX('销售记录', '销售记录'[金额]),此时估值上下文只有透视表中的'销售记录'[产品名称]=“公路自行车”,这是一个“筛选上下文”;一参中每一行(FILTER函数会迭代每一行生成行上下文)因为没有用于上下文转换的CALCULATE/CALCULATETABLE的作用,并不能转化为筛选上下文参与到二参的计算。至此,把有关“将度量值作为二参”的问题一并提及,度量值在被引用是,系统会自动为它加一层CALCULATE外套,有了这身黄马甲,行上下文也好,筛选上下文也罢,统统都得被用来参与计算。


好久没打这么多字了,口干舌燥的。。。
回复

使用道具 举报

Gevey-Sky | 2020-12-18 00:58:59 | 显示全部楼层
所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换第4/6度量值差异( ...


非常感谢。以为自己已经理解上下文了,看来还没摸到门,真的是“古老而神秘”。先认真消化一下您的回复,有疑问再请教。
您提到的Jeffrey Wang的blog链接我怎么打不开呢?能发一个地址吗,我在手机上试着浏览一下。电脑最近不知道怎的,总有很多网址打不开。
再次感谢您的耐心!
回复

使用道具 举报

燃烧寂寞的烟丝 | 2020-12-18 01:01:59 | 显示全部楼层
非常感谢。以为自己已经理解上下文了,看来还没摸到门,真的是“古老而神秘”。先认真消化一下您的回复, ...


你再试试,blog的地址是:http://mdxdax.blogspot.com/2011/03/

以我个人的学习过程来看,像一切知识的学习一样,对DAX的学习也是一个量变到质变的过程。当初我一上来简单了解CALCULATE、FILTER、SUMX等几个函数后,就以为DAX不过是个加强版的EXCEL函数库+列式存储数据库,然后不知天高地厚的去翻ITALIANS的《Definitive Guide to Dax 2nd》,走马观花翻了几章,根本就get不到任何点,索性放弃了;后来在一番不得要领的胡乱摸索后,总算有了一点心得,再回头去看那本书,真是别有洞天,有的章节值得反复揣摩好几遍!目前看书的进度慢了,应该是又有什么瓶颈了,缓一缓再看。。。
回复

使用道具 举报

wpq88 | 2020-12-18 01:05:59 | 显示全部楼层
所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换第4/6度量值差异( ...


基本明白了一些,刚接触DAX,这玩意儿还真难学^^
还有一个问题请教:筛选上下文为什么对M4有效,而对M6不起作用呢?
回复

使用道具 举报

yunfeng | 2020-12-18 01:12:00 | 显示全部楼层
基本明白了一些,刚接触DAX,这玩意儿还真难学^^
还有一个问题请教:筛选上下文为什么对M4有效,而对M6 ...


目前大家对DAX诟病最多的是DEBUG,尤其当一个度量值中嵌套的层数多的时候,完全不像EXCEL那样,能用F9直观查看每一部分的计算结果。

没太明白你所指的“筛选上下文(Filter Context, FC)影响M4但不影响M6”是指的哪一部分计算没有受FC影响?

理论上,度量值中的每一个函数的计算都受“初始FC”(如Slicer的选项、各种viz的行/列等)+“当前FC”(由函数本身所处的FC或创建的FC)影响的。FC就是每个DAX使用者的一生之敌
回复

使用道具 举报

zorooo | 2020-12-18 01:15:00 | 显示全部楼层
目前大家对DAX诟病最多的是DEBUG,尤其当一个度量值中嵌套的层数多的时候,完全不像EXCEL那样,能用F9直 ...


不好意思,我描述有误。我的意思是:M6中的筛选为什么在透视表中无效,除了“公路自行车”,其它项仍然有值。而M7为什么就有效?
回复

使用道具 举报

咖啡豆 | 2020-12-18 01:22:00 | 显示全部楼层
不好意思,我描述有误。我的意思是:M6中的筛选为什么在透视表中无效,除了“公路自行车”,其它项仍然有 ...


把M7加以还原,就成为这样:
  1. 7. 第二参数为度量值(产品分类表) :=

  2. SUMX (

  3.   FILTER ( '产品分类', '产品分类'[产品名称] = "公路自行车" ),

  4.   CALCULATE ( SUMX ( '销售记录', '销售记录'[金额] ) )

  5. )
复制代码


此时,由于CALCULATE的存在,'产品分类'[产品名称] = "公路自行车"这一行上下文(RC,注意区别透视表的行,透视表的行是FC,二者性质完全不同)会被转化为SUMX ( '销售记录', '销售记录'[金额] )的FC参与的计算(记为FC0);分别考察透视表中'销售记录'[产品名称] = "公路自行车"(FC1)'销售记录'[产品名称] = "耳机"(FC2)这两项的计算:
'销售记录'被FC0+FC1的筛选结果就是公路自行车的行;而被FC0 + FC2筛选的结果为空。

再看M6,因为没有CALCULATE的存在,一参的RC并不能被加以转化为FC0参与计算,二参的计算仅仅只是在FC1, FC2的筛选下进行,当然也就有相应的计算结果了。
回复

使用道具 举报

痴心de绝对 | 2020-12-18 01:28:00 | 显示全部楼层
你再试试,blog的地址是:http://mdxdax.blogspot.com/2011/03/

以我个人的学习过程来看,像一切知识 ...


您说得太对了,我完全是按EXCEL的思路去看待的PP,以为它就是一个简单的加强版数据透视表。网上还专门报了一个课程,以为不过如此,把DAX几个函数背下来就行了,还天真的以为上下文是非常简单的事情。最近才知道上下文是DAX的精髓。才发现完全不是我所想象的那样,这DAX和EXCEL函数、SQL、VBA的思路还是很不一样。
回复

使用道具 举报

魔术师 | 2020-12-18 01:30:01 | 显示全部楼层
把M7加以还原,就成为这样:
此时,由于CALCULATE的存在,'产品分类'[产品名称] = "公路自行车"这一行上 ...


还是云里雾里,只有等以后逐渐体会了。谢谢!
另外,Definitive Guide to DAX这本书有中文版卖吗?我看网上好像只有英文版的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则