1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cognos レポートでSQL直書き時に使用するpromptmanyをオプションにする方法

Last updated at Posted at 2017-02-10

Cognosのレポートの中でSQLを直接記載して、テーブルからデータを取得する事が可能ですが、SQL自体にパラメーターでフィルターをかけたい場合、promptmanyを使用すると思います。
このpromptmanyを使うと、基本的にフィルターが必須になってしまうので、オプショナルにする方法を共有します。

何を言っているか、下の内容を見て頂いた方が早いと思いますのでご一読ください。

##内容
以下の様なレポートを作成しています。値のプロンプトには、データとしてSALES_PERSONを指定しています。
パラメーター名として、pSP という名称を指定しています。
001.PNG

リストのデータは、以下のようにSQLを直書きで取得しています。
この時、以下のようにpromptmanyでフィルターをかけています。
002.PNG

レポートを実行すると、以下のように「データなし」になります。
これはpromptmanyが必須になってしまっているためです。
003.PNG

プロンプトを選択すると表示ができます。
004.PNG

フィルターをオプションにしたい場合、以下のようにpromprmanyを記載します。
select * from XXXXX.SALES where SALES_PERSON in #promptmany('pSP','',"'NoSelect'")# or 'NoSelect' = #promptmany('pSP','',"'NoSelect'")#
005.PNG

実行すると、このようにオプショナルフィルターのため、全てのデータが初期表示されます。
006.PNG

とても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'")# )
1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?