#概要
Cognos Analytics や Cognos 10 BI で、レポートにテーブルのデータを表示するために、Framework Managerを用いてモデリングを行います。
このモデリングの際に、テーブル構造を取り込んだ後に、テーブル間にリレーションを張りますが、そのリレーションの張り方で最低限覚えておいて欲しい事をまとめます。
あくまで初心者向けの基本の話なので、何も知らんけどFramework Managerでデータモデル作らないといけなくなっちゃった、という様な可哀想な立場に立たされた方は、取りあえずこれを3分間で読んで頭に入れてやってみてください。
#基本は 1対n でリレーション
テーブル間のリレーションの基本は 1対nで、製品表や日付表などのマスタ表(ディメンション表)が「1」の側、売上表とか実績値的な数値データを持つトランザクション表(ファクト表)が「n」の側になります。
Cognosは 1対n の関係で、分析の軸となるディメンション表か、集計対象数値データを持つファクト表かを判断します。
#ディメンション表側は1..1、ファクト表側は1..n か 0..n
1対nと言っても、Framework Managerには色々なカーディナリティの選択肢がありますが、取りあえずディメンション表の側は「1..1」で、ファクト側を「1..n」か「0..n」かを考えます。
ファクト側を「1..n」にした場合、2つの表を結合するため発行されるSQLは「INNER JOIN」となります。
ファクト側を「0..n」にした場合、2つの表を結合するため発行されるSQLは「LEFT OUTER JOIN」となります。
「INNER JOIN」とか「LEFT OUTER JOIN」が何かは、Googleとかで調べればいくらでもでてきますので割愛します。結合方式の意味を理解して、どっちの結合結果が必要かを考えて選択してください。
#スタースキーマ構造を目指す
ファクト表を中心に配置し、周りをディメンション表で取り囲んで行くモデルを目指します。
これがいわゆる「スタースキーマ」です。
#ファクト表が複数ある場合はどうするの?
こういうのをやっている環境を時々見かけますが、ファクト表同士を n対n で直接リレーションを張ってはいけません。
基本はあくまで 1対n のリレーションなので、ファクト表の間にディメンションを挟みます。
または、データベース上で一つの表やビューにまとめてしまうのも有りです。
#他のディメンションはどうするの?
こんな感じにしていきます。
#リレーションがループするのは駄目って聞いたけど?
こういうのは駄目です。
一個前のリレーションでは、各表が「1」のディメンションなのか、「n」のファクトなのか明確だったけど、下の「表C」は、「1」と「n」を両方持っていて、ディメンションなのかファクトなのかわかりません。
そういう時は、こうします。
表Cのエイリアス(別名)を作成します。
これで表Cはファクト、表Cエイリアスはディメンションとして役割が明確になります。
これで3分くらいでしょうか。
という辺りを取りあえず意識してやってみて頂ければ、後々取り返しのつかないモデルを作ってしまう事にはならないと思います。
これでやってみて、何かうまく行かない事が出てきたら、その時はまた個別に調べて考えましょう。