Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
mrooocha
Contributor

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 !

Tags (1)
1 Solution

Accepted Solutions
mrooocha
Contributor

Re: USANDO WHERE NOT EXIST?

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.

10 Replies
fernando_tonial
Valued Contributor

Re: USANDO WHERE NOT EXIST?

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.

mrooocha
Contributor

Re: USANDO WHERE NOT EXIST?

Bom dia Tonial !

Testei aqui, porém não funcionou.

Será que tens alguma outra ideia ?

Obrigado.

Employee
Employee

Re: USANDO WHERE NOT EXIST?

Depois do seu script inclua

left join (Calendario) LOAD

Calen_Data, 

alt( Calend_Hove_Trabalho,0) as Calend_Hove_Trabalho

resident Calendário;

mrooocha
Contributor

Re: USANDO WHERE NOT EXIST?

Boa tarde Clever !

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

O que faz exatamente o comando 'alt' ?

Obrigado.

Abraços.

MarcoARaymundo
Contributor III

Re: USANDO WHERE NOT EXIST?

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

If(IsNull(EXPRESSAO), 0, EXPRESSAO)

aderlanrm
Valued Contributor

Re: USANDO WHERE NOT EXIST?

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.

felipe_dutra
Contributor

Re: USANDO WHERE NOT EXIST?

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

mrooocha
Contributor

Re: USANDO WHERE NOT EXIST?

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.

Employee
Employee

Re: USANDO WHERE NOT EXIST?

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)