Olá pessoal, tudo bem?!

Retornando aos posts sobre meu portfólio, gostaria de compartilhar com vocês algumas tabelas fato que criei para o meu data warehouse.

Ao total, criei 5 tabelas fato e todas com algumas ideias sobre o que poderíamos analisar para a primeira área de negócios que é a área de Vendas.

A ESTRUTURA

Para começar, precisei reestruturar meu job de tratamento pré carga da fato, para criar outros arquivos CVS’s aos quais eu poderia trabalhar com cada um separadamente e criar um job específico para cada fato.

Na imagem abaixo, mostro como reestruturei meu job primário que puxa o csv da stage e trata antes da carga. Como neste post, mostrei como limpar a fato, irei cortar parte da imagem.

Cada item sublinhado em vermelho é um arquivo que servirá de base para cada uma das fatos.

As fatos criadas foram:

  • Fato Agregada;
  • Fato Entrega;
  • Fato Central;
  • Fato Vendas Online;
  • Fato sem fato

FATO AGREGADA E FATO SEM FATO (FACT FACTLESS)

As duas primeiras fato que quero mostrar são estas que julguei serem “diferentes”. 

Para a tabela fato sem fato (chamarei de agora em diante de Factless), é analisar apenas o processo como sem as medidas aditivas (aquelas que permitem operações matemáticas).

Esse tipo de análise é muito utilizada para avaliar como está uma área de negócio ou um determinado processo de negócio e, a partir disso, propor melhorias.

O pipeline é bem simples, já conhecido do post da criação da tabela fato ao qual, utilizei o step STREAM LOOKUP

Como sabemos, o stream lookup procura um valor em outra fonte/stream e traz ele para o pipeline principal.

Com este pipeline construído, posso selecionar as colunas que desejo levar para o meu data warehouse. Como não pretendo levar as medidas aditivas, preciso do select values para limpar a stream.

Estes foram os campos que selecionei para a minha tabela. Como podemos ver, não há colunas como quantidade, preço, frete etc.

Após, basta carregar no banco e conferir se a carga foi executada corretamente. Veja o resultado abaixo.

Já para a criação da fato agregado, o raciocínio foi um pouco diferente. Para esta, precisei realizar alguns cálculos antes, para ao final, carregar no csv apenas as colunas necessárias com os valores devidamente agregados.

Voltando ao início do post, na imagem com o pipeline que divide a criação das tabelas fato, quero mostrar o ramo utilizado para calcular as agregações. 

Começando da direita para a esquerda, o primeiro step adicionado foi o fórmula para calcular o valor da multiplicação entre quantidade e preço e caso tenha, o valor do desconto.

Abaixo, a expressão criada.

Ao calcular o subtotal precisamos agregá-lo em uma única linha e para esse procedimento, utilizei o step GroupBY

O group field é o campo que utilizei para agrupar as linhas. Assim sendo, ao final deste step o que teremos é o subtotal de cada ordem de pedido. 

Em vermelho, esta o resultado obtido com o step formula, somando as colunas OrderQty, UnitPrice e UnitPriceDiscount. Já a coluna SumSubtotal é o resultado do groupby

O que eu fiz a partir disso foi remover as duplicatas e as colunas envolvidas na operação, deixando apenas a coluna SumSubTotal.

Por fim, adicione outro step formula na sua transformação para somar com as colunas TaxAmt e Freight com a coluna SumSubTotal. 

Após, basta configurar os metadados e criar o arquivo csv ficando desta forma no resultado final.

Para as outras fatos, o que eu fiz foi apenas selecionar certas colunas para carregar no step text file output de acordo com a necessidade de criação.

A única que teve um processo diferente foi a fato para VendasOnline que filtrei de acordo com a própria flag que vem da fonte transacional indicando se tal venda é online ou não.

A tabela Fato Entrega é uma fato com colunas pontuais criada apenas com o intuito de analisar a performance das entregas e as regiões que mais ocorreram.

JOBS DE CARGA

Não irei entrar nos detalhes de cada job pois não variam do que já vimos anteriormente. Cada fato possui seu próprio pipeline para substituição de chave e já observamos como faz.

Eu apenas preferi estruturar cada carga em um job diferente para ter maior controle sobre o processo, o que não é obrigatório.

Então, cada um dos jobs abaixo roda um tratamento e carga no data warehouse.

Além desse controle, também seria possível programar a hora e quando este deve ser executado, o que veremos futuramente.

CONCLUSÃO

Este foi um post simples que abordei a ideia que tive de criar outras tabelas fato para o meu projeto.

Claro que não havia necessidade, uma vez que da fato central, eu poderia criar as análises perfeitamente, mas, como eu quero explorar possibilidades, acabei por criar.

No mais, posso dizer que foi um processo bem simples, e pretendo criar outras tabelas e trazer aqui para mostrar a criação e a ideia por trás de cada uma delas.

Espero que gostem, saúde!

Deus os abençoe!