2010-03-24 44 views
11

我正在构建一个数据仓库。每个事实都有时间戳。我需要按天,月,四季制作报告,但也需要几个小时。在这些例子中,我看到日期倾向于保存在维度表中。 alt starexample http://etl-tools.info/images/dw_star_schema.jpg数据仓库中的时间和日期维度

但我认为,这对时间没有意义。维度表会增长和增长。另一方面,与日期维度表联接比在SQL中使用日期/时间函数更有效率。

您的意见/解决方案是什么?

(我使用Infobright的)

+1

每小时报告似乎对数据仓库来说是一种高分辨率。真的需要/合适吗? – 2010-03-24 11:53:33

回答

6

我的猜测是它取决于您的报告要求。 如果你需要需要像

WHERE "Hour" = 10 

10:00:00和10:59:59之间每天的含义,那么我会用时间维度,因为它的速度比

WHERE date_part('hour', TimeStamp) = 10 

因为date_part()函数将针对每一行进行评估。 您仍然应该保持在事实表中的时间戳,以聚集了天界,像:

WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 

使用尺寸领域时,它得到尴尬。

通常情况下,时间维度有一个分钟的分辨率,所以1440行。

+0

要清楚,你推荐两个单独的维度,其中一天(365 * 10 = 3,650条记录)和一分钟(1,440条记录)?我想了解将其分开的优势;一个'DateTime'维度将会更大(365 * 10 * 24 = 87,600个记录在小时谷物中),但仍然不是很大,并且会使时区计算更容易。 – 2014-08-22 22:23:14

+0

@JonofAllTrades通过分割每个维度都有一个明智的PK。一些事实将会在日期粒度(即没有时间戳),一些将在时间粒度。将日期粒度的事实表连接到时间粒度的维度会导致重复,然后您需要投入更多资源来删除。 – jackohug 2015-07-28 13:29:39

+0

@jackohug:当然,这就是为什么我总是有'日期'表和'时间'表。但是当你*有*日期时间值时,为什么使用两个键和双连接而不是单个四字节FK到'DateTimes'表?这对我来说工作得很好,但有些人似乎对此过敏,因为没有很好解释的理由。 – 2015-07-28 15:35:38

3

时间应该是在数据仓库的维度,因为你往往需要将汇总一下吧。您可以使用snowflake-Schema来减少开销。总的来说,正如我在评论中指出的那样,小时数似乎是一个非常高的分辨率。如果你坚持他们,让一天中的某个时间单独维度可能会有帮助,但我不能告诉你这是否是好设计。

+1

如果日期是10年的维度,它只有大约3650条记录。每小时一小时的报告在这里非常有用 - 我们需要比较几天:星期一到星期一,星期二到星期二和星期一星期一11:00-12:00到星期二11:00-12:00。 你认为雪花比星星更有用/有效吗? – 2010-03-24 12:11:21

+0

雪花可以帮助减少维度表中的冗余,但是如果这有助于您在特定情况下的性能或记忆方式,我不能说。 – 2010-03-24 12:30:09

+0

具有10年和小时的日期维度仍然很小:87,660行。此外,您可以总结旧数据以减少时间分辨率。 10年后,周四上午10点有多少关联? – 2010-03-24 20:45:23

26

金博尔建议具有分开的时间和日期的尺寸:

design-tip-51-latest-thinking-on-time-dimension-tables

在以前的工具包的图书,我们推荐 建立这样一个尺寸 随着时间作为所述分或秒分量 从每天 的午夜时间抵消,但我们已经认识到 由此产生的最终用户 申请变得太困难, 尤其是wh恩试图计算时间 跨度。此外,与日历日期 尺寸不同,在 日内特定分钟或秒钟内的极少数描述性属性。如果企业已经很好 在一天内的时间片 ,例如移位名称或 广告时隙,附加 时间的日尺寸可以被添加到 的设计,其中该尺寸是 定义为定义的属性午夜过后的分钟数(或 甚至秒)。因此,如果粒度为分钟 或者如果粒度为 秒,则这个时间尺度将具有 1440个记录。

+3

+1引用聪明的人。 – 2010-03-25 09:05:19

+0

同意,这是一个很好的解决方案。 – 2010-04-16 08:16:04

+2

链接到Kimball的网站现在已经死亡。这是一个新的有效[链接](http://www.kimballgroup.com/html/designtipsPDF/DesignTips2004/KimballDT51LatestThinking.pdf)。 – user327961 2012-02-03 18:20:31

3

我会建议有日期和时间的单独维度。日期维度对每个日期都有1条记录,作为已识别的有效日期范围的一部分。例如:01/01/1980至12/31/2025。

还有一个单独的时间维度,有86400条记录,每秒有一条记录由时间键标识。

在事实记录中,你需要日期和时间,添加两个引用这些符合尺寸的键。