ALLEXCEPT函数
ALLEXCEPT函数属于“筛选”类函数,隶属于“表函数”,在ALL函数系列家族中,其地位是不可或缺的。
EXCEPT翻译成中文是什么意思?表示:除了的意思。因此,这个函数所表达的意思顾名思义,“除了…剩下的都…”。联想起ALL函数的特性,这个函数表示除了某一项受到筛选之外,其他的项目全部清除筛选。
用途:特别适用于组内占比的计算。
语法
DAX=
ALLEXCEPT(<表>,<列>[,<列>[,…]])
参数
表:要清除筛选器的表。
列:(可重复)位于第一参数表中,需要保留筛选的列。除了这一列之外,其他列全部不受筛选影响。
注意:不能使用表的表达式和列的表达式。
返回结果
除了保留筛选器的那一列,清除了其他筛选条件的一个表。
例子
模拟数据:
这是白茶随机模拟的一份数据。
例子1:
ALLEXCEPT例子1 =
ALLEXCEPT ( '例子', '例子'[类别] )
结果:
因为当前上下文环境为行上下文,默认筛选条件为空,结果返回为剔除了保留筛选的列一个表。
例子2:
ALLEXCEPT例子2 =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLEXCEPT ( '例子', '例子'[类别] ) )
结果:
除了[颜色]这一列保留筛选之外,清除其他筛选条件,因为当前上下文每组颜色都有多个选项,所以可以利用其特性求组内占比。
这也是ALLEXCEPT函数的主要用途。
例子3:
ALLEXCEPT例子3 =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLEXCEPT ( '例子', '例子'[销售] ) )
结果:
当前保留筛选的条件项目发生变化,除了[销售]数据这一列之外的筛选上下文都清除了,所以返回结果为每个数据除以总数据的结果。
那么,ALLEXCEPT函数与ALL函数、ALLSELECTED函数的结果有什么区别么?
对比代码1:
对比ALL =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALL ( '例子' ) )
对比代码2:
对比ALLSELECTED =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLSELECTED ( '例子' ) )
结果如下:
当日期受到筛选时,ALLEXCEPT的两个例子和ALL函数例子并未受到影响,对于ALLEXCEPT函数来说,没有触发被筛选的条件;而ALL是屏蔽掉了当前的所有筛选。只有ALLSELECTED函数结果受到影响。
当颜色受到筛选时,ALL函数依然不受影响,原理同上;ALLSELECTED函数受筛选影响变化。
表面上看,ALLEXCEPT函数的两个例子结果都没啥变化,但是仔细看总计栏会发现,例子2实际上受到了颜色变化的影响,因为其触发了筛选条件列;而例子3总计发生变化,说明其未受到筛选影响,没有触发筛选条件列。
小伙伴们❤GET了么?