
关于Power BI DAX中的ALL函数
"ALLSELECTED Total"却变成了6 (所有Y的值 1+2+3=6)。这是因为,ALLSELECTED()把忽略筛选限制应用到它指定的表格/列,而外部筛选器视为指定之外的范围。”All Total“的结果不变。但是"ALL CAT 1”变了且受Cat 2的筛选限制。因为这个度量值只忽略对Cat 1 的限制。可以看到“ALL Total”忽略了Cat 1的限制,直接把所有Value值加总
ALL函数包括ALL(), ALLEXCEPT()和ALLSELECTED。它们非常实用,可以提供灵活的动态计算。但是DAX的弊病是不够直观,有时候不好理解什么时候和哪里应该用ALL函数。这篇文章用一个简单的例子来介绍一下。
开始之前,先建立一个简单的表格:
和一个简单的度量值:
Simple Total = SUM('Table'[Value])
然后生成一个表格图像:
1. ALL()
现在来建立一个新的度量值:
ALL Total = CALCULATE(SUM('Table'[Value]), ALL())
把它放进去表格图像:
可以看到“ALL Total”忽略了Cat 1的限制,直接把所有Value值加总。
这次我们来建立另一个度量值:
ALL CAT 1 = CALCULATE(SUM('Table'[Value]), ALL('Table'[Cat 1]))
结果跟"ALL Total“一样。我们把Cat 1替换成Cat 2试试:
”All Total“的结果不变。但是"ALL CAT 1”变了且受Cat 2的筛选限制。因为这个度量值只忽略对Cat 1 的限制。
2. ALLEXCEPT()
我们建立一个新的度量值:
ALLEXCEPT CAT 1 Total =
CALCULATE(
SUM('Table'[Value]),
ALLEXCEPT('Table', 'Table'[Cat 1])
)
它忽略了Cat 2的筛选限制,我们把Cat 2替换回Cat 1看看:
可以看到这个度量值受Cat 1限制。因为ALLEXCEPT()解除筛选限制 除了 函数里面指定的列。
3. ALLSELECTED()
同样地,建立一个度量值:
ALLSELECTED Total =
CALCULATE(
SUM('Table'[Value]),
ALLSELECTED('Table')
)
看起来结果跟“ALL Total”一样。这次我们加一个Cat 2的筛选器:
然后筛选“Y”看看:
一如既往地,"ALL Total“保持21。"ALLSELECTED Total"却变成了6 (所有Y的值 1+2+3=6)。这是因为,ALLSELECTED()把忽略筛选限制应用到它指定的表格/列,而外部筛选器视为指定之外的范围。
不妨把ALLSELECTED()只运用一列:
ALLSELECTED Cat 1 Total =
CALCULATE(
SUM('Table'[Value]),
ALLSELECTED('Table'[Cat 1])
)
这个应该更好理解,它只指定忽略Cat 1的限制,所以仍受到Cat 2的筛选影响。
一个简单的例子说明,希望对你有帮助。
谢谢阅读。
更多推荐
所有评论(0)