2016-08-08 2 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). 관계형 데이터베이스 소스의 경우 실제로는 내부적으로는 작동하지 않지만 실제로는 작동합니다.

필터는 먼저 첫 번째 프롬프트에 값이 있고 [세부 사항] 데이터 항목에 프롬프트 값이 들어 있는지 확인합니다. 포함되어 있으면 행을 포함하고 다음 행으로 이동합니다. 그렇지 않으면 두 번째 프롬프트를 테스트하는 OR 문의 다음 부분으로 이동합니다. 두 번째 프롬프트에 값이 있고 [Details] 데이터 항목에 프롬프트 값이 있으면 행이 보존되고 다음 행으로 이동합니다. 이것은 네 개의 매개 변수 모두에 대해 반복됩니다.

해당 표현식 중 어느 것도 true를 반환하지 않으면 평가 된 마지막 부분 만 반환됩니다. 이 식은 모든 프롬프트가 NULL인지 확인합니다. 그렇다면, 모든 행이 리턴됩니다.