DAX:直接过滤和交叉过滤

DAX:直接过滤和交叉过滤

在筛选上下文中,一列可能是由于应用了过滤器而被直接筛选,也可能是由于关系的传递,其他列被筛选而导致该列被间接筛选。因此,可以把数据模型中的筛选分为直接过滤和交叉过滤。

直接过滤:当过滤器直接作用到表中的一列上时,该列是被直接过滤的。直接过滤是由外部的切片器和查询上下文中的行和列过滤器确定的,不受交叉过滤器的影响

注意:如果外部切片器没有勾选任何选项时,默认显示基础表中所有的唯一值。

交叉过滤:当过滤作用于同一个表的另一列上,或作用于相关表上时,该列是被交叉过滤的,交叉过滤受到到所有筛选上下文的影响。

direct_filtered_colors = COUNTROWS((FILTERS(DimProduct[Color])))cross_filtered_distinct_colors = COUNTROWS((DISTINCT(DimProduct[Color])))cross_filtered_values_colors = COUNTROWS((VALUES(DimProduct[Color])))

结果分析:

direct_filtered_colors:是直接过滤,不受交叉过滤上下文的影响,直接显式基础表中Color的唯一值的数量,

cross_filtered_values_colors 和 cross_filtered_distinct_colors :是交叉过滤,受到交叉过滤上下文的影响,只统计被过滤之后的Color的数量。

直接过滤和交叉过滤可以通过下面两个函数识别

ISCROSSFILTERED(<columnName>) ISFILTERED(<columnName>) 

1,FILTERS函数

FILTERS函数返回被切片器直接筛选的值

FILTERS(<columnName>) 

2,返回筛选上下文中的筛选值

如果需要返回交叉过滤的唯一值,可以使用DISTINCT 和 VALUES函数,这两个函数都受到过滤上下文的作用,唯一的区别是:

当原始表中不存在BLANK时,DISTINCT 只返回原始表中的值,而VALUES可能会返回BLANK,该数据是被添加到查询中用于表示不相关的行。

DISTINCT 和 VALUES函数的定义是:

DISTINCT(<table | column>) VALUES(<Table | Column>) 

3,检查是否只存在一个值

当 columnName 上的直接过滤值的数量为 1 时,返回 TRUE,否则返回 FALSE。

HASONEFILTER(<columnName>)

该函数等价于:

COUNTROWS(FILTERS(<columnName>)) = 1

当 columnName 被筛选上下文过滤到只有一个值时,返回 TRUE。 否则为假。

HASONEVALUE(<columnName>) 

该函数等价于:

COUNTROWS(VALUES(<columnName>)) = 1

4,更为高效的SELECTEDVALUE

当column的上下文被过滤为只有一个唯一值时,返回该唯一值,否则返回alternateResult。

SELECTEDVALUE(<column>[, <alternateResult>])  

该函数等价于:

IF(HASONEVALUE(<column>), VALUES(<column>), <alternateResult>)

参考文档

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部