从数据到信息
从信息到洞察

CROSSFILTER

语法

指定计算 DAX 表达式时使用的交叉筛选方向

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

函数不返回任何值,仅在计算期间为指定的关系设置交叉筛选方向。<columnName>必须是完全限定的,已存在的物理列名称,不能使用表达式。<columnName1>使用位于多端的列,<columnName2>使用位于一端的列,不过即使颠倒顺序,函数在计值时也会自动调整。

<direction>有三种设置

  • ONEWAY(1):单向筛选
  • BOTH(2):双向筛选
  • NONE:无交叉筛选

功能摘要

  1. 在一对一关系的情况下,设定 ONEWAY 和 BOTH 的效果相同。
  2. CROSSFILTER 只能在接受筛选器作为参数的函数中使用,例如:CALCULATETABLE、CLOSINGBALANCEMONTH、CLOSINGBALANCEQUARTER、CLOSINGBALANCEQUARTER、CLOSINGBALANCEYEAR、OPENINGBALANCEMONTH、OPENINGBALANCEQUARTER、OPENINGBALANCEYEAR、TOTALMTD, TOTALQTD 和 TOTALYTD
  3. CROSSFILTER 使用模型中的现有关系,通过使用关系两端的列标识关系。
  4. 在 CROSSFILTER 中,模型关系的交叉筛选设置并不重要;也就是说,在模型中将关系设置为单向或双向筛选不会影响函数的使用,CROSSFILTER 将覆盖任何现有的交叉筛选设置。
  5. 如果命名为参数的任何列不是关系的一部分,或者参数属于不同的关系,会返回错误。
  6. 对于嵌套的 CALCULATE 表达式,并且包含多个 CROSSFILTER 函数的时候,最内层的 CROSSFILTER 将覆盖外层设置。

实例

Product Subcategory 和 Product 存在一对多的关系,如下所示

如果想按 Product 表的品牌列统计对应的产品子类别的数量,在不激活双向关系的情况下,你需要使用 CROSSFILTER 指定计算发生时 CALCULATE 使用的筛选方向。

默认的计数无法统计准确数量

CROSSFILTER =
CALCULATE (
    DISTINCTCOUNT ( 'Product Subcategory'[Subcategory] ),
    CROSSFILTER ( 'Product'[ProductSubcategoryKey], 'Product Subcategory'[ProductSubcategoryKey], BOTH )
)

如果是出于性能考虑,不建议你在模型中将关系的筛选方向设置为双向,这会拖慢报表的运行速度。在公式中使用CROSSFILTER是最佳选择

 

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒