一個事實有多少個日期維度
關於設計星型模式:我在事實表中有三個日期列
fact_table (insert_date, trade_date, close_date ...)
。而且我不知道應該創建多少個日期維度?案例 1: 暗淡 A 。這意味著:一行@fact_table 對 A 有三個 FK。
案例 2:Dim A(插入日期),Dim B(交易日期),Dim C(close_date)。這意味著:一行@fact_table 對 A 有一個 FK,對 B 有一個 FK,對 C 有一個 FK。
問題:應該創建多少個日期維度?
一個維度代表一個資訊類別:例如日期,產品……在您的情況下,您在事實表中有三個屬性引用相同的分析軸,即“日期”,因此如果您使用星型模式,則只有一個日期維度需要,這是一個維度的角色扮演實現。
有兩個維度的角色扮演實現:
- 表別名類型通過為每次使用分配別名,在 SQL 語句中多次使用維度。
- 數據庫視圖類型,您創建的視圖數量與您需要維度上的角色數量一樣多。
您只需要一個日期維度,例如:日期維度的“類型”將在上面的事實表中提到。
更新 :
建模日期和時間
維度 在所有事實和維度表中應該只有一個日期維度和一個時間維度。並非所有日期和時間欄位都需要映射到日期和時間維度。僅當您需要維度中的額外屬性時,才將日期時間欄位映射到日期或時間維度。
通常,Date 維度的最低粒度是 Day,而 Time 維度的最低粒度是 Second。許多倉庫不需要時間維度,但幾乎每個數據倉庫系統都使用日期維度。
通常,為日期和時間創建單獨的維度。
如果有必要提取跨越日期邊界的連續時間塊(例如
11/24/2000 10 p.m. to 11/25/2000 6 a.m.
),那麼如果小時和天在同一維度上會更容易。否則,單獨的維度Date
和Time
更易於管理和查詢。如果日期和時間是單獨的維度,則更容易分析週期性和重複發生的日常事件。
範例: 本週上午 9 點活躍的會議數量。如果日期和時間是分開的,這是一個簡單的查詢;如果將日期和時間合併為一個維度,則要復雜得多。以下是在一個日期/時間維度中同時具有日期和時間維度的問題:
問題#1:
- 將日期和時間組合成一個維度會創建一個非常大的維度,特別是如果您使用秒作為粒度。如果您使用 Hour 作為組合表的粒度,問題就不那麼嚴重了。
- 10年數據的日期和時間維度(分開)的基數 日期維度:10 * 365 = 3650 時間維度(粒度:
秒):24 * 60 * 60 = 86400
- 10 年數據的日期和時間維度(組合)的基數 DateTime 維度(粒度 Hourly):10 * 365 * 24 = 87600
DateTime 維度(粒度秒):10 * 365 * 24 * 60 * 60 =
315,360,000
DateTime 維度中的記錄越多,查詢性能就越慢。
問題 #2
在同一維度中同時具有日期和時間維度可能會導致對具有一天粒度的事實表的解釋問題。由於維度表中的額外粒度,很容易在同一天無意中將兩條記錄輸入到事實表中。查找更多:來源