この記事は、前回書いたデータモデリングの9つのことの2つ目です。
crmprogrammer38.hatenablog.com
安定した性能にするなら内部結合です!
DWHだと、ファクトの件数が多くて、ディメンションの項目に指定された検索条件を元に、一番最適なファクトの絞込みを行って欲しい。
でも、データ内容によっては外部結合にせざるを得ない時があって、そういう時は強制的に内部結合にできるようにデータを加工をします。
【内部結合にするためのデータの加工1】
ファクトの結合キーがnullの場合、でもデータは落としたくない
これはよくありますよね。nullであることが意味がある時があります。
でも結合キーがnullは外部結合にせざるをえないので、次のような工夫をします。
・ディメンションにnullの時のレコードを用意(例えばキー項目"00000000"で登録)
・ファクトの項目がnullの場合、nullを"00000000"に変換してセット
例えば、次のような売上ファクトで、次の業務データがあったとします。
(顧客は、顧客登録している場合は、顧客コードがセットされているけど、顧客登録されていない場合はnullになる。)
[売上ファクトのデータ]
[顧客ディメンションのデータ]
そしてこれをデータ加工すると次のようになります。
[売上ファクトのデータ(加工後)]
[顧客ディメンションのデータ(加工後)]
これなら顧客がnullだったレコードも内部結合することができます。
でも、顧客がnullの時に"00000000"と表示するのが違和感がある場合は、次のように顧客ディメンションにさらに「顧客 結合用」列を追加すれば、表示する顧客をnullにすることができます。
【内部結合にするためのデータの加工2】
ファクトの結合キーがディメンションにない場合、でもデータは落としたくない
データの打ち間違えか、マスタの名寄せをしたかでファクトの顧客が、ディメンションにない場合があります。そんな時はディメンションに足りない分を追加します。
[売上ファクトのデータ]
[顧客ディメンションのデータ]
売上ファクトの顧客"A000000"に該当する顧客が顧客ディメンションにありません。
なので、顧客ディメンションに追加します。
[顧客ディメンションのデータ(加工後)]
[最後に]
外部結合を多用してとても苦労した経験があって、内部結合にして安定させようという気持ちで書いています。
もちろん、外部結合を選択するケースもあると思います。その都度一番いい方法を選択していくことが重要です。