DAX:ALLEXCEPT 用法

ALLEXCEPT 函数的作用是除了参数中指定的列之外,移除表上其他列的筛选上下文,也就是说,只保留表中指定列上的筛选上下文,而把表中其他列上筛选上下文都移除。

ALLEXCEPT(<table>,<column>[,<column>[,…]])  

ALLEXCEPT的两个用法:

  • 当用作 CALCULATE 或 CALCULATETABLE 的修饰符时,ALLEXCEPT 从第一个参数指定的扩展表中删除过滤器,仅保留以下参数指定的列中的过滤器。
  • 当用作表函数时,ALLEXCEPT 实现第一个参数中指定的表中列的所有唯一组合,这些列未在参数中列出。 在这种情况下,结果只有表的列而忽略扩展表。

注意:当ALLEXCEPT 函数用作CALCULATE或 CALCULATETABLE函数的修饰符时,是从扩展表中删除过滤器,这存在一个潜在的问题:

如果被保留的列是被交叉过滤的,而不是直接过滤的,当其他列上的筛选上下文都被移除时,这会导致该保留列上的筛选上下文也被一并移除,换句话说,相当于ALL(Table),即移除了表上的全部过滤器。

如果要正确使用ALLEXCEPT 函数作为修饰符,请从扩展表的角度来考虑,被直接过滤的列和被交叉过滤的列,都会影响ALLEXCEPT函数的结果。

分析其原因是:ALLEXCEPT 函数在CALCULATED函数中是一个筛选上下文修改器,它不返回任何数据。如果保留列是交叉过滤,并且其他列上都被移除过滤器,那么该列的筛选上下文也会被移除,相当于ALL(Table)。要想保留保留列上的过滤器,可以添加VALUES(<column>)。

因此,如果保留列上是交叉过滤的,请在CALCULATED函数中使用ALL(Table) 和VALUES(Table[Column])组合;如果保留列上是直接过滤,两个方案都可以使用。

 

参考文档:

posted @ 2019-12-16 11:02  悦光阴  阅读(258)  评论(0编辑  收藏  举报