2011年5月25日水曜日

第7回:ディメンショナルモデリング:ディメンション設計:スローリーチェンジングディメンション

 今回は、ディメンショナルモデリングで重要なスローリーチェンジングディメンション(Slowly Changing Dimensions (SCD))について説明します。これは非常に重要なテクニックで、データウェアハウス、BIに係る人には必須のテクニックとなります。多くのデータウェアハウス、BI製品はこのスローリーチェンジングディメンションを知っている前提で製品を説明していますので、ぜひここで押さえましょう。

スローリーチェンジングディメンションって何?

 では、スローリーチェンジングディメンション(Slowly Changing Dimensions (SCD))っていったい何でしょうか。
(日本語訳として、「徐々に変化するディメンション」や「ゆるかやに変化するディメンション」などの訳語が使用されていますが、ちょっとしっくりこないのでここでは英語をそのままカタカナ表記して記載したいと思います。)

 はこれデータウェアハウスで使用するディメンションデータの更新の対応方法のことなのです。ディメンションとは、年や月、製品、住所などのデータを分析する上で必要になる切り口のことですが、これは更新されることがあります。
 例えば、Aさんが引っ越して、住所が長野県から東京都にかわるなどです。それをそのまま何も考えずに上書きすると大変なことになります。なぜなら、今まで長野県に住んでいるときに行った過去の行動が東京でおこったことになるからです。
 そのため、データウェアハウスの設計ではこの更新する方法論が確立されています。基本はType0~Type4まであり、あとそのハイブリット型があります。

 以下、それぞれのタイプについて説明します。

Type 0 SCD

 これはデータが更新されても何もしないことです。値がかわっても無視です。まあ、通常はデータを何かに使うために保持しているはずなので、このタイプはあまりないと思います。


Type 1 SCD

 これは、値が変化したときに、テーブルの値をそのまま上書き変更します。これは、変更がビジネス上さほど重要でない場合に採用します。たとえば、顧客の名前など。。。
 問題点としては、顧客の住所などを上書きすると、過去のデータを地域別でみた場合、データが正しく分析できないことです。また、注意としてサマリーデータなどを持っている場合は、データを再構築する必要があります。


Type 2 SCD

 値が変化したときに、新しいレコードを追加します。また、各レコードにStart date(From date)とEnd date(To date)を入れておきます。最新のデータはEnd dateに99991231などを入れておきます。
 この方法を採用すると、トランザクションデータ(ファクトデータ)をデータが発生した時に状況で分析することができます。上の例でいえば、引っ越しをして、住所が長野県→東京都に住所が変更になっても、長野県に住んでいたときに発生したトランザクションは長野県に計上され、引っ越し後のトランザクションは東京都に計上されることになります。非常によく使用するタイプとなります。

 問題点としては変更が多いとたくさんのレコードが増えます。この場合過去のサマリーテーブルは再構築する必要はありません。


Type 3 SCD

あらかじめデータに現在の値とその前の値のフィールドを用意しておき、変更があった場合に古いデータを以前のデータフィールドへ入れて、最新の現在のデータフィールドへ格納します。問題点は複数の変更に対応できません。保持できるのは一つ前のデータだけ。
 これは営業のテリトリー変更などで一つまえのテリトリーで現在の値をみたい場合などに威力を発揮します。


Type 4 SCD

 これはテーブルには最新の情報を保持し、古いデータは別途用意した履歴テーブルへ格納します。問題点としてはシステムが複雑になります。


Hybrid SCDs

 これ以外にそのハイブリット版として2つの方法があります。

複数バージョンによる予期可能な変更(Predictable changes with Multiple Version overlays)

 これは例えば、毎年営業のテリトリーが変更になり、分析要件としてすべての情報を指定した年のテリトリーで分析したい場合などに利用します。方法としては、レコードの列にそれぞれの年のフィールドを用意しておきます。でもシステムがとっても複雑になるので、諸刃の剣です。


単一バージョンによる予測不可能な変更(Unpredictable Changes with Singel version overlay)

 これは予測できない変更に対して、分析の切り口として現在の状態での切り口とそのデータが発生したときに切り口で分析したい場合に使用します。これはレコードに現在のデータと過去のデータのフィールドを用意しておき、変更があった場合にレコードを追加し、関連する現在のデータの変更を行う方法です。


 これは、Type 2 と Type 3と Type 1を合わせた感じなので、Type 6(2+3+1)と呼ばれています。

 これらのタイプは各レコードの列ごとに適用します。設計時に各フィールドをどのタイプにするか詳細に検討する必要があります。

 今回はディメンションの変更管理方法について説明しました。次回は、ファクトの構築方法について説明します。

0 件のコメント:

コメントを投稿