Cognos BI パフォーマンスチューニング情報 IOD2012

Cognos BIでのパフォーマンスチューニングのネタで、youtubeで公開されている動画の抜粋です。

IOD2012で、Armin Kamalという、Cognosの有名なデベロッパーが発表したものです。

なかなかマニアックな情報もあり、上級者向けの内容となっています。

とても良い情報満載の動画なので、私の理解の範囲でサマリーを記載しますので、興味を持たれた方は是非全編を見てみて下さい。

##Part1 プロジェクト全体的な話

https://www.youtube.com/watch?v=OiRvUrUTs-c

基本的な情報が主。

データソースとして、OLAPとかStar Schemaを使うのは大事というメッセージ。

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/cc638557-a2d4-d42f-9d08-9ad43233b18b.png)


##Part2 Framework Manager

https://www.youtube.com/watch?v=QiIIPlaCMOU

・Cognos SQLとNative SQLを見る

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/6948b362-b286-6b70-b92d-c472a3ce467d.png)


こんな風に、Native SQLが2回 selectしていると、Local Processingが発生していてパフォーマンス上まずい、というしるし。

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/ebd76a14-f833-756d-0aa8-e56fcef9c4a4.png)


RDBMSでサポートされていない関数を使っていると、Local Processingが発生する。

簡単な見つけ方。
FMの項目のプロパティで、Query Processing = Database Onlyにして

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/ab1e9448-1bbd-9dcd-0616-145b01cef8f4.png)


実行してみると、エラーになる。

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/df6552b6-35d5-d1ed-e36c-cf35a6860289.png)


・ Query Informationの応答をみる

![image](https://qiita-image-store.s3.amazonaws.com/0/147246/941c805d-a54a-767b-9b4f-ab5fe329ca5b.png)


Retrieve from Databaseになっていると良くないらしい。
Query Subjectを編集するとか、フィルターかけるとかしていると、こうなる。

・Prompt Info プロパティ
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/8192f75e-15f6-06b1-a5fd-eece4385f68e.png)

   Filter Item ReferenceはQuery Studioとか自由分析で使われるらしい
   索引の張ってる列を指定しておくと良い。
　⇒CWAとか、自由分析に使えそう。


##Part3 Report Studio

https://www.youtube.com/watch?v=zLS26-zKsCI

・フィルターは索引が付いている列を指定しましょう。名称ではなくキーとかコードとか。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/254a47d3-7459-3d47-c074-afaed1b7e73e.png)

・Report Studioのサプレッション機能とFilter関数
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/9d45bc32-d39e-bdb9-37c4-0bf53310c648.png)


サプレッションでNull行を削除した場合
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/c26b5a24-2768-055b-fe4b-de6fabfc119e.png)


MDXでNullを削除するためのフィルターが無い。Local Processing。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/a196f10e-6973-6888-fec2-01e24c08ce74.png)


Filter関数でNull行削除の場合。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/790a9015-6114-8a9c-e8b1-ad25858eadd5.png)


Filterの記述がMDXに入っている。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/6d5b3a4b-a022-ce8a-9eac-19a2381200ba.png)


・SlicerとMemberの違い

Slicerを置いてみる
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/70c264ad-b71f-fd2c-9e07-704074d56e56.png)

実行すると、Slicerの結果Nullとなった列も表示される。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/51e3a629-14c2-2be0-bbd3-01fa435ac8e8.png)

サプレッションでの消去が必要
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/b1468d00-b1ed-4894-2ae1-d2fad4565c5a.png)

Slicerではなく、Memberを置くプロンプトを作成。
⇒サプレッションはいらないので速い
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/523a0cd7-5681-5343-f01e-c9191cd3226c.png)


##Part4  Report Studio続き

https://www.youtube.com/watch?v=XbSbXoxxzeA


親となるクエリーを一個作成し、子クエリーはキャッシュを使って高速化。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/74784cfe-2219-d4f4-6ae6-484a52d757d8.png)


・DQMモードでクエリーが分割されてしまう
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/a010d871-64ce-8dd6-3c44-d209896836f8.png)

こんなレポート
紺色はクロス集計スペーサー。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/60776ff9-5b99-3d1c-fd4d-193c272daa84.png)


実行イメージ
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/08b46a01-cf50-78b1-94b6-de8ca0b01025.png)


投げられるクエリーは3つに分割されている
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/e44bc3e6-d303-d150-7624-cf87925352de.png)


修正版。Sales TargetとRevenueで、階層を同じ2段階で配置するのがポイント。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/bfadaee7-a100-cb53-6312-5f5eee5caa44.png)

クエリーは一個に集約される。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/80e3e060-9e9f-2362-2e53-32bdc4d7d39c.png)


最終的にクロス集計スペーサーは、クエリー計算をNULLにして、プロパティーでクラスを削除したものを使用すると同じようなものに見える。でもクエリーは一個。⇒Youtubeで確認しましょう。


・まとめ的な話

矢印で示しているところで、SQLに｛｝や｛｛｝｝があると、キャッシュやCognos SQL Optimizerをバイパスしてしまうので良くない、という話なので、SQLにこれがあると注意。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/663fa304-95c1-b8aa-3fda-6239fc080e17.png)


##Part5  Trouble Shooting

https://www.youtube.com/watch?v=c170hFlmdWA

実際にチューニングやってる例

Lineageを確認したりする。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/964b1c59-66b5-3800-315a-3ad25ede8625.png)

デターミナントをきちんと作成するのも、パフォーマンス上重要。
![image](https://qiita-image-store.s3.amazonaws.com/0/147246/89259c5a-f61d-bf60-04dd-902e37b86b50.png)

youtubeの動画にはこれ以外の情報もありますので、興味を持たれたら是非見てみて下さい！