Carregando Um Período Condicionalmente

Olá pessoal, vamos falar hoje de ETL. Mais precisamente da carga de um período de acordo com a data corrente.

 

Muitas empresas têm uma data de “fechamento”, geralmente é um dia do mês corrente em que se considera que todos os lançamentos realizados no mês anterior já foram inseridos nos seus sistemas de controle.

É muito comum que uma carga de dados de uma tabela de movimentação se baseie nessa da de fechamento, então imagine um cenário onde a data de fechamento da empresa é todo dia 10 de cada mês.

Agora imagine que estamos no dia 8 de abril. Neste caso devemos carregar todas as informações desde 1 março até 8 de abril. Amanhã a carga ocorrerá de 01 de março até  o dia 9 de abril e depois até o dia 10 de abril onde consideramos os lançamentos fechados. A partir deste ponto, ou seja, no dia 11 de abril podemos deixar de carregar o mês de março, pois o mesmo já está “fotografado” em nosso DW. Então do dia 11 de abril até o dia 10 de maio vamos dando carga desde o dia 01 de abril até a data corrente.

Espero ter me feito entender nessas linhas. Acredite essa situação é bem comum em projetos de BI.

Mas como fazemos isso em nossa carga? Vou dar um exemplo aqui bem didático. Fiquem a vontade para melhorá-lo de acordo com sua necessidade.

 

Primeiro vamos criar uma nova transformação no PDI e para este projeto, começaremos com o step “Get system info”. Configure-o conforme a figura abaixo:

get system info

Assim já identificamos a data atual, o primeiro dia do mês corrente e o primeiro dia do mês anterior.

Agora vamos converter a data atual para string para que posteriormente possamos pegar apenas a parte correspondente ao dia e compará-la  se coincide com a data de fechamento da empresa. Para isso utilize o step “select values” e configure a aba “meta-data” conforme a figura abaixo:

converte

 

Use o step “strings cut” para “cortar” da string apenas a parte correspondente ao dia. Vide a figura abaixo:

stringcut

Para que isso dê certo fique atento ao formato da sua data e a posição que se inicia e termina a parte referente ao dia.

Depois é só usar o step “filter rows” para comparar se o dia atual é menor ou igual ao seu dia de fechamento. Veja abaixo:

filterrows

Caso atenda a condição segue para o fluxo “VERDADEIRO”. Caso contrário, o filter rows segue para o fluxo de “FALSO”. Para cada uma das alternativas vamos usar um “select values” que vai alterar o nome do campo que precisamos para “data_inicio”. Coloque um “select values” e ligue-o a “hope” verdadeira vindo do “filter rows”. Configure conforme abaixo:

caso1

Aqui alteramos o nome do campo “data_inicio_mes_anterior” para “data_inicio”

 

Agora coloque um “select values” e ligue-o a “hope” falsa vindo do “filter rows”. Configure conforme abaixo:

caso 2

Aqui alteramos o nome do campo “data_inicio_mes_corrente” para “data_inicio”

 

Assim dizemos ao ETL que se caso a data atual seja menor ou igual ao dia 10 do mês corrente, então a data inicial do intervalo de carga deverá ocorrer no primeiro dia do mês anterior, caso contrário deve ser o primeiro dia do mês corrente.

 

Agora para cada fluxo vamos remover os campos que não precisamos mais. Para isso utilizaremos o “select values” na aba de “remove”. Configurem conforme abaixo para cada fluxo:

Agora basta inserir um step “dummy” para unir os fluxos e a partir daí usar essas informações como parâmetro para sua carga.

fluxo completo

preview

 

Até a próxima pessoal!!!

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *