Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 !
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.
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.
Bom dia Tonial !
Testei aqui, porém não funcionou.
Será que tens alguma outra ideia ?
Obrigado.
Depois do seu script inclua
left join (Calendario) LOAD
Calen_Data,
alt( Calend_Hove_Trabalho,0) as Calend_Hove_Trabalho
resident Calendário;
Boa tarde Clever !
Coloquei, e não funcionou também =/
O que faz exatamente o comando 'alt' ?
Obrigado.
Abraços.
Na sua expressão que traz 0 ou 1 coloque assim:
If(IsNull(EXPRESSAO), 0, EXPRESSAO)
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.
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
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.
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)