2016-11-17 138 views
0

我正在研究一個數據倉庫項目,該項目涉及集成來自多個源系統的數據。我已經建立了一個SSIS包,用於填充客戶維度並使用緩慢變化的維度工具來跟蹤客戶的更新。需要幫助瞭解SSIS中scd的替代方案

我遇到了一些問題。就拿這個例子:

源系統可能有一個記錄一樣,看起來像這樣:

姓,名,郵編 簡,DOE,14222

源系統B可能有一個記錄同一個客戶端,看起來像這樣:

姓,名,郵編 簡,DOE,未知

如果我先導入由系統中的記錄,我會第一個名字,姓氏和種族。大。現在,如果我從系統B導入客戶記錄,我可以進行模糊匹配以識別這是同一個人,並使用緩慢變化的維度工具來更新信息。但在這種情況下,我將失去郵政編碼,因爲'未知'將覆蓋有效數據。

我想知道我是否以錯誤的方式接近這個問題。基於新數據是否有效,SCD工具似乎沒有提供任何有選擇性地更新屬性的方法。合併聲明會更好嗎?我是否犯了某種我沒有看到的基本設計錯誤?

感謝您的任何建議!

回答

0

根據我的經驗,內置的SCD工具不夠靈活,無法滿足此要求。

一對MERGE語句或一系列UPDATEINSERT語句可能會爲您提供邏輯和性能的最大靈活性。

可能有模特在那裏爲MERGE語句SCD 2型,但這裏是我使用模式:

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    When Matched And 
    Target.NonKeyAttribute <> Source.NonKeyAttribute 
    Or IsNull(Target.NonKeyNullableAttribute, '') <> IsNull(Source.NonKeyNullableAttribute, '') 
    Then Update Set SCDEndDate = GetDate(), IsCurrent = 0 

    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ..., GetDate(), 1) 

    When Not Matched By Source Then 
    Update Set SCDEndDate = GetDate(), IsCurrent = 0; 

Merge Target 
    Using Source 
    On Target.Key = Source.Key 

    -- These will be the changing rows that were expired in first statement. 
    When Not Matched By Target Then 
    Insert (Key, ... , SCDStartDate, IsCurrent) 
    Values (Source.Key, ... , GetDate(), 1); 
+0

感謝您確認內置SCD工具的侷限性。我有一種預感,那就是這種情況,但在我放棄我目前的設計之前,希望得到一些外部確認。 –