2016-08-08 3 views
0

Cognosレポートでキーワード検索オプションを指定する必要があります。 キーワード用の4つのテキストボックスプロンプトがあります。 入力した4つのキーワードに基づいて詳細フィールドをフィルタリングするソリューションが必要です。私が試した フィルタ式は次のとおりです。Cognosレポートキーワード検索

IF (?p_Details1? IS NOT NULL) THEN (IF (?p_Details2? IS NOT NULL) THEN (IF (?p_Details3? IS NOT NULL) THEN (IF (?p_Details4? IS NOT NULL) THEN (UPPER([DETAILS]) CONTAINS (UPPER(?p_Details1?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details2?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details3?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details4?))) ELSE (UPPER([DETAILS]) CONTAINS (UPPER(?p_Details1?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details2?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details3?)))) ELSE (UPPER([DETAILS]) CONTAINS (UPPER(?p_Details1?)) OR UPPER([DETAILS]) CONTAINS (UPPER(?p_Details2?)))) ELSE (UPPER([DETAILS]) CONTAINS (UPPER(?p_Details1?)))) ELSE (1=1)

テキストボックスのいずれかが求められた場合はnullのレポートはすべてのレコードを返します。だから私のif文を無視しているように見えます。すべてのテキストボックスプロンプトにデータがある場合に機能します。

乾杯。

答えて

0

このフィルタは、あなたのために働く必要があります。

(?p_Details1? IS NOT NULL AND UPPER([DETAILS]) CONTAINS (UPPER(?p_Details1?))) 
OR 
(?p_Details2? IS NOT NULL AND UPPER([DETAILS]) CONTAINS (UPPER(?p_Details2?))) 
OR 
(?p_Details3? IS NOT NULL AND UPPER([DETAILS]) CONTAINS (UPPER(?p_Details3?))) 
OR 
(?p_Details4? IS NOT NULL AND UPPER([DETAILS]) CONTAINS (UPPER(?p_Details4?))) 
OR 
(?p_Details1? IS NULL AND ?p_Details2? IS NULL AND ?p_Details3? IS NULL AND ?p_Details4? IS NULL) 

Cognosのは、すべての行に適用されますテストとしてフィルタを考えると便利かもしれません。行を保持(true)または破棄(false)します。リレーショナル・データベース・ソースでは、実際には内部的には機能しませんが、有効です。

フィルタは最初に最初のプロンプトに値があり、[詳細]データ項目にプロンプ​​ト値が含まれているかどうかを確認します。存在する場合は、行を含み、次の行に移動します。そうでなければ、2番目のプロンプトをテストするOR文の次の部分に移動します。 2番目のプロンプトに値があり、[詳細]データ項目にプロンプ​​ト値が含まれている場合、行は保持され、次の行に移動します。これは、4つのパラメータすべてに対して繰り返されます。

これらの式のどれもがtrueを返していない場合は、評価された最後の部分のみが返されます。この式は、すべてのプロンプトがNULLかどうかを確認します。その場合は、すべての行が戻されます。

関連する問題