Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
msludo
Contributor III
Contributor III

Como converter valor NULO derivado de COUNT() para ZERO???

Boa tarde,

Eu preciso obter a relação de jurisdicionados que não tiveram processos analisados nos últimos 6 ou 12 meses. Se não teve processo analisado nos últimos 6 meses, recebe pontuação 5, se não teve nos últimos 12 meses, recebe 10. Para isso, eu obtive a quantidade de processos analisados em cada período:

[PROCESSO ANALISADO_6MESES]:
LOAD
ID_JURISDICIONADO,
COUNT("Processo Analisado???") AS QT_PROC_6_MESES
RESIDENT [PROCESSOS]
WHERE ("Data Criação Tarefa" >= AddMonths(today(),-6) and "Data Criação Tarefa" < today() )
AND WildMatch(UPPER("Processo Analisado???"), 'SIM')
GROUP BY ID_JURISDICIONADO ;

INNER JOIN

[PROCESSO ANALISADO_12MESES]:
LOAD
ID_JURISDICIONADO,
COUNT("Processo Analisado???") AS QT_PROC_12_MESES
RESIDENT [PROCESSOS]
WHERE ("Data Criação Tarefa" >= AddMonths(today(),-12) and "Data Criação Tarefa" < today() )
AND WildMatch(UPPER("Processo Analisado???"), 'SIM')
GROUP BY ID_JURISDICIONADO ;

Depois iria tentar isso:

[teste]:
LOAD *,
If( (QT_PROC_6_MESES = 0 and QT_PROC_12_MESES =0), '10',
if ( (QT_PROC_6_MESES = 0 and QT_PROC_12_MESES > 0), '5','TEVE PROCESSO ANALISADO'
)
) as TEMPO_SEM_ANALISE
resident [PROCESSO ANALISADO];

Porém, não sei como converter o valor nulo obtido na primeira parte do script para zero e assim tentar a segunda parte. Ou seja, como converter nulo derivado de um count() para zero?

Em anexo, está a tabela resultante

 

6 Replies
RafaMartins
Creator II
Creator II

Você pode tentar usar a função "Alt"

Alt(COUNT("Processo Analisado???"),0) AS QT_PROC_6_MESES

TiagoCardoso
Creator II
Creator II

Boa tarde, você pode usar a função ISNULL().

Sintaxe:

     ISNULL(  sua_expressão, 0 )
ou
    ISNULL( seu_campo_com_valor, 0 )

Caso sua expressão ou seu campo seja nulo, será substituído por zero.

     ISNULL( COUNT("Processo Analisado???"),0 )

--------EDIT--------

ISNULL(COUNT("Processo Analisado???") ,0) 
-
Pode usar o IF também, mas receio não ser tão performático.

COUNT( IF ("Processo Analisado???" <> NULL, "Processo Analisado???", 0 ))

msludo
Contributor III
Contributor III
Author

Boa tarde,

 

Não funcionou, coloquei do jeito q vc escreveu, e também assim:

LOAD *,


If(len(trim(QT_PROC_6_MESES))= 0 or QT_PROC_6_MESES='NULL' or QT_PROC_6_MESES='-', 'eh nulo', QT_PROC_6_MESES ) as ValueNullConv,


Alt(QT_PROC_6_MESES,0) as alt


resident [PROCESSO ANALISADO];

Parece que o Qlik não reconhece o resultado da expressão numerica COUNT() como nulo, o que chega a ser um absurdo, pq isso dá pra tratar com SQL em qualquer BD. E eu preciso fazer isso no Qlik.

 

 

TiagoCardoso
Creator II
Creator II

Outra possível solução para você.
-
[PROCESSO_ANALISADO]:
LOAD
ID_JURISDICIONADO,
COUNT("Processo Analisado???") AS QT_PROC_6_MESES,
0 AS QT_PROC_12_MESES 
RESIDENT [PROCESSOS]
WHERE ("Data Criação Tarefa" >= AddMonths(today(),-6) and "Data Criação Tarefa" < today() )
AND WildMatch(UPPER("Processo Analisado???"), 'SIM')
GROUP BY ID_JURISDICIONADO ;

INNER JOIN

[PROCESSO_ANALISADO]:
LOAD
ID_JURISDICIONADO,
COUNT("Processo Analisado???") AS QT_PROC_12_MESES,
0 AS QT_PROC_6_MESES
RESIDENT [PROCESSOS]
WHERE ("Data Criação Tarefa" >= AddMonths(today(),-12) and "Data Criação Tarefa" < today() )
AND WildMatch(UPPER("Processo Analisado???"), 'SIM')
GROUP BY ID_JURISDICIONADO ;

 

Tem uma outra maneira de fazer isso via carga, mas seguindo sua linha de raciocínio isto vai resolver.
Apenas 'CHUMBANDO' como 0 uma informação que não existe na tabela para que não fique como NULL após o JOIN.
Caso prefira tratar de outra maneira, pode fazer com o ISNULL.

msludo
Contributor III
Contributor III
Author

Tornou nulas todas as linhas em ambas as colunas.

TiagoCardoso
Creator II
Creator II

Caso você tenha criado essas duas tabelas apenas para fazer uma separação para assim poder inserir os campos na tabela, sugiro tentar fazer os cálculos como fórmulas na tabela, ou seja, deixar os cálculos para a aplicação e não para o script, sem ficar dando LOAD resident a fim de criar campos.

Dá para arrumar o script também,  tem bastante coisa para sugerir-te, mas primeiramente gostaria de ver como você fez o seu e se possível disponibilizar um sample para fazermos o que pede e dar uma devolutiva mais acertada.

gera uma tabela com dados aleatórios para simularmos o que precisa e devolvermos um script que possa reaproveitar.