Data-Warehouse

我可以使用哪些已知策略(如果有)來驗證漸變維度?

  • September 8, 2015

我的數據倉庫中有一個客戶維度(SSAS 2014 Multidimensional)。它設置為 II 型 SCD,只有開始和結束日期欄位來跟踪更改。(空結束日期 = 目前)。

隨著我們日常負載的執行,我看到變化不斷湧現,我有時擔心它會在不應該創建新記錄的時候創建新記錄。

可以執行什麼樣的腳本來比較每個客戶各自的歷史記錄並確保其變化得當?

另外,我想我正在談到差距和孤島問題,有什麼策略可以驗證開始日期和結束日期都是連續的?

我想確信該表每天都在報告正確的數據,而不會因為一些空檢查導致每天創建大量記錄而成為野獸。

謝謝你盡你所能的幫助。

檢查日期是否連續

你沒有說你在這裡使用的是哪個 DBMS,但你使用的是 SSAS,所以我猜是 SQL Server。如果您使用的是最新版本,則使用LAGand LEADin window 函式可以非常方便地完成此類任務。您可以按開始日期或按增量 ID(如果有)對行進行排序,然後使用這些來檢查下一行或上一行中的值。

因此,例如,您可以設置一個視窗函式,該函式由您的業務密鑰/代理持久密鑰(從這裡開始我將只使用術語持久密鑰)分區,並按您的開始日期(升序)排序。然後,您可以使用LEAD來檢查下一行的開始日期是否等於目前行的結束日期 + 1。您不能在WHERE子句中使用視窗函式,因此也許您可以創建一個 case 語句來標記那些針對同一客戶的行(即具有相同的持久鍵),但下一行的 StartDate 不等於這個行的 EndDate + 1。您也可以反向執行相同的操作來標記下一行。然後,外部查詢只能選擇需要調查的行。

檢查 SCD 是否正常工作

在某種程度上,你可以做的檢查將取決於你的具體情況,但我會嘗試從一個可能對你有幫助的通用角度來解決這個問題(如果你仍然需要幫助,7 個月後!),以及可能會幫助其他有類似問題的人。如果您返回並提供更具體的細節,請告訴我,如果可能的話,我很樂意通讀並改進我的答案。

一種選擇可能是執行一些查詢,這些查詢COUNT在維度的不同方面選擇一些值。因此,例如,您可以按持久鍵進行分組,併計算該持久鍵存在多少行。如果您不了解有多少更改是合理的,您可以進行平均計數,然後尋找超過該平均值(或超過該平均值某個百分比或設定金額)的客戶。

從那裡開始,探勘屬於少數可疑客戶的數據可能會發現明顯的問題,值得進一步調查。如果沒有具體細節,我不知道您可能會遇到什麼問題,但舉個例子,假設您注意到一個有數百行的客戶,其值在兩個值之間來回變化。從那裡,您可以編寫一些查詢以在表的其餘部分中查找該問題 - 例如,提出一個查詢,讓您查看每個客戶的行數與唯一行數每個客戶(僅查看實際屬性列,而不是日期或您可能擁有的任何其他元數據列)。

檢查客戶是否隨著時間的推移正確更改將取決於您在源或暫存區域中保存的歷史數據。如果您在其中一個或兩個地方確實有歷史數據,則可以直接按日期(如果所述歷史數據包括日期)或按這些更改發生的順序將值與維度行進行比較。


稍微切線,但值得一提:我猜測您不確定此維度是否正確執行,這可能是您從其他開發人員那裡繼承的東西?如果您真的擔心這個維度的大小,並且如果您不知道其目前設計的全部原因,那麼可能值得檢查所有類型 II SCD 欄位是否真的應該是類型 II SCD。

一些數據倉庫開發人員會傾向於預設 SCD II,這確實是有問題的。除了空間問題外,隨著連結的進入,使用 SCD II 可能會給使用數據的人帶來一些意想不到的結果。這可能與您的情況無關(SCD II 屬性可能經過深思熟慮並適合您的使用者要求),但如果相關,則可能會減輕您對維度大小的擔憂,並且還無需進行這些數據質量檢查。

引用自:https://dba.stackexchange.com/questions/89371