Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados,
preciso de uma dica para fazer a seguinte logica, eu tenho uma tabela cujo o campo Curva esta nulo, a regra é simples, devo busca o valor (curva )do mes anterior mais próximo que possua curva, segue abaixo uma tabela original e como deve ficar
material (Original):
LOAD * INLINE [
codigoMaterial,mesAno,Curva
1, jan 2017 , c
1, fev 2017, -
1, mar 2017, -
1, abr 2017, -
1, mai 2017, b
2, jan 2017 , -
2, fev 2017 , c
2, mar 2017 , -
2 , abr 2017, b
2, mai 2017 , -
];
LOAD * INLINE [
codigoMaterial,mesAno,Curva
1, jan 2017 , c
1, fev 2017, c
1, mar 2017, c
1, abr 2017, c
1, mai 2017, b
2, jan 2017 , -(este item não possui curva anterior logo o mesmo deve continuar nulo)
2, fev 2017 , c
2, mar 2017 , c
2 , abr 2017, b
2, mai 2017 , b
];
Obrigado povo
o seu campo é nulo ou = '-'?
t:
LOAD codigoMaterial,date#(mesAno,'MMM YYYY') as mesAno,Curva INLINE [
codigoMaterial,mesAno,Curva
1, jan 2017 , c
1, fev 2017, -
1, mar 2017, -
1, abr 2017, -
1, mai 2017, b
2, jan 2017 , -
2, fev 2017 , c
2, mar 2017 , -
2 , abr 2017, b
2, mai 2017 , -
];
t2:
noconcatenate load
codigoMaterial,
mesAno,
If(Curva<>'-',Curva,If(codigoMaterial=Peek(codigoMaterial),Peek(Curva))) as Curva
Resident t
order by codigoMaterial,mesAno;
drop Table t;
Marcel,
Eu fiz algo parecido com o que esta pensando utilizando o Previous, claro que isso não é definitivo, você pode pensar em fazer um FOR com isso também, um amigo do trabalho já fez utilizando FOR, acredito que para o seu caso possa servir o Previous ou ainda o Peek, segue um exemplo.
Curva_base:
LOAD * INLINE [
codigoMaterial,mesAno,Curva
1, jan 2017 , c
1, fev 2017, -
1, mar 2017, -
1, abr 2017, -
1, mai 2017, b
2, jan 2017 , -
2, fev 2017 , c
2, mar 2017 , -
2 , abr 2017, b
2, mai 2017 , -
];
noconcatenate
Curva_ordenada:
Load * resident Curva_base
order_by mesAno;
;
drop table Curva_base;
Curva_Final:
Load *
if(isnull(Curva), previous(Curva),Curva) as Curvas
resident Curva_ordenada;
drop table Curva_ordenada;
O ruim do Previous é porque tem que estar mais ou menos como você passou e estar ordenado, por isso coloquei um order by no meio ali, então pode ser que o FOR com Peek funcione melhor.
Tem algumas dúvida parecidas com a sua ai.
https://help.qlik.com/pt-BR/sense/3.1/Subsystems/Hub/Content/Scripting/InterRecordFunctions/Peek.htm
Espero ter ajudado
Vou ler o material que enviaste, mas o exemplo não funcionou.
Obrigado!
Grande mestre cleveranjos, tens uma dica?
o seu campo é nulo ou = '-'?
t:
LOAD codigoMaterial,date#(mesAno,'MMM YYYY') as mesAno,Curva INLINE [
codigoMaterial,mesAno,Curva
1, jan 2017 , c
1, fev 2017, -
1, mar 2017, -
1, abr 2017, -
1, mai 2017, b
2, jan 2017 , -
2, fev 2017 , c
2, mar 2017 , -
2 , abr 2017, b
2, mai 2017 , -
];
t2:
noconcatenate load
codigoMaterial,
mesAno,
If(Curva<>'-',Curva,If(codigoMaterial=Peek(codigoMaterial),Peek(Curva))) as Curva
Resident t
order by codigoMaterial,mesAno;
drop Table t;
codigoMaterial | mesAno | Curva |
---|---|---|
1 | jan 2017 | c |
1 | fev 2017 | c |
1 | mar 2017 | c |
1 | abr 2017 | c |
1 | mai 2017 | b |
2 | jan 2017 | |
2 | fev 2017 | c |
2 | mar 2017 | c |
2 | abr 2017 | b |
2 | mai 2017 | b |
Oi Clever,
O campo é nulo, vou implementar tua ideia já lanço aqui o resultado, obrigado mestre!
ABração!
Funcionou Clever,
Muito obrigado tenha um bom dia!!