11.4 TREATAS


# TREATAS 2019-11-13分类:查找匹配函数阅读(58)评论(0)TREATAS 函数是无关系情况下执行查找匹配的最佳选择,它通过映射数据沿袭的方式使无关系筛选成为可能,了解 TREATAS,你需要先了解关于数据沿袭的知识。

了解数据沿袭(Data Linage)

任何表函数都包含一个或多个列,每个列都具有特定的沿袭。当一个列对应于数据模型的一个物理列时,引擎可以识别这种沿袭关系,从而可以更快地进行筛选操作。沿袭不取决于列的名称,从技术上讲,它是可以唯一标识列的内部标准。你无法通过 DAX 显示列的沿袭,但可以观察这种效果。
例如,观察下面这个由两个颜色值组成的匿名表:

  • { “Red”, “Blue” } 我们知道它们代表颜色,假设你正在模型中分析相关问题,你可以更具体的理解为这是在引用产品的颜色。但对于 DAX 引擎来说,它只表示包含两个字符串的表。所以,下面的的度量值将始终得到总销售额,因为这个匿名表不能筛选模型:
  1. Test :=
  2. CALCULATE ([Sales Amount],{ “Red”, “Blue” }) 在下图中,你可以看到结果与 Sales Amount 相同,因为 Calculate 没有应用任何进一步的筛选 11.4 TREATAS - 图1使用匿名表筛选不会产生任何有效筛选 对于想要筛选模型的值,DAX 需要验证值本身的数据沿袭。一个容易理解的知识是,数据模型中的列值保有该列的数据沿袭与之相对的,如果一个值没有链接到数据模型中的任何列,那么它就是一个匿名值。在前面的示例中 Test 度量值使用一个匿名表来筛选模型,因此,它不能筛选数据模型的任何列。
    下面是应用筛选器的正确方法(这里使用CALCULATE 筛选器参数的完整语法是出于演示目的)。我们只需要一个条件就能筛选 Product[Color]:

  3. Test :=

  4. CALCULATE (
  5. [Sales Amount],
  6. FILTER ( ALL ( ‘Product’[Color] ), ‘Product’[Color] IN { “Red”, “Blue” } )
  7. )

    数据沿袭的工作流

    数据沿袭的工作流程是这样的:ALL 返回一个包含所有产品颜色的表,包含来自原始列的值,因此 DAX 知道每个值的含义。FILTER 扫描包含所有颜色的表,并检查每个颜色是否包含在由红色和蓝色组成的匿名表中。最终,FILTER 返回一个包含 Product[Color]值的表,因此 CALCULATE 知道筛选应用于 Product[Color]列。 一般来说你不必专门考虑数据沿袭,因为 DAX 以一种自然和直观的方式处理这背后的复杂性。例如,当表中的值被分配给变量,那么此变量在后续整个 DAX 计值过程中都将具有该表的数据沿袭信息。
    学习数据沿袭之所以重要,是因为我们经常需要根据不同的场景保持或更改数据沿袭。在某些场景中,保持数据沿袭非常重要,而在另外一些场景中,可能需要更改某些列的沿袭。

    理解 TREATAS

    可以更改列沿袭的函数是 TREATAS。TREATAS 接受表作为它的第一参数,然后接受一组列引用。 TREATAS ( , , [ , [ … ] ] )使用适当的目标列标记每一列,从而更新表的数据沿袭。例如,之前的测试度量可以这样重写:

  8. Test :=

  9. CALCULATE ( [Sales Amount],
  10. TREATAS ( { “Red”, “Blue” }, ‘Product’[Color] )
  11. ) TREATAS 返回一个继承 Product[Color]列沿袭的表,表中标记了第一参数列出的值。 因此,这个新版本的测试度量值只筛选红色和蓝色,如图所示。 11.4 TREATAS - 图2TREATAS 更新了匿名表的沿袭,因此筛选器可以正常工作

    多参数 TREATAS

    你可以将 TREATAS 用于两列或多列的情况,公式写法如下

  12. [Filtered Measure] :=

  13. CALCULATE (
  14. ,
  15. TREATAS (
  16. SUMMARIZE (
  17. ),
  18. ,
  19. )
  20. )

    注意事项

  21. TREATAS 的第一参数必须是表表达式,TREATAS 的结果可以赋值给变量,因为 TREATAS 不是 CALCULATE 调节器。
    2. TREATAS 将第二参数的数据沿袭赋给表达式返回的列,使其可以筛选模型
    3. 如果第一参数中返回的值在列中不存在,将会被忽略。例如:

  22. TREATAS({“Red”、“Green”、“Yellow”},DimProduct[Color])

  23. 公式在 DimProduct[Color]上设置一个筛选器,其中有三个值“Red”、“Green”和“Yellow”。如果 DimProduct[Color]中不存在“黄色”,则有效筛选值为“红色”和“绿色”。
    5. Excel 在 Excel 2016 的 1809 版本之后开始支持 TREATAS 函数,但智能感知可能无法识别,你需要完整的写出函数。

    DAX 虚拟关系筛选方法总结

    了解虚拟关系

    虚拟关系是一种常见的 DAX 模式,虚拟的关系也可以将筛选上下文从一个表传输到另一个表,虚拟关系并不存在,但是可以模拟数据模型中物理(实体)关系的效果。以下几种情况需要用到虚拟关系:
  • 当关系不存在时,
  • 当关系不是一对多而无法创建关系时
  • 当关系由两个或多个列定义时
  • 当存在循环依赖无法创建新关系时 虚线关系有三种函数可以实现虚拟筛选,它们分别是 FILTER_CONTAINS、INTERSECT、TREATAS

    FILTER+CONTAINS:通用公式

  1. [Filtered Measure] :=
  2. CALCULATE (
  3. ,
  4. FILTER (
  5. ALL ( ),
  6. CONTAINS (
  7. VALUES ( ),
  8. ,
  9. )
  10. )
  11. )

    INTERSECT:适用于 Excel 2016,SSAS Tabular 2016 及之后的版本

  12. [Intersect Measure] :=

  13. CALCULATE (
  14. ,
  15. INTERSECT (
  16. ALL ( ),
  17. VALUES ( )
  18. )
  19. )

    TREATAS:适用于 Power BI 和最新的 SSAS Tabular

  20. [Filtered Measure] :=

  21. CALCULATE (
  22. ,
  23. TREATAS (
  24. VALUES ( ),
  25. )
  26. ) 如果你习惯了 INTERSECT 模式,可能会发现 TREATAS 语法很奇怪,因为 TREATAS 必须反转参数:第一参数是要读取的筛选上下文,第二个参数包含起筛选作用的列

    总结

    本文介绍了很多虚拟关系筛选的方式,但物理关系始终是你的首选,因为物理关系下的公式计算效率最高

  27. 首选物理关系

  28. 不能使用物理关系的情况下,使用 TREATAS 创建虚拟关系
  29. 当 TREATAS 不可用时,使用 INTERSECT 创建虚拟关系
  30. 当 TREATAS 和 INTERSECT 都不可用时,使用 FILTER+CONTAINS 创建虚拟关系

[

  1. ](#)[
  2. ](https://www.powerbigeek.com/understanding-treatas-function/#)[
  3. ](https://www.powerbigeek.com/understanding-treatas-function/#)[
  4. ](https://www.powerbigeek.com/understanding-treatas-function/#)[
  5. ](http://app.yinxiang.com/clip.action?url=https://www.powerbigeek.com/understanding-treatas-function/)[
  6. ](https://www.powerbigeek.com/understanding-treatas-function/mailto:?subject=TREATAS&body=https://www.powerbigeek.com/understanding-treatas-function/)[查找匹配函数](https://www.powerbigeek.com/tag/%e6%9f%a5%e6%89%be%e5%8c%b9%e9%85%8d%e5%87%bd%e6%95%b0/)[TREATAS](https://www.powerbigeek.com/tag/treatas/)上一篇<br />[Microsoft Power BI开启现代化分析方式和企业级商业智能](https://www.powerbigeek.com/ignite-2019-powa30/)下一篇<br />[Power BI 2019年11月更新](https://www.powerbigeek.com/powerbi-2019-11-update/)### 相关推荐