[知识体系] 理解 INTERSECT

  [复制链接]
查看227981 | 回复173 | 2021-2-21 18:50:56 | 显示全部楼层 |阅读模式
INTERSECT 返回一个表,其中只包含作为参数的两个表表达式中都存在的行。两个表必须具有相同的列数和数据类型,并且这些列在各自的表中按位置组合。第一参数定义了结果中列的名称,后续参数可以修改返回的行数,但不影响列名。

INTERSECT
  1. INTERSECT ( <LeftTable>, <RightTable> )
复制代码

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

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


7062211947311.png

INTERSECT 图示

注意


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

示例用法

结果保留两个参数中第一个表的沿袭。例如,以下查询保留了数据模型中物理列的沿袭,即使作为第二参数的表不具有相同沿袭
  1. EVALUATE
  2. INTERSECT (
  3.     VALUES ( Product[Color] ),
  4.     UNION (
  5.         ROW ( "Color", "Red" ),
  6.         ROW ( "Color", "Blue" )
  7.     )
  8. )
复制代码


7062211947312.jpeg



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



7062211947313.jpeg



了解如何在筛选上下文中使用 INTERSECT 非常重要,因为这是它最常用的应用场景。在以下示例中,你将看到如何获得在 2008 年和 2009 年都购买过手机类别产品的客户列表:
  1. EVALUATE
  2. CALCULATETABLE (
  3.     VALUES ( Customer[Customer Code] ),
  4.     INTERSECT (
  5.         CALCULATETABLE (
  6.             SUMMARIZE (
  7.                 Sales,
  8.                 Customer[CustomerKey],
  9.                 Product[ProductKey]
  10.             ),
  11.             'Date'[Calendar Year Number] = 2008,
  12.             'Product Category'[Category] = "Cell phones"
  13.         ),
  14.         CALCULATETABLE (
  15.             SUMMARIZE (
  16.                 Sales,
  17.                 Customer[CustomerKey],
  18.                 Product[ProductKey]
  19.             ),
  20.             'Date'[Calendar Year Number] = 2009,
  21.             'Product Category'[Category] = "Cell phones"
  22.         )
  23.     )
  24. )
复制代码

7062211947314.jpeg

结果包含三位顾客

[quote]在新版的 DAX 中,你已经可以使用 TREATAS 函数代替 INTERSECT,以获得更好的性能表现,在 TREATAS扩展表理论,即使结果表具备数据沿袭,你也无法将其作为筛选上下文筛选关系一端的表。这是一种特殊情形,与 INTERSECT 类似的还有 UNIONEXCEPT,它们在筛选上下文中仅筛选自身包含的列,不涉及扩展表
回复

举报

Gacia.lopez | 2021-4-24 12:53:54 来自手机 | 显示全部楼层
这么强,支持楼主,佩服
回复

举报

冰雪紫旋 | 2021-5-3 11:45:39 | 显示全部楼层
LZ敢整点更有创意的不?兄弟们等着围观捏~
回复

举报

珠海小西 | 2021-5-5 07:44:29 | 显示全部楼层
谢谢,一直在学习云发教育课程!
回复

举报

du2004 | 2021-6-10 06:51:32 | 显示全部楼层
前排顶,很好!
回复

举报

newman | 2021-8-18 14:56:25 来自手机 | 显示全部楼层
前排顶,很好!
回复

举报

blackside | 2021-10-21 06:44:14 来自手机 | 显示全部楼层
谢谢网站确实不错,超值
回复

举报

冬冬 | 2021-11-2 20:02:30 | 显示全部楼层
我也来支持一下,这里的老师和其他机构不一样,其他就是让付费。
回复

举报

zycw | 2021-11-6 12:56:57 | 显示全部楼层
LZ帖子不给力,勉强给回复下吧
回复

举报

friend3 | 2021-11-8 06:46:33 | 显示全部楼层
为了三千积分!
回复

举报

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

本版积分规则