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_Examp_DiagView

默认情况下,我们无法按年份获取销售的产品计数:

CROSSFILTER_Examp_PivotTable1

可通过两种方法按年份获取产品计数:

  • 打开关系的双向交叉筛选。 这将更改筛选器对这两个表之间的所有数据的工作方式。

  • 使用 CROSSFILTER 函数可以更改关系如何只处理此度量值。

使用 DAX时,可以使用 CROSSFILTER 函数来更改交叉筛选方向在关系定义的两个列之间的行为方式。 在这种情况下,DAX 表达式如下所示:

BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))

通过在度量表达式中使用 CROSSFILTER 函数,我们得到预期的结果:

CROSSFILTER_Examp_PivotTable2