2014-12-03 74 views
1

我刚开始MDX在SSAS,我必须承认我有点困惑;-)的日期计算成员从FactTable

所以,我想计算是相当简单的。在事实表FactDelivery我们有两个日期关键字段,CreationDateKeyDeliveryDateKey

处理时间是创建条目和实际交付日期之间的天数。

创建新计算成员时,我们在左下窗口中显示度量值和维度的字段。但由于FactDelivery的日期值不是实际的度量值,因此未列出corse的值。我本来期望我可以通过以下方式访问它们。

Case 
    When [FactDelivery].[DeliveryDateKey] < [Fact Delivery].[DateCreatedKey] 
    Then 0 
    Else [FactDelivery].[DeliveryDateKey] - [FactDelivery].[DateCreatedKey] 
End 

这看起来就像您可以在事实表本身定义的命名计算。这是我的第一个方法。但由于我只有钥匙存储为整数YYYYMMDD,我不能真正做日期计算。这就是为什么我切换到MDX,以便能够访问DimDate表中的实际日期。 任何帮助表示赞赏。

问候

塞巴斯蒂安

回答

1

你是绝对正确的轨道“命名计算”对......的逻辑是不一样简单,只要你愿意;-)

以下是将整数日期(YYYYMMDD)转换为日期然后使用DateDiff函数计算两者之间的天数的示例。

DECLARE @s_dt_int AS INT = 20141205; 
DECLARE @e_dt_int AS INT = 20141208; 

SELECT DATEDIFF(
      DAY, 
      CONVERT(date, CONVERT(varchar(8), @s_dt_int), 112), 
      CONVERT(date, CONVERT(varchar(8), @e_dt_int), 112) 
     ) 
; 

该逻辑可以在视图被封装在源或在SSAS数据库的DSV(虽然我更喜欢源上的视图,并认为这是很好的做法,因为它可以在多个SSAS数据库中重复使用

编辑:显然,您可以将DateDiff包装在CASE语句中,以控制处理CreateDateKey> DeliveryDateKey的情况。