Esse é um projeto para praticar modelagem de dados com Power BI.
AtliQ é uma empresa é uma empresa que fornece hardware de computador e periféricos para muitos clientes através da Índia. Esse projeto vem com propósito de desbloquear insights de vendas que não eram visíveis para uma equipe de vendas. Automatizá-los para reduzir o tempo manual na coleta de dados. Definindo um star schema e escrevendo o pipeline ETL, os dados baseados em arquivos sql que será transferido para o Power BI para limpeza e dai criar um dashboard para suporte e decisões futuras.
A empresa está crescendo bastante no mercado e precisa de ajuda para rastrear suas vendas e ter insights sobre seu negócio.
Até então, as vendas eram passadas pelos gerentes regionais na Índia, no qual informavam sobre as vendas e o lucro previsto para aquela região. Fazendo uso de um banco de dados MySQL, temos o seguinte modelo:
- Star Schema: sales transactions, e
- Demais Schemas: sales customers, sales markets, sales products e sales date.
Com os dados provenientes da empresa, iremos fazer um dashboard automatizado em Power BI para suporte e decisões sobre a empresa de forma otimizada.
O ETL pipeline extrai os dados do arquivo db_dump.sql
e produz um dashboard utilizando o ETL_mysql.pbix
, como você pode observar abaixo
Se você deseja executar esse projeto em sua máquina, você deve finalizar os seguintes passos primeiro.
- Instalar
MySQL
- Instalar
PowerBI
em sua máquina
- Criar schema no MySQL
- Importar o arquivo
db_dump.sql
nessa schema. - Analisar como estão os dados, se é preciso ser feita alguma limpeza.
- Importar os dados no Power BI, importando como uma base de dados MySQL.
- Fazer a limpeza que será descrita abaixo e criar o dashboard de vendas referente ao arquivo
ETL_mysql.pbix
.
Abaixo vão estar Querys que serão parte da nossa análise em power bi. Vamos usar essas Querys com dois propósitos, procurar saber se os nossos dados precisam de limpeza e para confirmar que a análise com power bi condiz com a análise em MySQL.
-
Mostre todas informações da tabela customers
SELECT * FROM customers;
-
Mostre o total de linhas na tabela customers
SELECT count(*) FROM customers;
-
Mostre as transações para o mercado de Chennai (O código de mercado para Chennai é Mark001)
SELECT * FROM transactions where market_code='Mark001';
-
Mostre os produtos distintos vendidos em Chennai
SELECT distinct product_code FROM transactions where market_code='Mark001';
-
Mostre as transações feitas em Dólares
SELECT * from transactions where currency="USD"
-
Mostre as transações em 2020 usando o método join com a tabela data
SELECT transactions.*, date.* FROM transactions INNER JOIN date ON transactions.order_date=date.date where date.year=2020;
-
Mostre toda receita do ano 2020
SELECT SUM(transactions.sales_amount) FROM transactions INNER JOIN date ON transactions.order_date=date.date where date.year=2020 and transactions.currency="INR\r" or transactions.currency="USD\r";
-
Mostre toda receita do ano 2020 no mês de janeiro
SELECT SUM(transactions.sales_amount) FROM transactions INNER JOIN date ON transactions.order_date=date.date where date.year=2020 and and date.month_name="January" and (transactions.currency="INR\r" or transactions.currency="USD\r");
-
Mostre toda receita do ano 2020 na região de Chennai
SELECT SUM(transactions.sales_amount) FROM transactions INNER JOIN date ON transactions.order_date=date.date where date.year=2020 and transactions.market_code="Mark001";
Queremos agora corrigir problemas que encontramos análisando os dados com MySQL.
- Fórmula para retirar valores indevidos da venda.
= Table.SelectRows(sales_transactions, each ([sales_amount] <> -1 and [sales_amount] <> 0))
- Fórmula para criar a coluna new_sales_amount
= Table.AddColumn(#"Cleanup Currency", "new_sales_amount", each if [currency] ="USD#(cr)" then [sales_amount]*74 else [sales_amount])
- Mudar o tipo da coluna new_sales_amount
= Table.TransformColumnTypes(#"Added new_sales_amount with all currencys in INR",{{"new_sales_amount", type number}})
- Selecione cy_date ao mudar seu formato para 'mmm yy'