簡體   English   中英

數據倉庫中每個事實的開始和結束時間

[英]Start and end period in each fact within a data warehouse

我被要求向我們的數據倉庫添加一個新表。 當前,我們將事實分為月度,季度和年度表,每個表都有時間維度。 每個事實記錄都有一個時間值。 數據在源系統中按開始和結束時間段生成,並且結束日期成為事實記錄的時間維度值。 事實流入月,季度或年事實表將告訴人們如何理解記錄中的日期以及如何使用它們。

我被要求讓新表在每個記錄中都包含開始和結束日期。 有人告訴我,這違反了數據倉庫原則,但是它更好地表示了數據的生成方式,並允許更靈活地查詢數據,例如滾動期等。

我不是數據倉庫專家。 我了解每個事實的單一時間維度是一個原則。 我的問題是,打破這一原則的后果是什么? 換句話說,反對這樣做的理由是什么? 將來這樣做會遇到什么問題? 在我看來,對於每個事實都有開始和結束時間可以更好地表示數據,但是我承認我不足以充分評估這種設計選擇的含義。 誰能提供一些前提?

編輯:我感謝這些答案。 他們至少告訴我,這並沒有我所相信的那么糟糕。 關於日期,我將澄清一件事:它們不代表有效期,而代表合計期。 因此,事實記錄可以代表在任意月份內計算出的某種成分的平均磅數。 不知道這有什么區別,但是確實有。

也許該是抓緊一本好的數據倉庫書籍的時候了,我向Kimball集團推薦一些東西,Ralph Kimball非常適合快速入門數據倉庫。 如果有幫助,我可以進一步闡述,但我將從兩點開始,這可能有助於您扭轉局面並取得進步。

  1. 每個事實具有多個時間維度是非常常見的。 告訴您違反公認的正常做法時,有人給您不正確的信息。 作為“訂單”事實的示例,您通常會有一個訂單日期,一個發貨日期,一個交貨日期,一個期間等。

  2. 如果您使用開始日期和結束日期,則通常表明您正在使用2型維度或變化緩慢的維度。 可能並非如此,但是請確保在做出決定之前先了解尺寸變化緩慢的情況。

記錄開始日期和結束日期的優點是,您可以更輕松地表示不均勻的時間段。 這意味着您可以更輕松地合並,匯總和比較以不同粒度記錄的數據。 從您的描述看來,您的建議似乎從根本上沒有“錯”。 我以前已經實現過類似的事情。

我發現表中時間段的最佳模型是使用半開間隔。 即:間隔是StartDate> = x <EndDate表示的時間段。 半開間隔使連接和比較更加容易。

好的。 這是我處理(將)相同要求的方式。 我使用一個記錄事件日期的新日期字段將調整模擬到我的事實表中。

例如,從上面

EventDateKey金額RecordType

20110327 700.0來源

20110329 -500.0 DW調整

因此,如果您需要匯總(總金額),則數據可以使用EventDateKey並通過相同的Date維度處理任何期間。 這很復雜,因為您正在模擬事實表上的調整,但是它提供了所需的所有靈活性,而不會丟失信息的實質。

每個事實表都有一個粒度 事實表的粒度指定表的每一行代表什么-一項事務或某種匯總(每天,每周,每月..)。

我想您當前的表是聚合的,並且-在這些情況下很常見-聚合表中的每個記錄都有指向日期維度的外鍵,該維度指向期間的末尾。 因此,例如,每周匯總表中的每個記錄每周都有一行,並指向一周的最后一天(星期六或星期日)。 請注意,在此期間開始時擁有另一個密鑰將完全多余。

現在,如果您希望靈活地報告期間,則應考慮一次交易的表粒度 ,換言之,表中的一行應是一次交易,並且任何日期/時間FK都指向交易時間實際交易。

錯誤的方法是在同一張桌子上混合谷物。 考慮以下

FromDateKey ToDateKey   Amount
20110327     20110402   700.0
20110329     20110330   200.0     

任何將同時包含兩行的sum() ,將對已經包含在第一行中的第二項進行重復計數。

總而言之,如果您的月度,季度和年度匯總不夠精細,只需引入一個具有更細粒度的事實表-一日匯總或單筆交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM