Dashboard interativo desenvolvido em Python com Streamlit para análise de vendas da base de dados AdventureWorks.
Teste de Habilidade BI - Hexagon
O dashboard oferece:
- 📊 4 KPIs principais (Vendas Totais, Pedidos, Ticket Médio, Produtos)
- 📈 Gráfico de evolução de vendas ao longo do tempo
- 🏆 Top 15 produtos mais vendidos
- 🥧 Distribuição de vendas por categoria
- 🗺️ Análise de vendas por região
- 🔍 Filtros interativos (data, região, país, categoria, produtos)
- Pré-requisitos
- Instalação Completa Passo a Passo
- Configuração
- Como Executar
- Estrutura do Projeto
- Troubleshooting
- Funcionalidades
Antes de começar, você precisa ter instalado:
- Download: https://www.microsoft.com/sql-server/sql-server-downloads
- Escolha: SQL Server 2025 Express (ou 2022/2019)
- Durante a instalação, anote o Instance Name (geralmente
SQLEXPRESS)
- Download: https://aka.ms/ssmsfullsetup
- Tamanho: ~600 MB
- Necessário para restaurar o banco de dados
- Download: https://www.python.org/downloads/
⚠️ IMPORTANTE: Marque a opção "Add Python to PATH" durante a instalação- Verifique:
python --version
- Download: https://go.microsoft.com/fwlink/?linkid=2249004
- Necessário para o Python conectar ao SQL Server
- Geralmente já vem com o SQL Server, mas instale se necessário
- Download: https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2019.bak
- Tamanho: ~45 MB
- Salve em:
C:\temp\(ou outra pasta de fácil acesso)
- Execute o instalador do SQL Server Express
- Escolha "Basic" (instalação básica)
- Aceite os termos e aguarde a instalação
- ANOTE o Instance Name (exemplo:
SQLEXPRESSouMSSQLSERVER) - Reinicie o computador (recomendado)
- Execute o instalador do SSMS
- Siga o wizard de instalação
- Aguarde (~10-15 minutos)
- Reinicie o computador
- Abra o SQL Server Management Studio (SSMS)
- Na janela "Connect to Server":
- Server name:
localhost\SQLEXPRESS(oulocalhost\MSSQLSERVER) - Authentication:
Windows Authentication - Clique em "Opções >>" → Propriedades da Conexão
- Criptografar conexão: Marque como "Opcional"
- Server name:
- Clique em "Connect"
-
No Object Explorer (painel esquerdo):
- Clique com botão direito em "Databases"
- Selecione "Restore Database..."
-
Na janela de Restore:
- Selecione "Device"
- Clique no botão "..."
- Clique em "Add"
- Navegue até
C:\temp\AdventureWorks2019.bak - Selecione o arquivo e clique OK
- Clique OK novamente
- Clique OK para iniciar a restauração
-
Aguarde a mensagem:
Database 'AdventureWorks2019' restored successfully.
Execute esta query no SSMS (New Query → Execute):
USE AdventureWorks2019;
GO
SELECT COUNT(*) AS TotalVendas FROM Sales.SalesOrderHeader;
SELECT COUNT(*) AS TotalItens FROM Sales.SalesOrderDetail;
GOResultado esperado:
- TotalVendas: 31,465
- TotalItens: 121,317
✅ Se viu esses números, o banco está OK!
Abra o Prompt de Comando (cmd) e execute:
# Criar pasta do projeto
mkdir C:\DashboardVendas
cd C:\DashboardVendas
# Criar pasta para ambiente virtual
mkdir venvCopie todos os arquivos fornecidos para C:\DashboardVendas\:
C:\DashboardVendas\
├── dashboard.py
├── requirements.txt
├── test_connection_sqlexpress.py
├── .env
├── README.md
└── .gitignore
No Prompt de Comando (dentro de C:\DashboardVendas):
# Criar ambiente virtual
python -m venv venv
# Ativar ambiente virtual
venv\Scripts\activate
# Você verá (venv) antes do promptCom o ambiente virtual ativado:
pip install --upgrade pip
pip install -r requirements.txtAguarde a instalação (~2-3 minutos). Pacotes instalados:
- streamlit
- pandas
- plotly
- pyodbc
- python-dateutil
Você tem duas opções para configurar a conexão:
-
Crie um arquivo
.envna pasta do projeto (C:\DashboardVendas\.env) -
Adicione as seguintes variáveis:
# Configurações do SQL Server
SQL_SERVER=localhost\SQLEXPRESS
SQL_DATABASE=AdventureWorks2019
SQL_DRIVER=ODBC Driver 18 for SQL Server
# Use Windows Authentication (recomendado)
SQL_USE_WINDOWS_AUTH=True
# OU use SQL Authentication (descomente se necessário)
# SQL_USE_WINDOWS_AUTH=False
# SQL_USER=seu_usuario
# SQL_PASSWORD=sua_senha- Instale python-dotenv (se ainda não instalou):
pip install python-dotenv- O dashboard.py já está configurado para usar .env automaticamente!
Abra dashboard.py e localize a função get_database_connection() (linha ~60).
Configuração Padrão (Windows Authentication):
conn_str = (
"DRIVER={ODBC Driver 18 for SQL Server};"
"SERVER=localhost\\SQLEXPRESS;" # ← AJUSTE AQUI seu servidor
"DATABASE=AdventureWorks2019;"
"Trusted_Connection=yes;"
"TrustServerCertificate=yes;"
)Para SQL Authentication (usuário e senha):
conn_str = (
"DRIVER={ODBC Driver 18 for SQL Server};"
"SERVER=localhost\\SQLEXPRESS;"
"DATABASE=AdventureWorks2019;"
"UID=seu_usuario;"
"PWD=sua_senha;"
"TrustServerCertificate=yes;"
)Se seu SQL Server for diferente, ajuste:
| Instalação | SERVER |
|---|---|
| SQL Express | localhost\SQLEXPRESS |
| SQL Server padrão | localhost ou localhost\MSSQLSERVER |
| Servidor remoto | 192.168.1.100\SQLEXPRESS |
| Named instance | localhost\SuaInstancia |
Se tiver ODBC Driver 17:
Mude ODBC Driver 18 para ODBC Driver 17
Antes de rodar o dashboard, sempre teste a conexão:
cd C:\DashboardVendas
python test_connection_sqlexpress.pyResultado esperado:
✅ CONEXÃO ESTABELECIDA COM SUCESSO!
✅ Sales.SalesOrderHeader: 31,465 registros
✅ Sales.SalesOrderDetail: 121,317 registros
...
✅ TESTE CONCLUÍDO COM SUCESSO!
Se der erro, verifique a seção Troubleshooting.
Com o ambiente virtual ativado:
streamlit run dashboard.pyO navegador abrirá automaticamente em: http://localhost:8501
Para especificar uma porta:
streamlit run dashboard.py --server.port 8502Para executar sem abrir o navegador:
streamlit run dashboard.py --server.headless true-
Filtros (Sidebar à esquerda):
- Selecione período de datas
- Escolha região, país, categoria
- Selecione produtos específicos (opcional)
-
KPIs (Topo):
- Vendas Totais
- Total de Pedidos
- Ticket Médio
- Produtos Vendidos
-
Visualizações:
- Evolução temporal das vendas
- Top 15 produtos
- Distribuição por categoria
- Análise por região
-
Dados Detalhados:
- Expanda "Ver Dados Detalhados" no final da página
DashboardVendas/
│
├── dashboard.py # Aplicação principal do Streamlit
├── requirements.txt # Dependências Python
├── test_connection_sqlexpress.py # Script de teste de conexão
├── .env # Configurações (NÃO commitar!)
├── README.md # Este arquivo
├── DESENVOLVIMENTO.md # Documentação técnica
├── GUIA_INSTALACAO_COMPLETA.md # Guia detalhado de instalação
├── .gitignore # Arquivos a ignorar no Git
│
├── venv/ # Ambiente virtual (não commitar)
│
└── .streamlit/ # Configurações do Streamlit (opcional)
└── config.toml
Causa: Dependências não instaladas
Solução:
pip install -r requirements.txtCausa: SQL Server não está rodando ou nome incorreto
Solução:
-
Verificar se SQL Server está rodando:
- Windows + R →
services.msc - Procure "SQL Server (SQLEXPRESS)"
- Se estiver "Parado", clique com botão direito → "Iniciar"
- Windows + R →
-
Verificar o nome correto do servidor:
- Abra SSMS
- Use o nome que funciona no SSMS
- Atualize no
.envoudashboard.py
Causa: Credenciais incorretas ou permissões
Solução:
Para Windows Authentication:
"Trusted_Connection=yes;"Para SQL Authentication:
"UID=seu_usuario;"
"PWD=sua_senha;"Certifique-se que o usuário tem permissão no banco AdventureWorks2019.
Causa: ODBC Driver não instalado
Solução:
- Verifique drivers instalados:
python test_connection_sqlexpress.py-
Se não tiver ODBC Driver 18, instale:
-
Ou use ODBC Driver 17 (se tiver):
- Mude no
.envou código:ODBC Driver 17 for SQL Server
- Mude no
Erro: "A connection was successfully established with the server, but then an error occurred during the login"
Causa: Problema de certificado SSL (SQL Server 2025)
Solução:
Adicione à string de conexão:
"TrustServerCertificate=yes;"Ou no .env:
SQL_TRUST_CERTIFICATE=yesCausa: Banco não foi restaurado
Solução:
- Verifique no SSMS se o banco existe
- Se não existir, restaure conforme ETAPA 2
- Verifique o nome exato do banco (pode ser AdventureWorks, AdventureWorks2019, etc.)
Causa: Outro processo usando a porta
Solução:
streamlit run dashboard.py --server.port 8502Causa: Conexão OK mas query com problema
Solução:
- Verifique logs do Streamlit no terminal
- Execute o teste de conexão:
python test_connection_sqlexpress.py- Teste a query SQL diretamente no SSMS
Causa: Python não adicionado ao PATH
Solução:
- Reinstale Python marcando "Add Python to PATH"
- Ou adicione manualmente:
- Procure onde Python está instalado (ex:
C:\Python311) - Windows + Pause → Configurações Avançadas → Variáveis de Ambiente
- Adicione
C:\Python311eC:\Python311\Scriptsao PATH
- Procure onde Python está instalado (ex:
| KPI | Descrição | Cálculo |
|---|---|---|
| 💰 Vendas Totais | Receita total do período | SUM(TotalDue) |
| 📦 Total de Pedidos | Quantidade de pedidos | COUNT(DISTINCT SalesOrderID) |
| 📊 Ticket Médio | Valor médio por pedido | AVG(TotalDue) |
| 🏷️ Produtos Vendidos | Produtos únicos vendidos | COUNT(DISTINCT ProductID) |
- 📅 Período: Range de datas (início e fim)
- 🌍 Região: Estados/Províncias
- 🏳️ País: Países
- 🏷️ Categoria: Categorias de produtos
- 📦 Produtos: Multi-seleção de produtos específicos
-
📈 Evolução das Vendas
- Tipo: Gráfico de linha com área preenchida
- Eixo X: Ano-Mês
- Eixo Y: Valor total de vendas
- Interatividade: Hover com detalhes
-
📊 Top 15 Produtos
- Tipo: Gráfico de barras horizontal
- Ordenação: Descendente por valor
- Cores: Gradient azul
-
🥧 Vendas por Categoria
- Tipo: Gráfico de pizza
- Valores: Percentual e absoluto
- Interatividade: Click para destacar
-
🗺️ Top 10 Regiões
- Tipo: Gráfico de barras horizontal
- Cores: Gradient verde
- Ordenação: Por valor de vendas
| Tecnologia | Versão | Uso |
|---|---|---|
| Python | 3.8+ | Linguagem principal |
| Streamlit | 1.32.0 | Framework de dashboard |
| Pandas | 2.2.0 | Manipulação de dados |
| Plotly | 5.18.0 | Visualizações interativas |
| PyODBC | 5.0.1 | Conexão com SQL Server |
| SQL Server | 2019+ | Banco de dados |
✅ Variáveis de Ambiente: Credenciais em .env, não no código
✅ GitIgnore: .env nunca é commitado
✅ Prepared Statements: PyODBC previne SQL Injection
✅ Cache: Dados sensíveis não são expostos desnecessariamente
NUNCA commite:
- Arquivo
.envcom credenciais - Senhas hardcoded no código
- Strings de conexão com dados sensíveis
Sempre:
- Use
.gitignorepara excluir.env - Use variáveis de ambiente
- Mantenha credenciais seguras
- Pedidos: 31,465
- Itens Vendidos: 121,317
- Receita Total: $123,216,786.12
- Período: 2011-05-31 a 2014-06-30
- Produtos: 504
- Categorias: 4
- Regiões: 181
| Tabela | Registros | Uso |
|---|---|---|
| Sales.SalesOrderHeader | 31,465 | Cabeçalho dos pedidos |
| Sales.SalesOrderDetail | 121,317 | Detalhes dos itens |
| Production.Product | 504 | Informações de produtos |
| Person.StateProvince | 181 | Regiões/Estados |
| Person.CountryRegion | 238 | Países |
- Faça push do código para GitHub
- Acesse https://streamlit.io/cloud
- Conecte seu repositório
- Configure as variáveis de ambiente no painel
- Deploy automático!
Limitação: Não funciona com SQL Server local, apenas com bancos na nuvem.
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8501
CMD ["streamlit", "run", "dashboard.py"]Use este checklist para garantir que tudo está funcionando:
- SQL Server Express instalado
- SSMS instalado
- AdventureWorks2019.bak baixado
- AdventureWorks restaurado no SSMS
- Verificação SQL executada com sucesso (31,465 pedidos)
- Python 3.8+ instalado e no PATH
- ODBC Driver 18 instalado
- Pasta do projeto criada (
C:\DashboardVendas) - Arquivos copiados para a pasta
- Ambiente virtual criado
- Dependências instaladas (
pip install -r requirements.txt) - Arquivo
.envconfigurado - Teste de conexão passou ✅ (
test_connection_sqlexpress.py) - Dashboard rodando ✅ (
streamlit run dashboard.py)
- Cache: O dashboard usa cache do Streamlit - primeira carga é lenta, depois é rápida
- Filtros: Use filtros para reduzir o volume de dados processados
- Refresh: Para recarregar dados, use
Ctrl+Rno navegador
- Auto-reload: Streamlit recarrega automaticamente ao salvar arquivos
- Debug: Use
st.write()para debug no próprio dashboard - Logs: Veja logs detalhados no terminal onde executou o Streamlit
- Cores: Edite o CSS inline no
dashboard.py - Tema: Crie arquivo
.streamlit/config.toml - Novos gráficos: Use Plotly Express - documentação em https://plotly.com/python/
- Documentação Streamlit: https://docs.streamlit.io/
- Plotly Python: https://plotly.com/python/
- Pandas: https://pandas.pydata.org/docs/
- PyODBC: https://github.com/mkleehammer/pyodbc/wiki
- AdventureWorks: https://learn.microsoft.com/en-us/sql/samples/adventureworks-install-configure
- Verifique este README primeiro
- Execute
test_connection_sqlexpress.pye veja os erros - Consulte a seção Troubleshooting
- Revise os logs no terminal do Streamlit
Este projeto foi desenvolvido para fins de avaliação técnica.
- Microsoft - Base de dados AdventureWorks
- Streamlit - Framework incrível para dashboards
- Plotly - Visualizações interativas
- Hexagon - Oportunidade de desenvolver este projeto
- Versão: 1.0.0
- Desenvolvido para: Teste de Habilidade BI - Hexagon
- Data: Fevereiro 2026
- Python: 3.8+
- Banco de Dados: AdventureWorks 2019
Desenvolvido com ❤️ usando Python, Streamlit e muito ☕
Última atualização: Fevereiro 2026
Para quem já tem tudo instalado:
# 1. Clone/copie os arquivos
cd C:\DashboardVendas
# 2. Crie e ative ambiente virtual
python -m venv venv
venv\Scripts\activate
# 3. Instale dependências
pip install -r requirements.txt
# 4. Configure .env
# Crie arquivo .env com suas credenciais
# 5. Teste conexão
python test_connection_sqlexpress.py
# 6. Execute!
streamlit run dashboard.pyPronto! Acesse http://localhost:8501 🚀