[已解决] [PowerBI]ALLEXCEPT在扩展表中表现错误

  [复制链接]
newman | 2020-9-16 06:35:50 | 显示全部楼层
不知道你是基于研究还是其他目的,实际上不需要这么复杂
  1. test =

  2. ADDCOLUMNS (

  3.   VALUES ( Data[Name] ),

  4.   "MonthNum", CALCULATE (

  5.   DISTINCTCOUNT ( 'Date'[YearMonth] ),

  6.   CALCULATETABLE ( Data )

  7.   )

  8. )

复制代码


ALL这类函数在作为表和作为calculate筛选器时行为是不一样的,这是一个需要注意的点,你写的比较多,是个比较奇怪的思路 我不是很理解
回复

使用道具 举报

procar | 2020-9-16 06:40:51 | 显示全部楼层
PowerBI极客 发表于 2019-5-22 11:55
不知道你是基于研究还是其他目的,实际上不需要这么复杂
ALL这类函数在作为表和作为calculate筛选器时行为 ...


谢谢回复,正确的写法我理解,all函数的两种行为我也理解,对于all我理解得通,我只是想知道一楼带有allexcept的写法错在哪里,这个函数它具体的行为是怎么样的,是先以整个data表接受筛选,然后排除指定列,还是反过来,还是什么别的过程?它最终返回的是不是完整的data扩展表?还是去除指定列以后的不完整表?类似这些具体的描述,我找不到参考资料。
回复

使用道具 举报

edchen | 2020-9-16 06:46:51 | 显示全部楼层
谢谢回复,正确的写法我理解,all函数的两种行为我也理解,对于all我理解得通,我只是想知道一楼带有alle ...


如果确实理解了all函数的这两种行为,是不会使用CALCULATETABLE ( ALLEXCEPT ( Data, Data[Name] ) )这种写法的,因为这里的CALCULATETABLE不起作用
回复

使用道具 举报

ahwx | 2020-9-16 06:49:51 | 显示全部楼层
如果确实理解了all函数的这两种行为,是不会使用CALCULATETABLE ( ALLEXCEPT ( Data, Data[Name] ) )这种 ...


我好像突然明白了点什么……可是还是不对呀,SQLBI上不是有类似描述吗,在All函数的外部套一个Calculatetable或者filter,可以强制返回表:SQLBI-洞悉ALL系列函数原理
9884012122522.png



  1. =Calculate(...,Calculatetable(Allexcept(Data,Data[Name])))
复制代码
为例,Allexcept作用是清除Data扩展表中除Name列之外其他所有列的筛选,然后它给Calculatetable什么结果?Calculatetable又给外层Calculate什么结果?如果说Calculatetable不起作用的话,那不就和上面举的All函数例子不一致了吗?

我比较愚钝,翻来覆去就是想不明白,恳请指点!
回复

使用道具 举报

cheng9525 | 2020-9-16 06:56:51 | 显示全部楼层
我好像突然明白了点什么……可是还是不对呀,SQLBI上不是有类似描述吗,在All函数的外部套一个Calculatet ...


扩展表生效的前提是表要完整,一旦排除自身的列之后就失效了。加上calculatetable之后allexcept就变成返回表的表达式了
回复

使用道具 举报

really | 2020-9-16 06:59:51 | 显示全部楼层
扩展表生效的前提是表要完整,一旦排除自身的列之后就失效了。


哦,就是说问题出在这里~~这个完不完整的概念还是第一次听到,那Allexcept返回的是什么呢?按道理它永远是不完整的,那是不是说它永远只能做一个removefilter,即使外层套了Calculatetable和Filter之类的也无法返回表,依然是一个removefilter(就是之前提到的Calculatetable失效)?还有类似要求扩展表完整性的函数或者场景吗?
回复

使用道具 举报

qyzr | 2020-9-16 07:07:52 | 显示全部楼层
哦,就是说问题出在这里~~这个完不完整的概念还是第一次听到,那Allexcept返回的是什么呢?按道理它永远 ...


allexcept(fact_table,dim_tableN) 这个仍然是完整的
回复

使用道具 举报

东莞小子 | 2020-9-16 07:08:52 | 显示全部楼层
allexcept(fact_table,dim_tableN) 这个仍然是完整的


抱歉dim_tableN是什么意思,指以整个表作为排除参数吗?
这样的话我明天测试一下,有问题再来请教。
谢谢各位大佬耐心的解答。
回复

使用道具 举报

biaofbi | 2020-9-16 07:17:52 | 显示全部楼层
楼主研究问题的态度令人敬佩
以下是我对你案例的理解,仅供参考。

9884012122523.jpg

个人对DAX的学习体会是上下文绝不是虚无缥缈的事物,最好的方法是按DAX Guide第10章介绍的思路,将上下文通过可视化的二维表来理解,上下文之间的运算只有Overwrite和Intersect两种,上下文在表间传递具有方向性,ALL和ALLEXCEPT作为筛选上下文时需要考虑扩展表原理。
单纯的语言很难清晰描述DAX计算过程。

回复

使用道具 举报

bjgame | 2020-9-16 07:20:52 | 显示全部楼层
楼主研究问题的态度令人敬佩
以下是我对你案例的理解,仅供参考。


更正一下第3步表述,上下文A并不会参与Intersect运算,因为上下文A不会影响维度表的计算。
回复

使用道具 举报

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

本版积分规则