美文网首页
敏捷学习|DAX实际应用场景(二):多日期维度

敏捷学习|DAX实际应用场景(二):多日期维度

作者: Julie数据科学家 | 来源:发表于2018-10-09 10:59 被阅读0次

    表姐(做报表的小姐姐)做项目的时候经常遇到这种情况,同一个销售订单数据,不同部门要求以不同的口径统计,比如销售部门期望用下单日期、仓管部用发货日期,合管部用合同激活日期作为统计日期。但是无论是SSAS中的表格模型还是Power BI里的模型,两个表之间只能允许唯一一个活动关系。微软官方描述如下图:

    微软官方的建议是导入多个查找列的表副本,但是问题来了,这样不仅会造成数据的冗余和内存的浪费,而且增加工作量好不好

    我们来看看如何使用DAX解决这个问题。

    有什么数据

    如下图,示例中有一个日期维度表(DimDate)和一个销售订单表(FactInternetSales),其中销售订单表中有三个日期列,分别代表订单日期、截止日期、发货日期。

    需求是什么

    期望只导入一个日期维度表,但是能够从三个不同业务日期字段统计销售金额或数量

    动动小手

    1、创建关系

    分别将销售订单表中的三个日期字段拖拽入日期维度表中与DateKey关联,如下图:

    2、创建度量值

    我们可以看到其中有两条关系线是虚线,不用担心是非活动关系,我们会使用USERELATIONSHIP函数来落实他们的关系、在空表下面创建以下三个度量值:

    (1) SalesAmountByOrderDates=SUM('FactInternetSales'[SalesAmount])

    (2) SalesAmountByDueDates = CALCULATE('Measure'[SalesAmount],

         USERELATIONSHIP(DimDate[DateKey],'FactInternetSales'[DueDateKey]))

    (3) SalesAmountByShipDates = CALCULATE('Measure'[SalesAmount],

    USERELATIONSHIP(DimDate[DateKey],'FactInternetSales'[ShipDateKey]))

    3、可视化

    拖入日期列和三个新建的度量值,我们就得到了不同业务日期口径下的销售金额,如下图:

    总结

    USERELATIONSHIP函数可以帮助我们实现两表的多关系对应,但是一定要注意关系列必须要在模型中建立联系,即使是非活动的关系。否则创建的度量值时会出现以下警告:

    相关文章

      网友评论

          本文标题:敏捷学习|DAX实际应用场景(二):多日期维度

          本文链接:https://www.haomeiwen.com/subject/ioreaftx.html