如何在DAX中创建“虚拟关系”

    image.png
    (图一)


    如图一所示,【DimDate】和【FactInternetSales】表之间有三条关系,其中两天是虚线(必须要有),表示未被激活,也就是非活动的物理关系,所以要想激活,得利用【USERELATIONSHIP】函数

    1. 销售:销售额 合计 = SUM(FactInternetSales[SalesAmount])
    2. 销售:到货额.合计 =
    3. CALCULATE(
    4. [销售:销售额 合计],
    5. //其中有一个必须保证是维度表,也就是有一个字段必须是唯一值
    6. USERELATIONSHIP(DimDate[DateKey],FactInternetSales[DueDateKey])
    7. )
    8. 销售:发货额.合计 =
    9. CALCULATE(
    10. [销售:销售额 合计],
    11. USERELATIONSHIP(DimDate[DateKey],FactInternetSales[ShipDateKey])
    12. )

    image.png


    从图一我们可以看到【DimDate_Calendar】和【FactInternetSales】没有物理关系,但是想要让两者产生关系时就要用到TREATAS

    • 多列情况

      1. //想要用DimDate_Calendar中的数据去统计
      2. 销售:销售额 合计 TreatAS 1 =
      3. CALCULATE(
      4. [销售:销售额 合计],
      5. TREATAS(
      6. //如果要关联的有多列,那么需要用SUMMARIZE函数
      7. SUMMARIZE(DimDate_Calendar,DimDate_Calendar[Year],DimDate_Calendar[Month]),
      8. DimDate[FiscalYear],
      9. DimDate[MonthNumberOfYear]
      10. )
      11. )

      image.png

    • 单列情况

      1. //如果不是唯一值,想要弄成唯一值的时候用去重函数values
      2. 销售:销售额.合计 TreatAS =
      3. CALCULATE(
      4. [销售:销售额 合计],
      5. TREATAS(VALUES(DimProduct[ProductKey]),FactInternetSales[ProductKey])
      6. )

    INTERSECT
    TREATAS
    链接