Cognosでプロンプトマクロを使用して自由に記述したフィルター条件でレポートを実行する


はじめに

レポート実行時のフィルター条件に関する要件が複雑で、レポートを実行する度や実行するユーザー毎に使用するパラメータの個数が変化するようなレポートでは、事前に何個のフィルター式やパラメータ入力のためのプロンプトを定義しておけばいいかわからない場合があったりします。
そんな時、クエリーマクロを使用することで、柔軟にフィルター条件を指定することができますのでご紹介します。

実装方法

サンプルレポートとしてテキストのプロンプト、プロンプトボタン、リストで構成された簡単なレポートを作成します。

テキストのプロンプトのプロパティです。
ここではプロンプトを「必須」を「いいえ」に変更し、パラメータ名 'pPram' を設定しています。

リストが使用するクエリーの設定です。
クエリーマクロのprompt関数を使用したフィルター式を追加しています。
「使用方法」は「オプション」に変更しています。

フィルター式の内容は下記の通りです。

フィルター式
# prompt ('pPram','TOKEN','1=1') #

prompt関数の引数は順番に、("パラメータ名","データタイプ","デフォルトの値")となっています。
データタイプとして'TOKEN'を使用することで、式をそのままSQLに引き継ぐことができるようになるそうです。これがないとフィルター式の検証でエラーになりレポート作成ができません。

実行例

上記レポートの実行例です。
テキストのプロンプトで記述する絞込み条件はCognosのフィルター式で定義する形式に揃える必要があります。

例1:1項目を単数で絞る

一番シンプルな例です。リスト上にある項目を単数で絞り込みます。
[製品ライン] = 'ゴルフ用品'

例2:条件を複雑にして絞り込む

例1に比べて絞り込み条件が複雑になっています。
([製品ライン] = 'ゴルフ用品' AND [製品タイプ] in ('アイアン','ウッド')) OR ([製品タイプ] in ('ナイフ','ランタン'))

製品タイプに関しては違った値で2回登場することになるので、本来であれば別々のパラメータ名を持つ製品タイプ用のプロンプトが二つ必要になります。
同じ項目が何回登場するかわからないような場合でも柔軟に対応することが可能になります。

例3:クエリーに無いデータアイテムで絞る

リストやクエリーには登場しない項目でもパッケージに含まれていればフィルター式で定義する時と同じように絞り込むことが可能になります。

[販売 (クエリー)].[製品].[製品ライン コード] = 991

最後に

実際にレポートの運用をする際、エンドユーザーがこの形式でフィルタ条件を入力してレポートを実行するのはハードルが高くなることは予想されます。
プロンプトを隠しプロンプトなどにし外部からパラメータを連携するや、絞り込み条件を保存したDBから値を取得しパラメータとしてセットするなどの設計が使い勝手かよさそうです。

おまけ

デフォルトで値を表示したくない場合は、prompt関数のデフォルト値を'1=0'などにしておくと「データなし」と表示させることが可能です。