1
0

More than 5 years have passed since last update.

CognosでCQMからDQMに変更した際、複数選択ができなくなった場合の対処法

Last updated at Posted at 2018-02-05

はじめに

CQMで作成したレポートをDQMに移行した場合に発生する事象の一つとして、複数選択を設定していたプロンプトが単数選択しかできなくなってしまうというものがあります。

基本的には複数選択を設定したプロンプトが持つパラメータを使用したフィルター式の記述方法によるものがですが、いくつかの原因と対処法がありますのでご紹介します。

1. 式条件

元のフィルター式が下記の場合

[データアイテム1] = ?パラメーター1?

"="を使用している場合は、"in"に修正します。

【修正案】
[データーアイテム1] in (?パラメーター1?)

パラメータ1が日付の範囲指定をするような場合は、"in_range"に修正します。

【修正案】
[データーアイテム1] in_range ?パラメーター1?

2. 左辺配置

元のフィルター式が下記の場合

?パラメーター1? in ('AAA','BBB','CCC')

上記のフィルター式のみで定義されるよりも、下記のように条件式を組み合わせて、パラメーター1に入ってくる値によって絞込みを行う対象を変化させるような使用方法のほうがイメージが合うかもしれません。

((?パラメーター1? in ('AAA','BBB','CCC')) AND ([データアイテム1] = '新規'))
OR
((?パラメーター1? in ('DDD','EEE')) AND ([データアイテム1] = '継続'))

フィルター式の左辺側にパラメーター名が記述された式を定義するとレポート実行時に単数のものと評価され、プロンプトは単数選択しかできなくなってしまいます。
この場合は、式の右辺側にパラメーターを持ってきます。

【修正案】
(('AAA' in (?パラメータ1?)) OR
('BBB' in (?パラメータ1?)) OR
('CCC' in (?パラメータ1?))) AND ([データアイテム1] = '新規'))
OR
(('DDD' in (?パラメータ1?)) OR
('EEE' in (?パラメータ1?))) AND ([データアイテム1] = '継続'))

少し強引で、項目数が非常に多くなると採用するのに厳しい案ですが、これでプロンプトとしては複数選択が可能になります。

3. is Null、is not null 判定

一番厄介なのが#2の発展で、パラメータに値が入っているかどうかを判定するフィルター式の場合です。

?パラメーター1 is not Null
AND
[データアイテム1] = '継続'

DQMでは、この "is not Null" や、"is Null" と言った表現もレポート実行の際にパラメーターを単数のものとして評価してしまうみたいです。
単純に Null in (?パラメーター1?) のように前述の修正方法を適用させることはできないので、工夫が必要になります。

この記述をしている際の修正方法としては下記のようになります。

【修正案】
([データアイテム1] = '継続')
OR
(('' in (?パラメーター1?)) AND ([データアイテム1] <> '継続'))

ここでのポイントは、3行目の記述となります。

パラメーターが入っていない(プロンプトで選択されていない)場合

1行目で結果セットのうち、[データアイテム1]が"継続"の一部分をとってきます。
3行目では、パラメーター1がオプションで選択なしなので、結果セットの全件を取得し、そのうち「データアイテム1]が"継続"ではない一部分を取得します。
式全体としては、1行目 OR 3行目 の結果となるので、結果として全件の取得が可能です。

パラメーターが入っている(プロンプトで選択されている)場合

こちらの1行目は先ほどと同じく、結果セットのうち、[データアイテム1]が"継続"の一部分をとってきます。
3行目では、パラメーター1に値が入ってくるので、前半部分で取得できる項目がなく、結果3行目としては取得0件になります。あえて、取得結果が0件になるように工夫してあげます。
そうすることでフィルター式の結果としては、1行目で絞り込まれた結果のみを取得することが可能となります。

これで、パラメーター1に値が入っている(is not Null)か入っていないか(is Null)で絞込みを実施するかを制御することが可能となります。

※ここでのフィルター式はすべて"オプション"の設定がされている前提となります。

最後に

実際には、単一のクエリーで完結せずクエリー間のコンポーネント参照を実施している場合は必ずしもこの限りではなかったり、場合によっては交差結合を許可し対応する必要がある場合もあります。
ただ、その場合はレポート実行のパフォーマンスに与える影響をよく見極めて修正する必要があります。

CQMからDQMへの変更ではこういったレポート定義の修正も発生する可能性があることを事前に把握しておくが重要ですね。

========================================================
(参考情報)
CognosでCQMからDQMに切り替えた時、どこを検証すればよいか

1
0
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
0