Cognosで単数指定のテキストのプロンプトにカンマ区切りで入力した値で複数絞込みを行う


はじめに

単数選択で指定しているテキストのプロンプトにカンマ区切りで値を入力し、複数の項目で絞り込むためのフィルタ式の紹介です。

IBM Supportから公開されている文書にすべて記載されているのですが、よくある要件であることやクエリマクロの使用例として改めて紹介したいと思います。
How to filter a report using a comma-separated string entered in a text box

実行結果

やりたいことは次の通りです。

テキストのプロンプトにカンマ区切りで入力した、「991」と「992」の製品ラインコードでリストが見事に絞り込まれています、

実現方法

リストのクエリーに追加するフィルター式の記述方法が肝となります。
2つのパターンで紹介されているので、ここでも2パターン紹介します。

※検証時のレポートでは下記のように指定しています。環境に合わせて置換してください。
フィルター対象のデータアイテム = [製品ラインコード]
テキストのプロンプトのパラメータ名 = pLineCD

パターン1

フィルター式_パターン1
[製品ラインコード] in (#csv( split(',', prompt('pLineCD', 'token') ) )#)

パターン2

フィルター式_パターン2
((#sq(prompt('pLineCD', 'token', 'testValue'))# <> 'testValue') and 
[製品ライン コード] in (#csv( split(',', substitute(' ','', prompt('pLineCD', 'token')) ) )#) ) 
or ((#sq(prompt('pLineCD', 'token', 'testValue'))# = 'testValue'))

クエリマクロを使用してプロンプトから渡された値をカンマで区切って式に渡しているのがポイントです。
プロンプトが単数で指定されているのに対して、フィルター式内では、IN句を使って複数絞込みで受けているところもポイントです。

最後に

パターン1とパターン2が紹介されていますが、パターン1の式だと","の後に空白スペースが入っているとレポート実行エラーとなってしまいます。
入力したい値にもよりますが個人的にはパターン2がオススメかとも思います。