Superstore Global: Otimização Logística e Rentabilidade

Power BI

Python

DB Cloud

DAX

ETL

API

Objetivo do Projeto

Desenvolver uma solução de Business Intelligence de ponta a ponta, utilizando Python para ETL e SQL em Nuvem (Aiven) para integrar métricas de vendas e logística em um ambiente escalável. O foco foi estruturar um ecossistema de dados que forneça suporte à tomada de decisão estratégica através de uma visão clara da performance global.

Problema de Negócio

A organização apresentava inconsistência na lucratividade entre diferentes territórios, apesar do alto volume de vendas. O projeto visou mapear "pontos cegos" operacionais, fornecendo uma visão diagnóstica sobre como o Ticket Médio e os custos de frete impactavam a margem líquida, permitindo a identificação de mercados deficitários e gargalos logísticos para futuras ações corretivas.

Gravação em loop demonstrando a navegação pelo dashboard Power BI do projeto Superstore Global, exibindo as três páginas analíticas: Performance Global, Diagnóstico de Margem e Eficiência Logística

Resultados e Insights

Principais Descobertas

Identificação de 6 países na "Zona Crítica" (ex: Philippines com margem de -8,79%), onde o alto volume de receita é neutralizado por descontos agressivos (média de 34,6%).

"O Custo Médio Global por Frete é de $54,43, mas a análise regional revela disparidades críticas: a região Central concentra o maior custo logístico, com frete médio de $27,69 por envio — valor que, em categorias de baixo ticket médio, supera o lucro unitário gerado e comprime diretamente a margem líquida.

Os EUA consolidam-se como operação modelo, mantendo margem superior a 30%, servindo de parâmetro para a otimização das demais regiões.

Recomendações Acionáveis

Limitar descontos a no máximo 20% em subcategorias com Margem Bruta abaixo de 15% — especialmente Mesas (2,2%) — para recuperar entre 2 e 4 pontos percentuais de margem líquida

Apresentar aos gestores de logística os custos de frete desproporcionais por região, facilitando a renegociação de contratos baseada em dados reais de performance.

Estabelecer o monitoramento contínuo das "bolhas de risco" (Zona Crítica) para priorizar ações de correção imediata na correlação entre custo de envio e lucratividade.

Lógica de Tratamento & ETL

SQL - Modelagem Dimensional e Governança

-- 1. Criação da Dimensão Produto com geração de Surrogate Key (SK) para integridade

CREATE OR REPLACE VIEW dProduto AS SELECT

ROW_NUMBER() OVER (ORDER BY ID_Produto, Nome_Produto) AS ID_Produto_SK,

ID_Produto AS Codigo_Original,

Nome_Produto,

Categoria,

Sub_Categoria

FROM (

SELECT DISTINCT ID_Produto, Nome_Produto, Categoria, Sub_Categoria

FROM fVendas

) AS subquery;


-- 2. Estruturação da Dimensão Localidade com duplicação de registros geográficos

CREATE OR REPLACE VIEW dLocalidade AS SELECT

ROW_NUMBER() OVER (ORDER BY Pais, Estado, Cidade) AS ID_Localidade,

Pais,

Estado,

Regiao,

Cidade

FROM(

SELECT DISTINCT Pais, Estado, Regiao, Cidade

FROM fVendas

) AS subquery;


-- 3. Dimensão Cliente focada na segmentação de base

CREATE OR REPLACE VIEW dCliente AS

SELECT DISTINCT

ID_Cliente,

Nome_Cliente,

Segmento

FROM fVendas;


-- 4. Consolidação da Tabela Fato vinculando dimensões via IDs para otimização de performance

CREATE OR REPLACE VIEW fVendas_Final AS

SELECT

f.*,

l.ID_Localidade,

p.ID_Produto_SK

FROM fVendas f

LEFT JOIN dLocalidade l

ON f.Pais = l.Pais

AND f.Estado = l.Estado

AND f.Cidade = l.Cidade

LEFT JOIN dProduto p

ON f.ID_Produto = p.Codigo_Original

AND f.Nome_Produto = p.Nome_Produto;

Python - Integração e Tratamento

Limpeza e Tratamento de Dados

# Mapeamento e correção de encoding (colunas corrompidas e caracteres chineses)

for col in df.columns:
if "è°°" in col or "记录数" in col:
df = df.rename(columns={col: "N_Registros"})


# Tradução integral dos dados para o mercado brasileiro

for coluna, dicionario in mapeamento_conteudo.items():
if coluna in df.columns:
df[coluna] = df[coluna].astype(str).str.strip().map(dicionario).fillna(df[coluna])

Engenharia de Novas Métricas

# Integração com API externa para conversão monetária dinâmica

taxa_dolar = buscar_cotacao_dolar()


# Criação de indicadores de performance (KPIs) diretamente no pipeline df['Tempo_Envio_Dias'] = (df["Ship Date"] - df["Order Date"]).dt.days

df['Vendas_BRL'] = df['Sales'] * taxa_dolar

df['Margem_Lucro'] = df['Profit'] / df['Sales'].replace(0, np.nan)

Automação da Carga Cloud

# Configuração da carga para banco de dados gerenciado (Aiven MySQL)

# Garantindo a integridade referencial com a definição de Primary Key

sql_create_table = """
CREATE TABLE IF NOT EXISTS fVendas (
ID_Linha BIGINT PRIMARY KEY,
Categoria TEXT, Pais TEXT, Data_Pedido DATETIME,
Lucro_USD DOUBLE, Vendas_BRL DOUBLE, Margem_Lucro DOUBLE
-- [Demais colunas omitidas para brevidade]
);
"""

# Execução da carga via SQLAlchemy

df_final.to_sql(name="fVendas", con=engine, if_exists='append', index=False)

Medidas DAX em Destaque

Métrica Dinâmica do Painel

Métrica Dinâmica do Painel =

VAR selecao = SELECTEDVALUE('Tabela_Selecao'[Parâmetro Pedido])

RETURN

SWITCH(

selecao,

1,[Lucro Bruto],

2,[Lucro Liquido],

3,[Margem Líquida %],

4,[Qtd Vendida],

5,[Receita Líquida (RL)],

6,[Custo Envio],

7,[Impacto Envio %]

-- [Métrica abreviada para exebição]

)

Crescimento Mensal (MoM%)

Crescimento Mensal (MoM%) =

VAR ValorAtual = [Métrica Dinâmica do Painel]

VAR ValorPassado = CALCULATE([Métrica Dinâmica do Painel], DATEADD('dCalendario'[Date], -1, MONTH))

VAR Percentual = DIVIDE(ValorAtual - ValorPassado, ValorPassado)

VAR Icon = SWITCH(

TRUE(),

Percentual > 0 , UNICHAR(11165), -- Seta para cima

Percentual < 0, UNICHAR(11167), -- Seta para baixo

"-"

)

RETURN

Icon & " " & FORMAT(ABS(Percentual), "0.0%")

Cor Dinâmica de Alerta

Cor Dinâmica de Alerta =

VAR selecao = SELECTEDVALUE('Tabela_Selecao'[Parâmetro Pedido])

VAR ValorAtual = [Métrica Dinâmica do Painel]

VAR ValorPassado = CALCULATE([Métrica Dinâmica do Painel], DATEADD('dCalendario'[Date], -1, MONTH))

VAR Percentual = DIVIDE(ValorAtual - ValorPassado, ValorPassado)

VAR EhCusto = (selecao = 6 || selecao = 7)

RETURN

SWITCH(

TRUE(),

ISBLANK(Percentual) || Percentual = 0, "#e8b62f", -- Estável

-- Se for custo e subiu: Ruim (Vermelho). Se caiu: Bom (Verde)

EhCusto && Percentual > 0, "#d24126",

EhCusto && Percentual < 0, "green",

-- Se for faturamento e subiu: Bom (Verde). Se caiu: Ruim (Vermelho)

Percentual > 0, "green",

"#d24126"

)

Performance da Categoria Detratora

Filtro de Ranking Dinâmico =

-- 1. Observa qual métrica o usuário quer analisar no momento

VAR MetricaSelecionada = SELECTEDVALUE('Tabela_Selecao'[Parâmetro Pedido])

-- 2. Calcula o ranking comparando o país atual com os demais visíveis

VAR Ranking =

RANKX(

ALLSELECTED('dLocalidade'[Pais]),

SWITCH(

MetricaSelecionada,

2, [Lucro Liquido],

3, [Margem Líquida %],

7, [Impacto Envio %]

),

,

DESC

)

-- 3. Retorna um sinalizador (1 ou 0) para ser usado no filtro do visual

RETURN

IF(Ranking <= 10, 1, 0)

Performance da Categoria Detratora

Performance da Categoria Detratora =

-- Descobre qual é a subcategoria detratora ignorando o mês do gráfico de linha

VAR CategoriaCritica = CALCULATE([SubCategoria Prejuizo], ALLSELECTED('dCalendario'))

RETURN

-- Isola o cálculo apenas para essa subcategoria específica

CALCULATE(

[Lucro Liquido],

KEEPFILTERS('dProduto'[Sub_Categoria] = CategoriaCritica)

)

Análise Vertical DRE %

Análise Vertical DRE % =

VAR ValorLinha = [Valores DRE]

VAR ReceitaLiquida = CALCULATE([Valores DRE], FILTER(ALL('Mascara DRE'), 'Mascara DRE'[Ordem Descrição] = 3))

RETURN

DIVIDE(ValorLinha, ReceitaLiquida)

Modelagem de Dados

Arquitetura Star Schema

Implementação de modelagem dimensional para otimização de performance e simplificação das fórmulas DAX. A centralização da tabela fato (fVendas_Final) conectada a dimensões claras (Produtos, Clientes, Localidade e Calendário) garante integridade referencial e filtros bidirecionais eficientes, permitindo análises complexas de Inteligência de Tempo com baixo custo computacional.

Diagrama do modelo dimensional Star Schema com a tabela fato fVendas_Final centralizada e conectada às dimensões dLocalidade, dCliente, dProduto e dCalendario, além das tabelas auxiliares Métricas, Mascara DRE, Tabela Selecao e Tabela Moeda

Vamos Transformar dados em estratégia? Contate-me!

LinkedIn

LinkedIn

LinkedIn

Disponível para oportunidades presenciais, remotas e híbridas

© 2026 - Portfólio de Beattriz Sant’ana

Create a free website with Framer, the website builder loved by startups, designers and agencies.