CROSSFILTER
指定要在计算中用于两列之间的关系的交叉筛选方向。
语法
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
参数
术语 | 定义 |
---|---|
columnName1 |
使用标准 DAX 语法和完全限定的现有列的名称,通常表示要使用的关系的多端:如果参数按相反顺序提供,则函数会在使用参数之前交换它们。 此参数不能是表达式。 |
columnName2 |
使用标准 DAX 语法和完全限定的现有列的名称,通常表示要使用的关系的一侧或查找端;如果参数按相反顺序提供,则函数会在使用参数之前交换它们。 此参数不能是表达式。 |
Direction |
要使用的交叉筛选方向。 必须是下列项之一:None - 此关系不会发生交叉筛选。Both - 任一端的筛选器将筛选另一侧。OneWay - 在一侧或关系查找端的筛选器会筛选另一侧。 此选项不能与一对一关系一起使用。 不要对多对多关系使用此选项,因为不清楚哪一方是查找端;请改用OneWay_LeftFiltersRight或OneWay_RightFiltersLeft。OneWay_LeftFiltersRight - columnName1 边的筛选器筛选 columnName2 的一侧。 此选项不能与一对一或多对一关系一起使用。OneWay_RightFiltersLeft - columnName2 边的筛选器筛选 columnName1 的一侧。 此选项不能与一对一或多对一关系一起使用。 |
返回值
该函数不返回任何值;该函数仅在查询持续时间内设置所指示关系的交叉筛选方向。
言论
对于 1:1 关系,这两个方向之间没有区别。
CROSSFILTER 只能在采用筛选器作为参数的函数中使用,例如:CALCULATE、CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD、TOTALQTD 和 TOTALYTD 函数。
CROSSFILTER 使用模型中的现有关系,通过它们的终点列标识关系。
在 CROSSFILTER中,关系的交叉筛选设置并不重要:也就是说,无论是将关系设置为筛选一个,还是两个方向在模型中都不会影响函数的使用。 CROSSFILTER 将替代任何现有的交叉筛选设置。
如果命名为参数的任何列不属于关系或自变量属于不同的关系,则返回错误。
如果 CALCULATE 表达式是嵌套的,并且多个 CALCULATE 表达式包含一个 CROSSFILTER 函数,则最内部的 CROSSFILTER 是冲突或歧义时占上风的表达式。
在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
例
在以下模型关系图中,DimProduct 和 DimDate 都与 FactInternetSales 有一个方向关系。
默认情况下,我们无法按年份获取销售的产品计数:
可通过两种方法按年份获取产品计数:
打开关系的双向交叉筛选。 这将更改筛选器对这两个表之间的所有数据的工作方式。
使用 CROSSFILTER 函数可以更改关系如何只处理此度量值。
使用 DAX时,可以使用 CROSSFILTER 函数来更改交叉筛选方向在关系定义的两个列之间的行为方式。 在这种情况下,DAX 表达式如下所示:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
通过在度量表达式中使用 CROSSFILTER 函数,我们得到预期的结果: