LoginSignup
1
1

More than 5 years have passed since last update.

Cognos Framework ManagerのSQLを生成オプションの意味

Posted at

概要

これまで、あまり設定として意識していなかった、Cognos Framework Managerの、クエリーサブジェクトのSQL設定のオプションで、以下の赤枠の「SQLを生成」で「最小化」と「ビューとして」の意味を調べる機会がありましたので、自分への備忘録の意味も込めて投稿します。
001.PNG

それぞれの設定の意味

当然ながらここの設定を変更すると、レポート実行時にCognosからデータソースに発行されるSQLが変化します。
SQLの変化は、複数のテーブルを結合する場合に現れます。
※ちなみに「最小化」がデフォルトです。

マニュアルの記載を見ると、
Changing how the SQL is generated
https://www.ibm.com/support/knowledgecenter/SSEP7J_10.2.2/com.ibm.swg.ba.cognos.ug_fm.10.2.2.doc/t_change_sql_generation.html#change_sql_generation

「最小化」の場合、以下のようなSQLが発行されていたものが、

select 
CONVERSIONRATE.COUNTRYCODE as COUNTRYCODE,
COUNTRY.EUROINUSESINCE as EUROINUSESINCE 
from
"2 - GOSales1 - OLE-DB".GOSALES1.dbo.CONVERSIONRATE CONVERSIONRATE,
"2 - GOSales1 - OLE-DB".GOSALES1.dbo.COUNTRY COUNTRY 
where
(COUNTRY.SALESCOUNTRYCODE = CONVERSIONRATE.COUNTRYCODE)

「ビューとして」にすると、以下のようなSQLになるそうです。
最小化で発行されていたSQLを()で囲み、New_Query_Subjectとして、最終的にNew_Query_Subjectからselectしています。

select 
New_Query_Subject.COUNTRYCODE as COUNTRYCODE,
New_Query_Subject.EUROINUSESINCE as EUROINUSESINCE
from
(select 
    CONVERSIONRATE.COUNTRYCODE as COUNTRYCODE,  COUNTRY.EUROINUSESINCE as EUROINUSESINCE
from
    "2 - GOSales1 - OLE-DB".GOSALES1.dbo.CONVERSIONRATE     CONVERSIONRATE,
    "2 - GOSales1 - OLE-DB".GOSALES1.dbo.COUNTRY COUNTRY 
where
    (COUNTRY.SALESCOUNTRYCODE = CONVERSIONRATE.COUNTRYCODE)
    ) New_Query_Subject 

結果セットはどちらも変わらないですが、パフォーマンス面では違いがあります。

「最小化」が有利な条件はこんなパターンで、結合するデータがきっちりマッチする場合で、こういう場合に大量の行が処理対象となると、「最小化」は威力を発揮するようです。
002.PNG

しかしながら、下のような感じに結合キーがしっかり一致しない場合、結果セットに追加の行がどんどん増えてしまうそうです。
「ビューとして」に設定すると、この追加行が増える状態は防げるようです。
「最小化」の場合とで、レポート上の表示に違いが出てはいけないので、これらの行はSQLの結果セットとして一旦取得してきてしまって、その後Cognos上で削除されるのだとは思いますが、一旦取ってきてしまう時点で、パフォーマンス上はマイナスになるのかなと思います。
より多くの表を結合する程に、この状態になりやすいと思いますので、そういう大量の表を結合する環境では「ビューとして」の使用も検討してみても良いかも知れません。
003.PNG

「最小化」に設定してても、「ビューとして」と扱われてしまうパターン

ここら辺のTechnoteに、「最小化」に設定してても、「ビューとして」と扱われてしまう条件が載っています。

What overrides the Minimized setting in the SQL Generation type for a Framework Manager model query subject
http://www-01.ibm.com/support/docview.wss?uid=swg21993589

SQL Not Minimized for Items in a Model Query Subject that is joined with another Query Subject
http://www-01.ibm.com/support/docview.wss?uid=swg21342107

まず言われているのが、「モデルのクエリー・サブジェクト」間でリレーションを貼ってしまっている場合です。
クエリーサブジェクトを作成する時の、こちらで「モデル」を選択している場合ですね。
005.PNG

CognosのGreat Outdoor Salesサンプルで言うところの、「ビジネスビュー」でリレーションを貼ってはいけませんという事です。リレーションはあくまで「データベースビュー」で貼るのが基本と教わったかと思いますが、これも理由の一つですね。
004.PNG

他に言及されているのが、
- filters, calculations, parameterized SQL, are added to Data Source Query Subjects
- SQL in a Data Source Query Subject is altered
なのでデータベースビューの、データ・ソースのクエリーサブジェクトで、フィルターや計算式、SQLの書き換えなどを行った際に、「ビューとして」の動きに強制的になってしまうようです。

これをやっている環境って結構あるように思いますので、パフォーマンスが出なくてモデルを見直す時に、「データベースビュー」で、何かしら不要なカスタマイズを入れてしまっていないか、見直すのも有効な手段になりそうです。

1
1
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
1
1