/ Pesquisa de palavra-chave do relatório do Cognos - cognos-10

Pesquisa de palavra-chave do relatório Cognos - cognos-10

Preciso fornecer uma opção de pesquisa por palavra-chave em umRelatório Cognos. Eu tenho 4 caixas de texto para palavras-chave. Eu preciso de uma solução onde eu filtrar o campo de detalhes com base em até 4 palavras-chave inseridas. A expressão de filtro que tentei é:

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)

Se um dos prompts da caixa de texto for nulo, o relatório retornará todos os registros. Então parece estar ignorando minhas declarações if. Funciona se todos os prompts de caixa de texto tiverem dados.

Felicidades.

Respostas:

0 para resposta № 1

Este filtro deve funcionar para você:

(?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)

Pode ser útil pensar em um filtro comoteste que o Cognos aplicará a cada linha. Ele manterá a linha (true) ou descartará (false). Com fontes de banco de dados relacionais, ele não funciona realmente internamente, mas funciona de fato.

O filtro primeiro verifica se o primeiroprompt tem valor e o item de dados [Detalhes] contém o valor do prompt. Em caso afirmativo, inclui a linha e passa para a próxima linha. Se não, ele se move para a próxima parte da instrução OR que testa o segundo prompt. Se o segundo prompt tiver valor e o item de dados [Details] contiver o valor do prompt, a linha será mantida e passará para o próximo. Esta linha é repetida para todos os quatro parâmetros.

Se nenhuma dessas expressões retornar true, então, e somente então, será a última parte avaliada. Essa expressão verifica se todos os prompts são NULL. Se assim for, todas as linhas são retornadas.