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