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 函数可以只更改关系对此度量值的工作方式。
使用 DAX 时,可以使用 CROSSFILTER 函数更改交叉筛选方向在由关系定义的两个列之间的行为方式。 在这种情况下,DAX 表达式如下所示:
BiDi:= CALCULATE([Distinct Count of ProductKey], CROSSFILTER(FactInternetSales[ProductKey], DimProduct[ProductKey] , Both))
通过在度量表达式中使用 CROSSFILTER 函数,我们得到了预期的结果:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈