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

表姐(做报表的小姐姐)做项目的时候经常遇到这种情况,同一个销售订单数据,不同部门要求以不同的口径统计,比如销售部门期望用下单日期、仓管部用发货日期,合管部用合同激活日期作为统计日期。但是无论是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实际应用场景(二):多日期维度)