【发布时间】:2012-05-02 12:27:28
【问题描述】:
我正在重新构建一个报告/数据仓库类型的数据库。我们目前有一个表,其中包含酒店粒度的数据(即 HotelID 加上许多度量,包括 Last7DaysGross、Last28DaysXXX 等度量)。
我认为最好转移到位于 Hotel/StayDate 粒度的事实表。但是,对 HotelID 进行分组并包括 Last7DaysGross 等日期相关的度量需要非常好。
什么样的结构可以在这里工作?我认为我不能像我希望的那样使用索引视图,因为它们有多重限制(没有子查询等)。为了获得合理的性能,我需要在酒店级别(从 HotelStayDate 级别聚合?)这是人们最常查询的级别。我是否需要实际创建诸如 Last7DaysGross 之类的字段?这似乎不是一个好的设计,但我很难想出另一个。
抱歉,这个问题有点含糊。还有什么我在这里想念的吗?我知道这些与日期相关的措施通常会在前端级别完成(即在诸如 Business Objects 之类的工具中)。但是,对于这个项目,我们需要将其保存在数据库中。
谢谢, 西尔维娅
编辑:
感谢所有体贴的cmets!我接受了 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
【问题讨论】:
-
您预计每天有多少笔交易?总计,在所有酒店中,精确到单笔交易?