函数周期表丨筛选丨表丨ALLEXCEPT_编程语言

ALLEXCEPT函数

ALLEXCEPT函数属于“筛选”类函数,隶属于“表函数”,在ALL函数系列家族中,其地位是不可或缺的。

EXCEPT翻译成中文是什么意思?表示:除了的意思。因此,这个函数所表达的意思顾名思义,“除了…剩下的都…”。联想起ALL函数的特性,这个函数表示除了某一项受到筛选之外,其他的项目全部清除筛选。

用途:特别适用于组内占比的计算。

语法

DAX=
ALLEXCEPT(<表>,<列>[,<列>[,…]])

参数

表:要清除筛选器的表。

列:(可重复)位于第一参数表中,需要保留筛选的列。除了这一列之外,其他列全部不受筛选影响。

注意:不能使用表的表达式和列的表达式。

返回结果

除了保留筛选器的那一列,清除了其他筛选条件的一个表。

例子

模拟数据:

函数周期表丨筛选丨表丨ALLEXCEPT_数据_02

这是白茶随机模拟的一份数据。

例子1:

ALLEXCEPT例子1 =
ALLEXCEPT ( '例子', '例子'[类别] )

结果:

函数周期表丨筛选丨表丨ALLEXCEPT_数据分析_03

因为当前上下文环境为行上下文,默认筛选条件为空,结果返回为剔除了保留筛选的列一个表。

例子2:

ALLEXCEPT例子2 =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLEXCEPT ( '例子', '例子'[类别] ) )

结果:

函数周期表丨筛选丨表丨ALLEXCEPT_大数据_04

除了[颜色]这一列保留筛选之外,清除其他筛选条件,因为当前上下文每组颜色都有多个选项,所以可以利用其特性求组内占比。

这也是ALLEXCEPT函数的主要用途。

例子3:

ALLEXCEPT例子3 =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLEXCEPT ( '例子', '例子'[销售] ) )

结果:

函数周期表丨筛选丨表丨ALLEXCEPT_大数据_05

当前保留筛选的条件项目发生变化,除了[销售]数据这一列之外的筛选上下文都清除了,所以返回结果为每个数据除以总数据的结果。

那么,ALLEXCEPT函数与ALL函数、ALLSELECTED函数的结果有什么区别么?

对比代码1:

对比ALL =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALL ( '例子' ) )

对比代码2:

对比ALLSELECTED =
SUM ( '例子'[销售] ) / CALCULATE ( SUM ( '例子'[销售] ), ALLSELECTED ( '例子' ) )

结果如下:

函数周期表丨筛选丨表丨ALLEXCEPT_数据_06

当日期受到筛选时,ALLEXCEPT的两个例子和ALL函数例子并未受到影响,对于ALLEXCEPT函数来说,没有触发被筛选的条件;而ALL是屏蔽掉了当前的所有筛选。只有ALLSELECTED函数结果受到影响。

当颜色受到筛选时,ALL函数依然不受影响,原理同上;ALLSELECTED函数受筛选影响变化。

表面上看,ALLEXCEPT函数的两个例子结果都没啥变化,但是仔细看总计栏会发现,例子2实际上受到了颜色变化的影响,因为其触发了筛选条件列;而例子3总计发生变化,说明其未受到筛选影响,没有触发筛选条件列。

小伙伴们❤GET了么?


函数周期表丨筛选丨表丨ALLEXCEPT_编程语言_07

函数周期表丨筛选丨表丨ALLEXCEPT_大数据_08