Ssas 使用FactTable中的日期计算的成员

Ssas 使用FactTable中的日期计算的成员,ssas,Ssas,我刚开始在SSAS中使用MDX,我必须承认我有点困惑;-) 所以,我想计算的是相当简单的。在事实表中,FactDelivery有两个日期键字段,CreationDateKey和DeliveryDateKey 处理时间是从创建条目到实际交付日期之间的天数 当创建新的计算成员时,我们在左下角窗口中有度量值和维度的字段。但由于FactDelivery的日期值不是实际测量值,因此未列出corse的日期值。我希望我能以以下方式访问它们 Case When [FactDelivery].[Delive

我刚开始在SSAS中使用MDX,我必须承认我有点困惑;-)

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

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

当创建新的计算成员时,我们在左下角窗口中有度量值和维度的字段。但由于FactDelivery的日期值不是实际测量值,因此未列出corse的日期值。我希望我能以以下方式访问它们

Case 
  When [FactDelivery].[DeliveryDateKey] < [Fact Delivery].[DateCreatedKey] 
  Then 0 
  Else [FactDelivery].[DeliveryDateKey] - [FactDelivery].[DateCreatedKey]
End
案例
当[FactDelivery]。[DeliveryDateKey]<[FactDelivery]。[DateCreatedKey]
然后0
Else[FactDelivery]。[DeliveryDateKey]-[FactDelivery]。[DateCreatedKey]
终点
这看起来就像可以在事实表本身上定义的命名计算。这是我的第一个方法。但由于我只将键存储为整数YYYYMMDD,所以我无法真正进行日期计算。这就是为什么我切换到MDX,以访问DimDate表中的实际日期。 感谢您的帮助

致意


塞巴斯蒂安

你的“命名计算”绝对正确……逻辑并不像你想的那么简单;-)

下面是一个将整数日期(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数据库上重用),但它认为是很好的实践。 编辑:显然,您可以在CASE语句中包装DateDiff,以控制CreateDateKey>DeliveryDateKey情况的处理