2016-11-17 8 views
0

複数のソースシステムからのデータの統合を含むデータウェアハウスプロジェクトに取り組んでいます。顧客ディメンションに値を設定するSSISパッケージをセットアップし、ゆっくりと変化するディメンションツールを使用して、顧客に対する更新を追跡します。SSISのscdの代替手段を理解するのに役立つ

私はいくつかの問題を抱えています。この例を取る:Aは、そのようなレコードは次のようになります可能性があります

ソースシステム:

名、姓、14222

ソースシステムBはのレコードを持っているかもしれません郵便番号 ジェーン、ドウ、次のようになり、同じクライアント:

名、姓、郵便番号 ジェーン、ドウ、不明

私が最初にシステムAからレコードをインポートする場合、私は最初の名前を持っています、姓、および民族性。すばらしいです。今、システムBからクライアントレコードをインポートすると、ファジィマッチングを実行して、これが同じ人物であることを認識し、緩やかに変化するディメンションツールを使用して情報を更新できます。しかし、この場合は、「不明」が有効なデータを上書きするため、郵便番号を失うことになります。

私は間違った方法でこの問題に近づいているのだろうかと思います。 SCDツールは、新しいデータが有効かどうかに基づいて属性を選択的に更新する方法を提供していないようです。マージステートメントはうまくいくでしょうか?私が見ていない基本的なデザインミスをしていますか?

アドバイスありがとうございます!

答えて

0

私の経験では、組み込みのSCDツールは、この要件を処理するのに十分な柔軟性がありません。

MERGEステートメント、または一連のUPDATEINSERTステートメントのいずれかは、おそらくロジックとパフォーマンスに最も柔軟性があります。

ありモデルはSCDタイプ2用MERGE文にそこにおそらくですが、ここで私が使用したパターンです:

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ツールの限界を確認いただき、誠にありがとうございます。私は今のデザインを廃止する前に、これが事実だろうと思っていたが、いくつかの外部の確認を求めていた。 –

関連する問題