Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

USANDO WHERE NOT EXIST?

Bom dia !

Há algum tempo estou tentando resolver um probleminha com meu script...

Tenho a seguinte situação:

•Tenho um calendário gerado a partir do script.

•Estou relacionando o mesmo, a partir da quantidade de horas trabalhadas por dia.

•Se o mesmo tiver menos que Xhoras trabalhadas, ele mostra 0, se for maior mostra 1.

Ai vem o grande problema.... Quando tenho um dia que não está relacionado o campo que mostra 0 ou 1, fica NULO.

Preciso que ele mostre 0, alguém tem alguma ideia ? Pensei em usar o WHERE EXIST/ NOT EXIST, porém já quebrei a cabeça e ele nunca funciona.

Segue esse "pedaço" do script:

LEFT JOIN(Calendario)

LOAD

  DATA_DE_INICIO_Calend as Calen_Data,

  QtdHoras_Calend,

  if(QtdHoras_Calend<10,0,1) as Calend_Hove_Trabalho;

  LOAD

  DATA_DE_INICIO_Calend,

  sum(QtdHoras_Calend) as QtdHoras_Calend

  Group By DATA_DE_INICIO_Calend;

  LOAD

  DATE(DIA_INICIO & '/' & Num(MES_INICIO) & '/' & ANO_INICIO,'DD/MM/YYYY') as DATA_DE_INICIO_Calend,

  QtdHoras as QtdHoras_Calend

  Resident Apontamentos;

Fico agradecido se alguém poder me ajudar.

Abraços !

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Bom dia !

Obrigado pela ajuda de todos, após confrontar as respostas uteis acabei conseguindo resolver da seguinte forma:

Calendario_x:

LOAD *,

  If(Calend_Hove_Trabalho=1,1,0) as Calend_Hove_Trabalho_x

Resident Calendario;

DROP Table Calendario;

RENAME Table Calendario_x to Calendario;

DROP Field Calend_Hove_Trabalho;

RENAME Field Calend_Hove_Trabalho_x to Calend_Hove_Trabalho;

Mais uma vez, obrigado por terem respondido !

Abraços.

View solution in original post

10 Replies
fernando_tonial
Employee
Employee

Olá Matheus,

Seja as duas primeira linhas desse script, coloque assim e veja se lhe atende.

NullAsValue Calend_Hove_Trabalho;

Set NullValue = 0;

LEFT JOIN(Calendario)

LOAD

  DATA_DE_INICIO_Calend as Calen_Data,

  QtdHoras_Calend,

  if(QtdHoras_Calend<10,0,1) as Calend_Hove_Trabalho;

LOAD

  DATA_DE_INICIO_Calend,

  sum(QtdHoras_Calend) as QtdHoras_Calend

  Group By DATA_DE_INICIO_Calend;

LOAD

  DATE(DIA_INICIO & '/' & Num(MES_INICIO) & '/' & ANO_INICIO,'DD/MM/YYYY') as DATA_DE_INICIO_Calend,

  QtdHoras as QtdHoras_Calend

Resident Apontamentos;


Qlikfique-se

Tonial.

Don't Worry, be Qlik.
Anonymous
Not applicable
Author

Bom dia Tonial !

Testei aqui, porém não funcionou.

Será que tens alguma outra ideia ?

Obrigado.

Clever_Anjos
Employee
Employee

Depois do seu script inclua

left join (Calendario) LOAD

Calen_Data, 

alt( Calend_Hove_Trabalho,0) as Calend_Hove_Trabalho

resident Calendário;

Anonymous
Not applicable
Author

Boa tarde Clever !

Coloquei, e não funcionou também =/

O que faz exatamente o comando 'alt' ?

Obrigado.

Abraços.

MarcoARaymundo
Creator III
Creator III

Na sua expressão que traz 0 ou 1 coloque assim:

If(IsNull(EXPRESSAO), 0, EXPRESSAO)

aderlanrm
Partner - Specialist
Partner - Specialist

Valeu Clever,

Acabei de aprender que o IsNull(Campo,Valor) do SQL Server e o IfNull(Campo,Valor) do MySQL, no QlikView pode ser feito com ALT!

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dadose e Desenvolvedor
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
felipe_dutra
Partner - Creator
Partner - Creator

Veja se te atende, Matheus:

LEFT JOIN(Calendario)

LOAD

  DATA_DE_INICIO_Calend as Calen_Data,

  sum(QtdHoras_Calend) as QtdHoras_Calend

Group By DATA_DE_INICIO_Calend;

LOAD

  DATE(MakeDate(ANO_INICIO, Num(MES_INICIO), DIA_INICIO), 'DD/MM/YYYY') as DATA_DE_INICIO_Calend,

  //DATE(DIA_INICIO & '/' & Num(MES_INICIO) & '/' & ANO_INICIO,'DD/MM/YYYY') as DATA_DE_INICIO_Calend,

  QtdHoras as QtdHoras_Calend

Resident Apontamentos;

LEFT JOIN(Calendario)

LOAD

  Calen_Data,

  if(Rangesum(QtdHoras_Calend)<10,0,1) as Calend_Hove_Trabalho

Resident Calendario;

Abs,

Felipe

Anonymous
Not applicable
Author

Bom dia !

Obrigado pela ajuda de todos, após confrontar as respostas uteis acabei conseguindo resolver da seguinte forma:

Calendario_x:

LOAD *,

  If(Calend_Hove_Trabalho=1,1,0) as Calend_Hove_Trabalho_x

Resident Calendario;

DROP Table Calendario;

RENAME Table Calendario_x to Calendario;

DROP Field Calend_Hove_Trabalho;

RENAME Field Calend_Hove_Trabalho_x to Calend_Hove_Trabalho;

Mais uma vez, obrigado por terem respondido !

Abraços.

Clever_Anjos
Employee
Employee

Alt retorna o primeiro valor não nulo de uma lista de valores, serve para implementar um "Isnull()" do SQLServer

É a mesma coisa que uma cadeia de if´s

if(not isnull(v1), v1,if(not isnull(v2),v2,if(not isnull(v3),v4)))))

pode ser escrito como

alt(v1,v2,v3,v4)