暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PowerBI-Dax-ALLEXCEPT

BISeven 2021-06-10
1927


当我们需要在度量值中清除某些筛选器时,除了有All函数外,还有ALLEXCEPT函数。

ALL函数是,清除指定列上的筛选器;

ALLEXCEPT函数是保留指定列上的筛选器并清除其他列上的筛选器


其语法如下:

ALLEXCEPT(表名,列名1[,列名2]…)

 

正如ALL函数一样,有时清除筛选器并会返回表,有时仅仅是清除筛选器

注1:该函数与All函数不同的一点是,必须有2个参数。

 

当ALLEXCEPT作为表函数时,返回的是其他列的非重复值,这些列不在指定的列中,并保留空值

假设一张表A有3列,{a, b, c}, 那allexcept(A, a),返回的是{b,c}的组合非重复值,

例如,下面的公式会返回分数表中其他列的非重复值,并保留空值,除“分数”外(这里就用计算表举例了,当然了用于度量值也是可以的)

EVALUATE
VAR t_allexcept =
ALLEXCEPT (
'YiLuXiangBei Stu Score',
'YiLuXiangBei Stu Score'[Score]
)
RETURN
t_allexcept


如果用All函数来写一个等价的公式如下:

EVALUATE
VAR t_all =
ALL (
'YiLuXiangBei Stu Score'[Stu],
'YiLuXiangBei Stu Score'[CourseName]
)
RETURN
t_all


 

注2:

当指定的表中只有一列时,使用ALLEXCEPT函数时,不会返回任何值

当ALLEXCEPT函数仅仅用于清除筛选器时,仅仅保留指定列中的筛选器

下面的DAX公式,通过ALLEXCEPT函数仅仅保留了“成绩表”中的科目的筛选作用,所以成绩表中的Stu对该度量值不再起筛选作用(左图),又因为成绩表的扩展表包括学生表,所以allexcept函数也清除了来自学生表的筛选(右图)

 

score.allexcept =
CALCULATE (
SUM ( 'YiLuXiangBei Stu Score'[Score] ),
ALLEXCEPT (
'YiLuXiangBei Stu Score',
'YiLuXiangBei Stu Score'[CourseName]
)
)


总结一下:

1. 当ALLEXCEPT作为表函数时,返回的是其他列的非重复值,这些列不在指定的列中,并保留空值

2.当ALLEXCEPT函数仅仅用于清除筛选器时,仅仅保留指定列中的筛选器。

3. ALLEXCEPT函数还有一种特殊的用法ALLEXCEPT(表1, 表2)其中表1的扩展表包含表2,有机会再介绍这种用法吧

我是BISeven,欢迎交流


参考资料:

https://docs.microsoft.com/en-us/dax/allexcept-function-dax

https://dax.guide/allexcept/

文章转载自BISeven,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论