我真的不知道如何处理一段时间内发生的事实。我总是处理在特定日期发生的事实。
很明显,我的事实有一个start_date和一个end_date。所以,假设我的start_date是01/01/2008,而我的end_date是01/01/2011。我需要了解2009年发生的事实和今年发生的事实。这两年也可能发生同样的事实。确定事实的方法是2009年的一部分是检查12/31/2009。
我正在考虑使用日期范围的StartDate和EndDate维度(从我的StartDate维度的第一个日期到12/31/2009以及从12/31/2009到我的EndDate维度中的最后一个日期)。我会加入那些。
我试了一下,它有效,但它真的很慢。
有什么想法吗?
答案 0 :(得分:2)
我找到了我想要的解决方案。大卫和克里斯为你们举行了比赛!这是我想要实现的,但我缺乏MDX语法:
SELECT [Measures].[NumberX] ON COLUMNS
FROM [MyCube]
WHERE ([START DATE].[REFDATE].FirstMember:[START DATE].[REFDATE].&[2009-12-31T00:00:00],
[END DATE].[REFDATE].&[2010-01-01T00:00:00]:[END DATE].[REFDATE].LastMember)
非常简单。我认为我的问题不明确,这就是我得到不同答案的原因; - )
答案 1 :(得分:0)
您始终可以使用具有两个时间维度的日期范围,如:
选择[开始日期]。[年]。[2009]:[结束日期]。[年]。[2010]在0 来自立方体
如果我正确理解了这个问题。两个时间维度应该很好地协同工作。我在工作中有两个工作,他们一起工作很快。确保在多维数据集的维度使用部分中设置它们,以便区分这两个日期。
答案 2 :(得分:-1)
您只需要一个日期维度DimDate。您的事实表可以有2个外键到DimDate,一个用于startdate,一个用于enddate。
FactTable
{
FactID int,
StartDate int,
EndDate int
-- Other fields
}
DimDate
{
DimDateID int,
Year int,
Month int,
Day int,
-- Other fields if needed
}
要了解2009年的所有事实,请使用
SELECT f.FactID FROM FactTable f
INNER JOIN DimDate dStart ON dStart.DimDateID = f.StartDate
INNER JOIN DimDate dEnd ON dEnd.DimDateID = f.EndDate
WHERE dStart.Year <= 2009
AND dEnd.Year >= 2009