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

理解 INTERSECT

INTERSECT 返回一个表,其中只包含作为参数的两个表表达式中都存在的行。两个表必须具有相同的列数和数据类型,并且这些列在各自的表中按位置组合。第一参数定义了结果中列的名称,后续参数可以修改返回的行数,但不影响列名。

INTERSECT

INTERSECT ( <LeftTable>, <RightTable> )

INTERSECT 进行交集运算,返回那些出现在右侧表中的左侧表的行。

参数 属性 描述
LeftTable 交集运算使用的左表表达式.
RightTable 交集运算使用的右表表达式

INTERSECT 图示

注意

  1. INTERSECT 的参数不可交换。通常,INTERSECT(T1, T2)的结果与 INTERSECT(T2, T1)的结果有不同的含义。
  2. 保留重复的行。如果有一行同时出现在 INTERSECT 的两个参数中,那么它和它在 Left Table 中的所有相同行都会返回。
  3. 返回的表的列名与 Left Table 中的列名匹配。具有 Left Table 的数据沿袭,与第二个表中的列的沿袭无关。例如,如果左表的第一列有沿袭到模型的列 C1,INTERSECT 将移除那些只在 Right Table 上存在的记录,并保持基列 C1 的沿袭不变。
  4. 列根据所处位置进行比较,数据比较不进行强制类型转换。
  5. 返回的表不包括与 LeftTable 相关的表的列,也就是不支持扩展表理论

示例用法

结果保留两个参数中第一个表的沿袭。例如,以下查询保留了数据模型中物理列的沿袭,即使作为第二参数的表不具有相同沿袭

EVALUATE
INTERSECT (
    VALUES ( Product[Color] ),
    UNION (
        ROW ( "Color", "Red" ),
        ROW ( "Color", "Blue" )
    )
)

如果将两个参数反转,结果是相同的,但你不能将其用作筛选器参数,因为它没有继承物理列的沿袭

了解如何在筛选上下文中使用 INTERSECT 非常重要,因为这是它最常用的应用场景。在以下示例中,你将看到如何获得在 2008 年和 2009 年都购买过手机类别产品的客户列表:

EVALUATE
CALCULATETABLE (
    VALUES ( Customer[Customer Code] ),
    INTERSECT (
        CALCULATETABLE (
            SUMMARIZE (
                Sales,
                Customer[CustomerKey],
                Product[ProductKey]
            ),
            'Date'[Calendar Year Number] = 2008,
            'Product Category'[Category] = "Cell phones"
        ),
        CALCULATETABLE (
            SUMMARIZE (
                Sales,
                Customer[CustomerKey],
                Product[ProductKey]
            ),
            'Date'[Calendar Year Number] = 2009,
            'Product Category'[Category] = "Cell phones"
        )
    )
) 

结果包含三位顾客

在新版的 DAX 中,你已经可以使用 TREATAS 函数代替 INTERSECT,以获得更好的性能表现,在 TREATAS虚拟关系章节,你可以找到详细介绍

不适用扩展表

INTERSECT 的结果不适用扩展表理论,即使结果表具备数据沿袭,你也无法将其作为筛选上下文筛选关系一端的表。这是一种特殊情形,与 INTERSECT 类似的还有 UNIONEXCEPT,它们在筛选上下文中仅筛选自身包含的列,不涉及扩展表

6
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
2 评论数
4 被回复的评论
4 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
小本本

老师这里两个红框部分, 换成’Product Category'[Category]可以吗?

类别复购客户 (小).png
成员
GOGOGO

contoso的customercode是纯数字,最后的运行结果带了CSxxxxx是咋回事

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数