Introduzindo otimização de prateleiras em lojas e mercados.
Olá pessoal!
Nestes dias estava pensando em um caso bem específico e que muitas vezes pode surgir ou, podem apresentar a ideia aos seus superiores hierárquicos que tinha uma linha de pensamento estabelecida da seguinte forma: “Se eu possuísse uma loja, como eu organizaria as minhas prateleiras a ponto de tornar ‘toda’ loja interessante”?
Pensei neste caso baseado em estratégias de comércio digital que, de uma forma geral, buscam manter seus sites bastante atrativos.
Após pensar em algumas soluções viáveis, uma me pareceu bastante interessante e que decidi compartilhar com vocês o processo que é: analisar o padrão de compra dos clientes que fizeram compras acima de 10 itens.
Então, sem mais enrolação, vamos ao ponto onde desenvolvo a dimensão.
DESENVOLVENDO O ETL
O primeiro passo foi a seleção das fontes de dados. Como eu preciso descobrir o padrão de compra dos clientes, utilizei como fonte o csv dos clientes e a da tabela fato.
Esta é a primeira parte da minha estrutura. Nela estou extraindo dados das duas fontes citadas acima, filtrando a fonte da tabela fato somente para as compras em lojas físicas e ordenando as linhas pela coluna CustomerID antes do merge join.
Aqui, a configuração do join. Se quiser saber sobre este e outros, acesse este link e este link.
Com o Inner terei apenas as compras realizadas pelos clientes, sem me preocupar com possíveis falhas. Lembrando que esta é a ideia principal, entender as compras dos clientes.
Estas foram as colunas que selecionei ao final desta primeira etapa. Fique livre para selecionar as suas.
Para a segunda parte do ETL realizei outra operação de join, agora com a fonte de produtos, para extrair as categorias e subcategorias que são mais compradas pelos clientes.
O step sublinhado em vermelho (norm_cols) é oriundo do resultado do join da primeira etapa.
Após mais uma operação de join, estas são as colunas que eu irei utilizar para criação da dimensão.
Unindo as fontes necessárias e selecionando as colunas como vimos nos passos anteriores, me deparei com o seguinte dilema:
“Como posso organizar esse processo para começar a entender o que os clientes compravam primeiro ou, preferencialmente?”
Refletindo em uma solução para esta questão, cheguei a conclusão de utilizar o step Group By com as fórmulas de min e max nas colunas de data, renomeando-as como FirstDate e LastDate.
Mesmo que não reflita na primeira compra exata in-loco, somos capazes de saber quais foram as primeiras e as últimas compras dos clientes.
Após, ordenei pelas datas mínimas e máximas e avancei para o próximo step.
Esta etapa é uma das mais estranhas e diferentes pois aqui, utilizei uma transformação que nunca falei sobre que se chama row flattener. Nela, eu pego a coluna ProductID, seleciono os 10 primeiros produtos dos clientes e ao invés de exibir o formato colunar, passo para o formato linear.
Esta é a configuração do step row flattener.
Apliquei o mesmo padrão para as outras colunas ProductCategory e SubCategoryName.
Na imagem abaixo, um resumo do resultado.
- Vermelho: ProductID;
- Azul: ProductCategory;
- Marrom: Subcategory
Para a última parte do processo, utilizei concat fields para juntar cada um dos campos que eram colunas e foram transformados em linhas ficando desta forma.
E consultando o resultado da transformação no banco.
Estrutura final do ETL.

CONCLUSÃO
Antes de mais nada, quero dizer que este post é um protótipo de uma ideia que tive e que pretendo trabalhar mais nela, logo, está incompleto.
Ainda não tenho um plano de ação correto para análise mas estruturalmente, conseguimos entender o padrão de compra apenas olhando por base.
Este tipo de dimensão, por exemplo, se bem aplicada, pode ser adaptada para estudar a eficácia de sites de e-commerce e sua navegabilidade.
A forma como irei orientar a análise para extrair sentido e aplicar ao comércio ainda precisa ser avaliada, mas, já temos um caminho base!!
Se este post te ajudou, compartilhe com os amigos!
Saúde e Deus os abençoe!