[知识体系] 理解 CROSSFILTER

  [复制链接]
查看292636 | 回复196 | 2021-2-21 19:03:20 | 显示全部楼层 |阅读模式
语法

指定计算 DAX 表达式时使用的交叉筛选方向
  1. CROSSFILTER(<columnName1>, <columnName2>, <direction>)
复制代码

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


<direction>有三种设置


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

注意

  • 在一对一关系的情况下,设定 ONEWAY 和 BOTH 的效果相同。
  • CROSSFILTER 只能在接受筛选器作为参数的函数中使用,例如:

      CALCULATE 和 CALCULATETABLE
    • CLOSINGBALANCEMONTH, CLOSINGBALANCEQUARTER, CLOSINGBALANCEYEAR, OPENINGBALANCEMONTH, OPENINGBALANCEQUARTER, OPENINGBALANCEYEAR
    • TOTALMTD,TOTALQTD 和 TOTALYTD


  • CROSSFILTER 使用模型中的现有关系,通过使用关系两端的列标识关系。
  • 在 CROSSFILTER 中,模型关系的交叉筛选设置并不重要;也就是说,在模型中将关系设置为单向或双向筛选不会影响函数的使用,CROSSFILTER 将覆盖任何现有的交叉筛选设置。
  • 如果命名为参数的任何列不是关系的一部分,或者参数属于不同的关系,会返回错误。
  • 对于嵌套的 CALCULATE 表达式,并且包含多个 CROSSFILTER 函数的时候,最内层的 CROSSFILTER 将覆盖外层设置。

示例用法

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



7116211936391.png



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


7116211936392.png

默认的计数无法统计准确数量
  1. CROSSFILTER =
  2. CALCULATE (
  3.     DISTINCTCOUNT ( 'Product Subcategory'[Subcategory] ),
  4.     CROSSFILTER ( 'Product'[ProductSubcategoryKey], 'Product Subcategory'[ProductSubcategoryKey], BOTH )
  5. )
复制代码

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

使用道具 举报

沙包 | 2021-4-24 15:58:25 | 显示全部楼层
珍爱生命,果断回帖。
回复

使用道具 举报

seednet888 | 2021-4-28 22:42:28 | 显示全部楼层
元芳你怎么看?
回复

使用道具 举报

七夜魔君 | 2021-5-17 14:46:13 | 显示全部楼层
谢谢,一直在学习云发教育课程!
回复

使用道具 举报

qxkmay | 2021-5-25 13:55:09 来自手机 | 显示全部楼层
沙发???
回复

使用道具 举报

溜溜女侠 | 2021-6-2 12:32:58 来自手机 | 显示全部楼层
我只是路过,不发表意见
回复

使用道具 举报

肥鹏 | 2021-6-2 15:49:07 | 显示全部楼层
LZ敢整点更有创意的不?兄弟们等着围观捏~
回复

使用道具 举报

爱车族长 | 2021-6-4 10:40:27 来自手机 | 显示全部楼层
顶顶更健康
回复

使用道具 举报

闲云 | 2021-6-4 15:29:29 来自手机 | 显示全部楼层
珍爱生命,果断回帖。
回复

使用道具 举报

dgzxpx | 2021-6-16 13:52:02 | 显示全部楼层
看帖要回,回帖才健康,在踩踩,楼主辛苦了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则