我正在重新构建一个报告/数据仓库类型的数据库。我们目前有一个包含酒店粒度数据的表(即 HotelID 加上许多度量,包括 Last7DaysGross、Last28DaysXXX 等度量)。
我认为最好转移到位于 Hotel/StayDate 粒度的事实表。但是,对 HotelID 进行分组并包括 Last7DaysGross 等与日期相关的度量需要表现得非常好。
什么样的结构可以在这里工作?我认为我不能像我希望的那样使用索引视图,因为它们有多重限制(没有子查询等)。为了获得合理的性能,我需要在酒店级别(从 HotelStayDate 级别聚合?)这是人们最常查询的级别。我是否需要实际创建诸如 Last7DaysGross 之类的字段?这似乎不是一个好的设计,但我很难想出另一个。
抱歉这个问题有点含糊。还有什么我在这里想念的吗?我知道这些与日期相关的措施通常会在前端级别(即在诸如 Business Objects 之类的工具中)完成。但是,对于这个项目,我们需要将它保存在数据库中。
谢谢,西尔维亚
编辑:
感谢所有深思熟虑的评论!我接受了 David Marwick 的回答,因为他有扩展日期维度的想法。我什至没有想到这个想法,听起来很值得一试。
稍微扩展一下 David Marwick 的想法,我想出了这个想法。我可能会尝试看看它实际上是如何工作的:
DateDimension
DateKey
DateKeyBeginLast28Days
DateKeyEndLast28Days
Fact
DateKey
GrossTransactions
然后查询时:
Select
DateKey
,SumLast28Day = sum(GrossTransaction)
from Fact
join DateDimension
on Fact.DateKey >= DateDimension.DateKeyBeginLast28Days
and Fact.DateKey <= DateDimension.DateKeyEndLast28Days
group by DateKey