ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] [我以为我懂了,可我还是不懂] DAX累计求和 筛选器 的逻辑?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-4-7 15:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 flashevil 于 2021-4-8 08:50 编辑

就像DAX圣经上说的,学习DAX的过程就是 认知一次次建立又一次次被推翻的过程。。。



销售金额 = SUM('明细'[销售额])


数据源只有这一张‘明细’ 表.


之前发帖提问过 图上的累计求和度量值 末尾FILTER的筛选器  MIN('明细'[销售额]) <= [销售金额]


认知的第一次被推翻:
    首先明确一点,这里筛选器的逻辑 是 筛选'明细'表中 所有 销售额 大于当前 筛选上下文所对应的销售额 的行.
一开始我被 <= 迷惑了,以为逻辑弄反了. 后来试着把它们反过来写 [销售金额]>=MIN('明细'[销售额]) ,逻辑上讲的通了,我就以为我懂了


认知的第二次被推翻
   当我再次思考 为什么度量值 [销售金额] 表示的是'明细'表里的每一行的销售额,并试着再次把 筛选器改成 明细'[销售额]>=MIN('明细'[销售额]) 时,  结果还是正确的.
我发现自己还是没搞懂
     作为filter的筛选器,  '明细'[销售额]  表示的是筛选表中每一行的销售额,但为什么仅仅是在外面套上了一个聚合函数后,表示的就是 当前筛选上下文的 销售额??

不知道自己说明白了没有... 还是放个附件吧..
帕累托分析-二八法则 累计求和.zip (59.32 KB, 下载次数: 17)
解决了,我之前不知道的 聚合函数在度量值中 有忽略行上下文的特性。看到3楼的图 百度了以下聚合函数的基础概念。我“又懂了”




TA的精华主题

TA的得分主题

发表于 2021-4-7 16:57 | 显示全部楼层
没看懂楼主到底说的哪个聚合函数?
1、MIN('明细'[销售额]) <= [销售金额]与[销售金额]>=MIN('明细'[销售额]),当然是相同的;
2、[销售金额]>=MIN('明细'[销售额])与 明细'[销售额]>=MIN('明细'[销售额]),不等式左边:前者是度量值,后者是计算列,放到值区域也是相同的。
如果说的是MIN,那么这个作用主要用对汇总行的。如果不考虑汇总行结果,那么用SUM或MAX也是一样的。之所以要用MIN,是求所以当前行小于等整表,当然就是汇总数据了,而SUM或MAX是不合适的。
另外,矩阵区域中,是对累计销售额作升序或者对销售额作降序排列才是正确的,如果对货号排列,此公式也是不对的。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-4-7 20:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
min是聚合函数,忽略行上下文,相当于minx('明细','明细'[销售额]), 工作在筛选上下文下。贴一个之前我做的图类比看一下: image.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-4-8 08:38 | 显示全部楼层
李大维 发表于 2021-4-7 20:10
min是聚合函数,忽略行上下文,相当于minx('明细','明细'[销售额]), 工作在筛选上下文下。贴一个之前我做的 ...

有点明白了。我的问题就是不知道你图里  “聚合函数忽略行上下文,在外部筛选上下文上取最大值”  这句话。

简书POWER BI 星球的文章里 关于聚合函数 有这样一句话 “当它(聚合函数)在度量值中被使用时,SUM 仅考虑报表中的切片器、行、列和筛选器条件所筛选的行。”   

就是因为聚合函数不受度量值中行上下文的影响。所以我帖子中的例子 用 min('明细'[销售额]) 来获取当前筛选上下文的值。进而用这个值 筛选filter的表。

TA的精华主题

TA的得分主题

发表于 2023-3-17 09:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
80%的直线是工具自带的吗?没试过帕累托分析,从别的材料上看好像只有两组数据值?你这个是三组数据。

TA的精华主题

TA的得分主题

发表于 2023-3-17 10:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
var的写法中,你如果添加列中用,可以直接用'明细'[销售额],因为他本身有行上下文!
这里写min('明细'[销售额]),估计是在度量值中写var,要获取当前行的数据你如果写'明细'[销售额],是没有行上下文的,通过聚合函数获取了行上下文,但是因为就是当前行,其实数值上应该就是等于'明细'[销售额]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-3 21:30 , Processed in 0.038022 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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