从事实表中计算日期的成员

时间:2014-12-03 11:07:46

标签: ssas

我刚从SSAS开始使用MDX,我不得不承认我有点困惑; - )

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

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

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

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

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

祝你好运

塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

你绝对走在正确的轨道上&#34;命名计算&#34; ...逻辑并不像你想的那样简单; - )

下面是将整数日期(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&gt;的情况的处理。 DeliveryDateKey。