CROSSFILTER

指定要用于计算两列之间存在的关系的交叉筛选方向。

语法

CROSSFILTER(<columnName1>, <columnName2>, <direction>)  

parameters

术语 定义
columnName1 现有列的名称,使用标准 DAX 语法,并且是完全限定的,通常表示要使用的关系的多方;如果以相反的顺序给出参数,则函数将先交换参数,然后再使用参数。 此参数不能是表达式。
columnName2 现有列的名称,使用标准 DAX 语法,并且是完全限定的,通常表示要使用的关系的一方或查找方;如果以相反的顺序给出参数,则函数将先交换参数,然后再使用参数。 此参数不能是表达式。
方向 要使用的交叉筛选方向。 必须是下列选项之一:

- 不按此关系进行交叉筛选。

双向 - 任一方的筛选器都会筛选另一方。

单向 - 关系的任一方或查找方会筛选另一方。 此选项不能与一对一关系同时使用。 请勿对多对多关系使用此选项,因为并不明确哪一方是查找方;请改为使用 OneWay_LeftFiltersRight 或 OneWay_RightFiltersLeft。

OneWay_LeftFiltersRight - <columnName1> 一方的筛选器会筛选 <columnName2> 一方。 此选项不能与一对一关系或多对一关系同时使用。

OneWay_RightFiltersLeft - <columnName2> 一方的筛选器会筛选 <columnName1> 一方。 此选项不能与一对一关系或多对一关系同时使用。

返回值

函数不返回任何值;函数仅设置查询过程中所指示关系的交叉筛选方向。

备注

  • 在一对一关系的情况下,设置为单向和双向的效果并无任何区别。

  • 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