![]() 前へ |
![]() 次へ |
タイプ2のSCDには、履歴レコードと現行レコードの両方が格納されます。タイプ2のSCDでトリガー属性が変更されると、現行レコードはクローズ済としてマークされ、変更された値を含む新規レコードが作成されます。レコードをクローズ済としてマークするために、「デフォルトのオープン・レコード終了時間」プロパティの値が有効期限属性に設定されます。履歴レコードの有効期限は、マッピングで定義した入力接続に関係なく、「デフォルトのオープン・レコード終了時間」プロパティを使用して設定されます。
|
注意: タイプ2のSCDをロードするときに、ターゲットがOracle 9iデータベースの場合には行ベース・モードのみがサポートされます。解決策として、親サロゲートIDの参照属性をすべてのレベルのトリガーに設定して、階層バージョニングに切り替える方法があります。 |
タイプ2のSCDにデータをロードする前に、Warehouse Builderは、同じビジネス識別子を持つレコードがタイプ2のSCDに存在するかどうかをチェックします。レコードが存在しない場合、タイプ2のSCDに追加されます。レコードがすでに存在する場合、次の手順が実行されます。
プロパティ「デフォルトのオープン・レコード終了時間」の値を設定することで、既存のレコードがクローズ済としてマークされます。
変更された属性値を使用して新規レコードが作成されます。
そのレベルの有効日入力がマップされていない場合、演算子の「デフォルトのオープン・レコード有効時間」および「デフォルトのオープン・レコード終了時間」プロパティを使用して、有効時間および終了時間が設定されます。
そのレベルの有効日入力がマップされている場合、新規レコードの有効時間が、有効日入力データ・フローから取得された値に設定されます。有効日入力(接続されている場合)は、各新規レコードの実際の有効日を表します。
タイプ2のSCDにデータをロードする手順
「マッピングの定義」の説明に従って、マッピングを定義します。
マッピングにディメンション演算子を追加します。この演算子が、データのロード先となるタイプ2のSCDにバインドされていることを確認してください。
マッピングへの演算子の追加の詳細は、「マッピングへの演算子の追加」を参照してください。
(オプション)キャンバスで演算子名をクリックしてディメンション演算子を選択し、プロパティ・インスペクタを使用して次のプロパティを設定します。
これらのプロパティに値を明示的に指定しない場合、デフォルト値が使用されます。
ディメンション演算子の「ロード・タイプ」プロパティを「ロード」に設定します。
ソース・オブジェクトに対応する演算子、およびソース・データがディメンションにロードされる前に実行する必要のある変換に対応する演算子を追加します。
ソース演算子の属性を中間変換演算子に(ソース・データをディメンションにロードする前に変換する場合)、次にターゲット・ディメンション演算子にマップします。要件に従って、すべての属性のマッピングを完了します。
|
注意: 属性をタイプ2のSCDの有効期限属性にマップすることはできません。 |
プロジェクト・ナビゲータでマッピングを選択し、ツールバーの「検証」アイコンをクリックして、マッピングを検証します。
検証プロセスで発生したエラーを解決します(ある場合)。
プロジェクト・ナビゲータでマッピングを選択し、ツールバーの「生成」アイコンをクリックして、マッピングを生成します。
ログ・ウィンドウの新しい「結果」タブに生成結果が表示されます。生成エラーを解決します(ある場合)。
タイプ2のSCDをロードするマッピングでは、ソース演算子の属性をあるレベルの有効日属性にマップする場合、Warehouse Builderによって次の処理が実行されます
初期レコードのロード中、ソース属性の値が、(タイプ2のSCDにバインドされている)ディメンション演算子の「デフォルトの初期レコード有効時間」プロパティで指定されている値よりも前である場合は、ソースの値がレコードの有効日として使用されます。前ではない場合は、「デフォルトの初期レコード有効時間」プロパティに指定されている値がレコードの有効日として使用されます。
後続のレコードのロードのときに、レコードがバージョン管理されている場合、新しいレコードの有効時間がソースから取得されます。有効時間の値が指定されていない場合はSYSDATEが使用されます。クローズされたレコードの終了時間は、新しいレコードの有効時間からギャップを引いた値に設定されます。
ソースからの属性をレベルの有効日属性にマップしない場合は、次のように実行されます。
初期レコードのロード中、「デフォルトの初期レコード有効時間」プロパティに指定されている値がレコードの有効日として使用されます。
後続のレコードのロードの間に新しいバージョンが作成されると、新しいレコードの有効時間がソースから取得されます。有効時間の値が指定されていない場合はSYSDATEが使用されます。以前のバージョンの終了時間は、新しいバージョンの有効時間からギャップを引いた値として取得されます。
ギャップの詳細は、「Type2 Gap」および「Type2 Gap」を参照してください。
|
注意: レベルの有効期限へのマッピングは許可されていません。レコードをロードするときには、「デフォルトのオープン・レコード終了時間」プロパティが有効期限として使用されます。このプロパティのデフォルト値はNULLです。 |
例: タイプ2のSCDのバージョニング対象レコードに割り当てられる値
タイプ2のSCDであるProductsをロードするマッピングを作成します。このタイプ2のSCDのリーフ・レベルProductは、ソース表からロードされます。Productレベルの有効日属性はソース属性EFF_DATEからマップされます。
ディメンション演算子には、次のプロパティがあります。
デフォルトの初期レコード有効時間: 01-jan-2000
デフォルトのオープン・レコード終了時間: SYSDATE
デフォルトのオープン・レコード終了時間: 01-jan-2099
Type2 Gap: 1
EFF_DATEの値が21-mar-2007 10.25.05.000000 PMであるProductレベルのソース・レコードについて考えてみましょう。Productレベルの初期レコードがロードされると、そのレコードには次の値が割り当てられます。
有効日: 01-jan-2000
有効期限: 01-jan-2099
その後、21-mar-2007に行われたロード中にProductレベルのレコードがバージョニングの対象になると、次の処理が実行されます。
ソース属性の値が「デフォルトのオープン・レコード有効時間」プロパティに優先します。したがって、Productレベルの新規レコードに格納される有効日は21-mar-2007であり、有効期限は01-jan-2099に設定されます。
Productレベルの初期レコードはクローズされ、有効期限の値が21-mar-200710.25.04.000000 PMに設定されます。