Cognosのレポートの中でSQLを直接記載して、テーブルからデータを取得する事が可能ですが、SQL自体にパラメーターでフィルターをかけたい場合、promptmanyを使用すると思います。
このpromptmanyを使うと、基本的にフィルターが必須になってしまうので、オプショナルにする方法を共有します。
何を言っているか、下の内容を見て頂いた方が早いと思いますのでご一読ください。
##内容
以下の様なレポートを作成しています。値のプロンプトには、データとしてSALES_PERSONを指定しています。
パラメーター名として、pSP という名称を指定しています。
リストのデータは、以下のようにSQLを直書きで取得しています。
この時、以下のようにpromptmanyでフィルターをかけています。
レポートを実行すると、以下のように「データなし」になります。
これはpromptmanyが必須になってしまっているためです。
フィルターをオプションにしたい場合、以下のようにpromprmanyを記載します。
select * from XXXXX.SALES where SALES_PERSON in #promptmany('pSP','',"'NoSelect'")# or 'NoSelect' = #promptmany('pSP','',"'NoSelect'")#
実行すると、このようにオプショナルフィルターのため、全てのデータが初期表示されます。
とてもSpecificな内容ですが、実際のプロジェクトで困って調べてやっと見つかったやり方なので、どこかで役に立つかもと思い投稿しました。
#複数選択の場合(2021/12/1追記)
すいません、前述の書き方だと複数選択の場合エラーになりました。
複数選択の場合、正しい書き方は以下ですね。
()が必要だし、= ではなく in ですね。
select * from XXXXX.SALES where SALES_PERSON in ( #promptmany('pSP','',"'NoSelect'")# ) or 'NoSelect' in ( #promptmany('pSP','',"'NoSelect'")# )
#Likeで複数検索を前後方一致したい場合(2021/12/6追記)
やってみたら出来たというレベルで恐縮ですが、一応おいておきます。
splitの区切り文字は', ' (カンマ+ブランク)ですが、これはDb2でテストしているからかも知れません。ご使用のRDBMS側でSQLキャッチして区切り文字を何にすべきかは確認した方が良いです。
select * from XXXXX.SALES where SALES_PERSON like #join('%'' or SALES_PERSON like ''%',split(', ',sq(promptmany('pSP','token',"'NoSelect'",'%','','%'))))# or 'NoSelect' in ( #promptmany('pSP','',"'NoSelect'")# )