ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] [PowerBI疑难]Calculate结果错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-16 17:39 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
计算环境:单表模型Data,只有四列:
01.png

报表视图中添加amount柱形图(以Type作图例),根据Datetime做切片器,点击图例B查看以下度量值效果:

  1. Wrong =
  2. CALCULATE (
  3.     DISTINCTCOUNT ( Data[Name] ),
  4.      Data[Type] = "A"
  5. )
复制代码


我认为的计算流程:
1.外部没有行上下文;
2.外部筛选上下文包括Type="B"和时间段选择,即一共两列存在筛选;
3.Calculate清除Type列筛选,并修改为Type="A";
4.在Type="A"以及选定时间段中,计算不重复Name值个数。

如果是这样,那么无论选择什么图例,都应该显示同样的值(因为Calculate清除了原始的Type列筛选),但实际只有选择A才有值,选择其他通通显示空白。
请问为什么?

这个问题我原来发过,当时我认为是对原理理解不够,现在圣经看到第十章,扩展表也可以理解了,还是不能解释这个问题,真的被难住了。
请看附件:
Test.rar (58.5 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2019-5-16 18:24 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-16 20:58 | 显示全部楼层
本帖最后由 shwangfeng 于 2019-5-16 21:04 编辑
张文洲 发表于 2019-5-16 18:24
你把datetime范围全选,再看你的结果

其实不只是Datetime,在amount上切片也一样会出错,只要有别的筛选存在就会不对
我就是想知道为什么不对呀,结果不应该像全选时间那样是“时间段内Type为A的不重复Name个数"吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-5-16 22:59 | 显示全部楼层
张文洲 发表于 2019-5-16 18:24
你把datetime范围全选,再看你的结果

我找到答案了,原因是对同一个表的arbitrarily shaped filters做了overwrite,《DAX圣经》第十章439页开始的小节有完整解释。
其中引用的例子在前面Keepfilter里也举过,当时只觉得这个例子挺有趣,还去dax.guide上查了相关文章,只是没想到影响这么深远!
过了这么久终于搞清楚了,很开心!

附上简单解释给后来者(权威解释请参照书本):
点击柱子中图例为"B",再使用切片器选择时间段,本来是对两列的单独筛选,但因为发生在同一个表中,一个表本身就代表了其中各列之间有关系(不然也不能组合成一个表),因此最后这两列的有效值会被合并成一个个不可分割的数组作为筛选条件(可以分别给两列的有效值涂绿色,而最终的筛选结果是两列都为绿色的值的"组合",每个组合包含一个Type元素和一个同行的Datetime元素,同一组合的两个元素不可分割),如果到此为止结果没什么问题——“时间段内Type为B的不重复Name个数”。
问题就在于,Calculate在这个筛选基础之上,又添加了Type="A"作为筛选上下文,这个条件是和原本算好的筛选组合冲突的,而Calculate会强制用新人换旧人,新筛选上下文只含Type列,因而Calculate强制拆散了原本的组合,清空Type="B"的设定,改为"A"——注意此时的Datetime筛选条件并没有变,还是之前"选择时间段中同行为B"的那些时间作为有效值!所以如果这些时间当中没有"A"的行,那么结果就是空集!
验证:将之前任意一组标为绿色的组合所在行复制,改其中Type为"A",刷新可见度量值计算结果为1。


我的天,终于弄清楚了!

TA的精华主题

TA的得分主题

发表于 2019-5-17 09:37 | 显示全部楼层
shwangfeng 发表于 2019-5-16 22:59
我找到答案了,原因是对同一个表的arbitrarily shaped filters做了overwrite,《DAX圣经》第十章439页开 ...

DAX逻辑比较复杂,每个人阅读DAX GUIDE都会有不同的理解和表述,但核心原理是相对固定的。
当你选择了特定日期范围,即便在度量值内部设置Type字段条件,依然要受日期范围的限制。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 11:55 , Processed in 0.044969 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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