Cognos プロンプト画面の表示が遅い時のチューニング

#概要
Cognos BI や Cognos Analyticsで、レポートを実行した時に、プロンプト画面の表示に非常に時間がかかるケースがありますが、その理由と、チューニング方法を解説します。

#レポート実行時の動作
プロンプトページのあるレポートを実行した時のCognosの動作として、プロンプトページのプロンプトの持つパラメーターと、レポートページでのパラメーターを整合させる動作(Reconciliation)が行われます。

整合させる動作とは、例えば以下のようなイメージのレポートがあった場合に、パラメーター：p1を例にとって考えてみます。
パラメーターには、パラメーターに入る値のカーディナリティ、単数か複数か範囲か、必須かオプションか、数値か文字か、フィルターとして用いられるか計算式で用いられるか、というような属性があります。
下記の例では、パラメーターp1は、レポートページのグラフ1、2、3で使用されています。
p1は単数か複数かを考えると、クエリー3では単数が期待され、クエリー4では複数が期待されますが、クエリー5では計算アイテムで用いられているので複数の値が入ってきてはエラーとなるため、p1は単数である必要があります。
また必須かオプションかを考えると、クエリー3ではオプションが期待されますが、クエリー4のプロンプトマクロでは自動的に必須となり、クエリー5では計算アイテムのため値が入ってくる事が必須となり、p1は必須と判定されます。
よって、このレポートでのp1は単数で必須という扱いになります。
この様に、レポート内の全てのパラメーターの性質というか属性というかを、レポート内の全てのクエリーをチェックして判定し、その後にようやくプロンプトページが表示されます。
Cognosのデフォルトの動作では、線で結ばれているクエリー1、3、4、5だけでなく、クエリー2やクエリー6も含めて全てがチェックされるため、クエリーが複雑で数が多いレポートではプロンプトページの表示が遅くなる事になります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/1e892eec-2332-c952-9824-ef27f700d264.png)


#チューニングパラメーター1 RSVP.PROMPT.RECONCILIATION
この様な全てのクエリーをチェックする動作を変更し、必要なクエリーのみのチェックでプロンプトページを表示させるパラメーターにRSVP.PROMPT.RECONCILIATIONがあります。
https://www.ibm.com/support/knowledgecenter/ja/SSEP7J_11.0.0/com.ibm.swg.ba.cognos.ug_cra.doc/t_set_query_prioritization.html

このパラメーターの設定値には、以下の4種類があります。
COMPLETE
GROUPED
CHUNKED
CHUNKED GROUPED

以下、それぞれ説明します。

**COMPLETE**
Cognosのデフォルトの動きで、前述した全クエリーをチェックする動作です。

**GROUPED**
クエリーを以下のグループに分配し、グループ1と2のクエリーのうち、プロンプトページの最初のページに必要なクエリーのチェックが終わったタイミングで、プロンプトページの最初のページを表示します。
グループ1. Filtered report queries
グループ2. Filtered prompt queries
グループ3. Unfiltered report queries
グループ4. Unfiltered prompt queries

先ほども出てきた以下の図で、クエリーとグループの紐付けを示します。
グループ1: クエリー3、4、5
グループ2: クエリー1
グループ3: クエリー6
グループ4: クエリー2
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/795b2a26-0a76-8a33-7471-e38cb2397294.png)

プロンプトページの2ページ目に進んだ際には、1ページ目にチェックしたパラメーターの情報は再利用し、2ページ目固有のパラメーターのチェックをグループ1、2で行い、完了次第2ページ目が表示される、という動作になります。

これにより、COMPLETEに比較して、プロンプトページを表示する際の、チェック対象のクエリーの数が減ります。
特に、グループ3、グループ4に所属するクエリーが多いレポートで効果的です。

**CHUNKED**
クエリーをグループ分けする事は無く、COMPLETE同様に全てのクエリーを対象にチェックを開始しますが、RSVP.PROMPT.RECONCILIATION.CHUNKSIZE（デフォルト 5）に指定した数のクエリー数を同時にチェックします。ランダムに5個のクエリーをチェックし、最初のプロンプトページに必要なチェックに満たない場合、次の5個のクエリーをチェックし、この動作を繰り返し、必要なものが揃った時に最初のプロンプトページを表示します。
COMPLETEでは、有無を言わさず全てのクエリーをチェックするまでプロンプトページは表示されませんので、必要なものが揃った時点でプロンプトページを表示するCHUNKED設定の方が高速であると言えます。

**CHUNKED GROUPED**
GROUPED同様に、グループ1と2のクエリーのみを対象とし、CHUNKED同様に5個ずつクエリーをチェックし、必要なものが揃った時点でプロンプトページを表示します。
よって、この設定が最も高速と考えられ、Cognosとしてもお勧めの設定のようです。

**「必要なものが揃った時点」の意味**
先ほどから出てくる「必要なものが揃った時点」の意味を解説しておきます。
再びこの図を使います。
COMPLETE以外の設定を選択した場合に、「必要なものが揃った時点」という概念が発生します。
このレポートの場合、「必要なもの」は、プロンプトページで登場し、レポートページに影響のあるパラメーター：p1 の属性を決定する事が「必要なもの」になります。
そしてこの判定は、レポートページに出てくるクエリーで、最初にp1がチェックされた時点で「揃った」と判定されます。
例えば、最初にクエリー3がチェックされた場合は、p1は単数でオプションとして判定され、プロンプトページが表示されます。
オプションになるので、プロンプト1で何も選択せずにレポートを実行したとすると、クエリー5の計算アイテムでp1に何も入ってこないため、レポートは実行エラーとなります。
この様な事象が発生するため、高速化のためにCOMPLETE以外を選択する場合は、レポートの構造をしっかりと理解しておきこの様なエラーが発生しないか考える事と、十分なレポートの動作テストが必要です。
最も遅いCOMPLETEがCognosのデフォルト値になっているのはこの為です。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/80117bda-01c5-8ed1-0c04-f60c4659f1a2.png)

#チューニングパラメーター2 　パラメーター情報に使用
もう一つの重要なパラメーターが、クエリーのプロパティーのクエリーのヒントにある「パラメーター情報に使用」の設定です。
このパラメーターは、RSVP.PROMPT.RECONCILIATIONの設定が「GROUPED」か「CHUNKED GROUPED」の場合のみ、効力が発効されます。
デフォルトが「いいえ」ですが、「いいえ」にしておくとチェックがされないという訳ではありません。
「はい」にした時に、最も優先的にチェックされる、という意味になります。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/07e962b7-2578-ed01-eda5-0b2c3ee4bf53.png)

これの使いどころですが、先ほどのp1のレポート実行エラーになってしまう例で、クエリー5のチェックが先に走り、「単数 & 必須」と判定されればエラーにならないので、クエリー5のプロパティで設定しておく、というのが一つの使い方です。
もう一つの使い方は、下図のように、より多くのプロンプトとパラメーターがある場合に、クエリー9の様なグラフ等の何のオブジェクトにも紐づいていないクエリーを作成し、その中にフィルターを定義してしまって、これだけチェックしてくれればレポート内の全パラメーターはOK、というようなクエリーにして、プロパティで「はい」に設定します。
これにより、多くのクエリーのチェックが回避され、プロンプトページの高速化が実現されます。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/ab2f43be-a7d0-150f-c00e-969de8d7dfb0.png)

以上で解説は終了ですが、最後に他のチューニング方法や参考資料を紹介しておきます。

#その他のチューニング
**パラメーター・キャッシュ**
パラメーターをキャッシュしておく事で、プロンプトページの表示を高速化できます。
https://www.ibm.com/support/knowledgecenter/ja/SSEP7J_11.0.0/com.ibm.swg.ba.cognos.ug_cra.doc/c_asg_parameters_cache.html

**プロンプトページの分割**
既に記載した様に、COMPLETE以外の設定であれば、最初のプロンプトページに必要なチェックが終わったらプロンプトページが表示されますので、巨大な1つのプロンプトページを作るのではなく、複数のページに分割するのも対処方法になります。

**レポートページへのプロンプトの配置＆メニュー一覧の作成**
そのままですが、プロンプトをプロンプトページに配置するのではなく、レポートページに配置する事ができれば、対処方法になります。
また、レポートページにプロンプトを配置して、実際のグラフやクロス集計等の本体ページへの遷移は、ドリルスルーで別レポートに対して行うというのも対処方法になります。

**クエリーの同時実行**
クエリーを同時実行する事でのチューニングも可能です。

*Cognos BI でレポート実行時のクエリー発行を並列化する方法*
https://qiita.com/shinyama/items/3bc80c457b0c7ccbd353


#参考資料
**Advanced Prompting and Prompt Performance Tuning**
ftp://public.dhe.ibm.com/software/dw/dm/cognos/reporting/performance_and_tuning/advanced_prompting.pdf