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:
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:
Use o step “strings cut” para “cortar” da string apenas a parte correspondente ao dia. Vide a figura abaixo:
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:
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:
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:
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.
Até a próxima pessoal!!!