Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
pablolabbe
Luminary Alumni
Luminary Alumni

Receita: Preenchendo dados em Intervalos de data de movimento.

Caso de uso:

Tenho duas tabelas sendo:

Uma com dados de fucionarios por competencia sendo que para competencia em que ele estava contratado existe um registro. No exemplo abaixo temos somente 2 colunas:

Func, Compet
001,01/01/2019
001,01/02/2019
001,01/03/2019
001,01/04/2019
001,01/05/2019
001,01/06/2019
001,01/07/2019
001,01/08/2019
001,01/09/2019
001,01/10/2019
002,01/03/2019
002,01/04/2019
003,01/08/2019
003,01/09/2019
003,01/10/2019

E uma tabela com os movimentos de reajuste de salário sendo considerado somente 1 por competência para cada funcionário

Func, Compet, Salario
001,01/01/2019,1234.56
001,01/05/2019,1500.00
001,01/09/2019,1555,55
002,01/03/2019,2000.00
003,01/08/2019,2500.00

Como combinar estes dados para chegar no resultado;

Func. Compet, Salario

001,01/01/2019,1234.56
001,01/02/2019,1234.56
001,01/03/2019,1234.56
001,01/04/2019,1234.56
001,01/05/2019,1500.00
001,01/06/2019,1500.00
001,01/07/2019,1500.00
001,01/08/2019,1555,55
001,01/09/2019,1555,55
001,01/10/2019,1555,55
002,01/03/2019,2000.00
002,01/04/2019,2000.00
003,01/08/2019,2500.00
003,01/09/2019,2500.00
003,01/10/2019,2500.00

O script abaixo demonstra com combinar estes dados de forma muito simples para chegar no resultado:

 

Base:
LOAD * INLINE [
Func, Compet
001,01/01/2019
001,01/02/2019
001,01/03/2019
001,01/04/2019
001,01/05/2019
001,01/06/2019
001,01/07/2019
001,01/08/2019
001,01/09/2019
001,01/10/2019
002,01/03/2019
002,01/04/2019
003,01/08/2019
003,01/09/2019
003,01/10/2019];

//Salarios
LEFT JOIN LOAD * INLINE [
Func, Compet, Salario
001,01/01/2019,1234.56
001,01/05/2019,1500.00
001,01/09/2019,1555,55
002,01/03/2019,2000.00
003,01/08/2019,2500.00];

//join das tabelas resulta em datas com campo Salario nulo, pois sao as datas que não tem movimento
//O load a seguir cria uma nova tabela a partir da tabela Base que é classificada para preencher os dados corretamente com o uso do Peek

Base_Final:
NoConcatenate load Func,
     Compet,
     if(Func = previous(Func) and isnull(Salario), Peek(Salario),Salario) as Salario
Resident Base
order by Func, Compet;

drop table Base;

 

Para aprender uma receita alternativa de preenchimento de datas onde existe um intervalo de inicio e fim na linha veja o exemplo do mario https://community.qlik.com/t5/Qlik-Brasil/Adicionando-Preenchendo-intervalo-de-datas-nos-eventos/gpm...

Para saber mais a respeito do uso do Peek e Previous veja este post: https://community.qlik.com/t5/QlikView-Documents/Peek-or-Previous/ta-p/1484418

E claro, procure no help.qlik.com pelas funções peek e previous para informações em portugues.

Abraço,

Pablo Labbe 

Qlik Luminary 2019

 

 

0 Replies