数据仓库中的时间和日期维度

Pio*_*zda 15 data-warehouse infobright

我正在构建一个数据仓库.每个事实都有它的时间戳.我需要按天,月,季度创建报告,但也要按小时创建.在示例中,我看到日期往往会保存在维度表格中.alt starexample http://etl-tools.info/images/dw_star_schema.jpg

但我认为,时间没有意义.维度表将增长和增长.另一方面,使用日期维度表的JOIN比在SQL中使用日期/时间函数更有效.

您有什么意见/解决方案?

(我正在使用Infobright)

dav*_*vek 33

Kimball建议使用单独的时间和日期维度:

设计尖端-51最新思维导通时间维桌

在之前的Toolkit书籍中,我们建议使用时间的分钟或秒组成这样的维度作为每天午夜的偏移量,但我们已经意识到最终用户应用程序变得太难了,特别是在尝试计算时时间跨度.此外,与日历日维度不同,一天中特定分钟或秒的描述性属性非常少.如果企业有良好定义的属性在一天内的时间片,如移名称,或广告时隙,一个额外的时间 - 日期尺寸可以被添加到其中该尺寸被定义为分钟数的设计(或过了午夜.因此,如果谷物是分钟,则这个时间维度将具有1440个记录,或者如果谷物是秒,则具有86,400个记录.

  • 链接到Kimball的网站现在已经死了.这是一个新的有效[link](http://www.kimballgroup.com/html/designtipsPDF/DesignTips2004/KimballDT51LatestThinking.pdf). (2认同)
  • 链接再次被打破......以下是新的链接:http://www.kimballgroup.com/2004/02/01/design-tip-51-latest-thinking-on-time-dimension-tables/ (2认同)

Dam*_*vic 8

我的猜测是,这取决于您的报告要求.如果您需要类似的东西

WHERE "Hour" = 10
Run Code Online (Sandbox Code Playgroud)

意思是每天在10:00:00到10:59:59之间,然后我会使用时间维度,因为它比...更快

WHERE date_part('hour', TimeStamp) = 10  
Run Code Online (Sandbox Code Playgroud)

因为将为每一行评估date_part()函数.您仍应将TimeStamp保留在事实表中,以便聚合超过天数的边界,例如:

WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 
Run Code Online (Sandbox Code Playgroud)

使用维度字段时会变得很尴尬.

通常,时间维度具有分钟分辨率,因此1440行.


Bjö*_*lex 5

时间应该是数据仓库的一个维度,因为您经常希望对其进行汇总。您可以使用雪花架构来减少开销。总的来说,正如我在评论中指出的那样,小时似乎是一个异常高的分辨率。如果您坚持使用它们,将一天中的时间作为一个单独的维度可能会有所帮助,但我无法告诉您这是否是好的设计。