ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1056|回复: 9

[求助] 关于SUMX等高级聚合函数第二参数问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-9-17 10:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 onthetrip 于 2020-9-17 11:54 编辑

有两张表,销售记录及产品分类,需要计算公路自行车的销售量。写了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个写法却可以?

谢谢!




QQ图片20200917101132.png

高级聚合函数第二参数疑问.rar

276.98 KB, 下载次数: 17

TA的精华主题

TA的得分主题

发表于 2020-9-17 17:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换
  • 第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外套,有了这身黄马甲,行上下文也好,筛选上下文也罢,统统都得被用来参与计算。


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



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-9-18 08:06 | 显示全部楼层
ThxAlot 发表于 2020-9-17 17:13
所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换
  • 第4/6度量值差异( ...

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

    TA的精华主题

    TA的得分主题

    发表于 2020-9-18 09:23 | 显示全部楼层
    [广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    onthetrip 发表于 2020-9-18 08:06
    非常感谢。以为自己已经理解上下文了,看来还没摸到门,真的是“古老而神秘”。先认真消化一下您的回复, ...

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

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


    评分

    1

    查看全部评分

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2020-9-18 11:51 | 显示全部楼层
    ThxAlot 发表于 2020-9-17 17:13
    所有问题的核心还是那些古老而又神秘的话题。。。。。估值上下文及上下文转换
  • 第4/6度量值差异( ...

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

    TA的精华主题

    TA的得分主题

    发表于 2020-9-18 16:47 | 显示全部楼层
    [广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    onthetrip 发表于 2020-9-18 11:51
    基本明白了一些,刚接触DAX,这玩意儿还真难学^^
    还有一个问题请教:筛选上下文为什么对M4有效,而对M6 ...

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

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

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

    评分

    1

    查看全部评分

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2020-9-20 09:01 | 显示全部楼层
    ThxAlot 发表于 2020-9-18 16:47
    目前大家对DAX诟病最多的是DEBUG,尤其当一个度量值中嵌套的层数多的时候,完全不像EXCEL那样,能用F9直 ...

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

    TA的精华主题

    TA的得分主题

    发表于 2020-9-20 16:00 | 显示全部楼层
    [广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
    本帖最后由 ThxAlot 于 2020-9-20 17:53 编辑
    onthetrip 发表于 2020-9-20 09:01
    不好意思,我描述有误。我的意思是: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的筛选下进行,当然也就有相应的计算结果了。




    评分

    1

    查看全部评分

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2020-9-23 19:40 | 显示全部楼层
    ThxAlot 发表于 2020-9-18 09:23
    你再试试,blog的地址是:http://mdxdax.blogspot.com/2011/03/

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

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

    TA的精华主题

    TA的得分主题

     楼主| 发表于 2020-9-23 19:48 | 显示全部楼层
    本帖最后由 onthetrip 于 2020-9-23 20:09 编辑
    ThxAlot 发表于 2020-9-20 16:00
    把M7加以还原,就成为这样:
    此时,由于CALCULATE的存在,'产品分类'[产品名称] = "公路自行车"这一行上 ...

    还是云里雾里,只有等以后逐渐体会了。谢谢!
    另外,Definitive Guide to DAX这本书有中文版卖吗?我看网上好像只有英文版的。
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    手机版|关于我们|联系我们|ExcelHome

    GMT+8, 2024-11-15 15:08 , Processed in 0.039783 second(s), 10 queries , Gzip On, MemCache On.

    Powered by Discuz! X3.4

    © 1999-2023 Wooffice Inc.

    沪公网安备 31011702000001号 沪ICP备11019229号-2

    本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

    快速回复 返回顶部 返回列表