这一章比较绕,但是帮助我们理清切片器的筛选状态以及主要函数对于公式筛选上下文的改变。
1.切片器的筛选状态
切片器的全选与全不选的状态的区别,我们可以看下图:
全不选
全选
多个点击筛选
逐个点击至全部
结论
- 初始状态,没有选择任何元素,也就是某列没有被筛选。
- 直接全不选与直接全选等价,没有选择任何元素,也就是某列没有被筛选。
- 直接全选与直接全不选等价,没有选择任何元素,也就是某列没有被筛选。
- 清除选择回到初始状态,没有选择任何元素,也就是某列没有被筛选。
- 逐个选择直至全选,选择了所有元素,某列被筛选。
明白切片器的筛选状态,主要是避免写DAX先入为主以为全选就是已经筛选了某个字段,由上面结论可知,直接全不选与直接全选等价。
2.DAX函数中的筛选状态
DAX公式中的筛选条件限定状态由ALL、REMOVEFILTERS、VALUES等来确定,对应于上面所述的全选、全不选、逐个筛选状态:
(ISFILTERED 函数作为一个基准)
only_isfilter = ISFILTERED('FACT'[品牌])
isfilter_All = CALCULATE(ISFILTERED('FACT'[品牌]),ALL('FACT'[品牌]))
filter_All = CALCULATE(ISFILTERED('FACT'[品牌]),FILTER(ALL('FACT'[品牌]),TRUE()))
only_removefilter = CALCULATE(ISFILTERED('FACT'[品牌]),REMOVEFILTERS('FACT'[品牌]))
- 无函数,对应于【初始化】,无筛选,ISFILTERED 返回 FALSE。
- ALL,对应于【直接全选】与【直接全不选】等价,无筛选,ISFILTERED 返回 FALSE。
- FILTER( ALL( T[C] ) , TRUE() ),对应于【逐个全选】,有筛选,ISFILTERED 返回 TRUE。
- REMOVEFILTERS,对应于【清除选择】,无筛选,ISFILTERED 返回 FALSE。