Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Você pode tentar usar a função "Alt"
Alt(COUNT("Processo Analisado???"),0) AS QT_PROC_6_MESES
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 ))
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.
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.
Tornou nulas todas as linhas em ambas as colunas.
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.