2010-03-24 127 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條記錄,每秒有一條記錄由時間鍵標識。

在事實記錄中,你需要日期和時間,添加兩個引用這些符合尺寸的鍵。