LoginSignup
0
0

More than 5 years have passed since last update.

Cognos Analytics で逆スタースキーマモデルの実践 - ①基本的なモデルの動作検証

Last updated at Posted at 2018-08-23

概要

とあるCognos Analyticsのプロジェクトで、逆スタースキーマモデルを実践してみましたので、学んだ事を何回かに分けて投稿しておきます。
要件として、以下の様な要件があっため、逆スタースキーマモデルを選択しました。
① データベースのテーブル構造として、ファクトデータが正規化された多数の表に分散していて、分析向けのデータウェアハウスのテーブル構造ではなく、オペレーショナルモデル構造であった。
② ETLを行いファクト表をまとめ、データウェアハウスを構築していくという要員も時間も無かった
③ 定型レポートだけでなく、エンドユーザーによる自由分析も要件として存在した

逆スタースキーマモデルとは

逆スタースキーマモデルの前に、スタースキーマモデルのおさらいです。
スタースキーマモデルとは、ラルフ・キンボールが提唱したBIのデータ分析向けのモデルで、こんな感じに巨大な1つのファクト表の周りを複数のディメンション表(マスター表)が取り囲むモデルで、通常のCognosのプロジェクトでは、できる限りこのモデルになるように意識して、テーブル構造の設計を行います。
image.png

それに対して、逆スタースキーマモデルとは、1つのディメンション表の回りを、複数のファクト表が囲むモデルになります。
要件にあった、オペレーショナルモデルでの多数のファクト表があるテーブル構造での分析を行うため、このモデルを選択しました。
image.png

ちなみに、ディメンション表が複数ある場合、こういうモデルになり、Customer Type Dimensionの様な、個々のファクトにユニークなディメンション(Customer Typeデータ列は、Bad Debt Fact表にしか存在せず、他のファクト表には存在しない状態)は、個々のファクト表とのみリレーションを張ります。
Time Dimensionの様な、複数のファクトで使用されるディメンションは、青枠の様にエリアスを作成して、各ファクト表とリレーションを張ります。
004.JPG

参考:THE REVERSE STAR SCHEMA
http://www.digitalviper.co.uk/documents/The_Reverse_Star_Schema_v2.1.pdf

とりあえず検証してみてわかった事

まず、こんな感じの簡単なテーブル構造を作成して検証してみました。
DIMA1表が逆スタースキーマの中心で、FACTA1、FACTA2、FACTA3表が回りを取り囲みます。
FACTA1とFACTA2にのみ保持されているYEAR列を持つDIMA2表は、エリアスを作成しFACTA2表に接続しています。
image.png

DIMA1.PROD、FACTA1.SALES、FACTA2.PLAN、FACTA3.STOCK をリストに配置
問題なく正常な値が表示されました。
001.JPG

DIMA1.PROD、FACTA1.SALES、FACTA2.PLAN、FACTA3.STOCK をリストに配置し、DIMA2.YEAR='2017'でフィルター
DIMA2と接続されているFACTA1表のSALESに対しては、しっかりとフィルターが効きますが、FACTA2表のPLANに対してはフィルターが効かない事が分かります。
002.JPG

DIMA1.PROD、FACTA1.SALES、FACTA2.PLAN、FACTA3.STOCK をリストに配置し、DIMA2.YEAR='2017'でフィルター、DIMA2(Alias).YEAR='2017'でフィルター
DIMA2のエリアスのYEARの方からもフィルターを設定すると、PLANに対してもフィルターがかかります。
003.JPG

DIMA1.PROD、FACTA2.PLAN、FACTA3.STOCK をリストに配置し、DIMA2.YEAR='2017'でフィルター
以下のエラーメッセージで、エラーになります。
フィルターのDIMA2から接続されているFACTA1のデータがリストのクエリーに存在しないため、こういう組み合わせはNGのようです。
XQE-PLN-0084 SQL を生成できません。フィルター条件 [DatabaseView].[DIMA2].[YEAR]='2017' を、ファクト射影を含まない次のファクト・ストリームに適用できませんでした: (DIMA2)。

この時点での問題点

周りに配置したディメンション表のデータをフィルター等で使用する場合は、どのファクト表とリレーションがあるのか、ファクト表のデータがクエリーに入っているのか、というのをしっかり意識してレポートを作る必要があります。
定型レポートであれば、そこを理解している開発者が行えば良いですが、自由分析が要件にあるので、エンドユーザーにこれを理解して使ってもらうのは無理ですね。
さてどうするか、というのは第②回に投稿させていただきます!

目次

第①回:基本的なモデルの動作検証
https://qiita.com/shinyama/items/0567425a4a47ad7d6efa

第②回:自由分析への対応
https://qiita.com/shinyama/items/5bb75bae2e67d6e9cac0

第③回:属性データのモデル取り込み
https://qiita.com/shinyama/items/b66d59a92a58533f7c2b

第④回:パフォーマンス・チューニング
https://qiita.com/shinyama/items/b4b28844b4235db70032

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0