Desenvolver um dashboard interativo para análise de vendas da base AdventureWorks, atendendo aos seguintes requisitos:
- ✅ Conexão ao SQL Server (AdventureWorks)
- ✅ Consulta SQL otimizada
- ✅ Manipulação de dados com Pandas
- ✅ Visualizações com Plotly
- ✅ Dashboard interativo com Streamlit
- ✅ Filtros dinâmicos
- ✅ KPIs principais
┌─────────────────────────────────────────┐
│ Interface do Usuário │
│ (Streamlit UI) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Camada de Visualização │
│ (Plotly Charts) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Camada de Processamento │
│ (Pandas DataFrames) │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ Camada de Dados │
│ (SQL Server) │
└─────────────────────────────────────────┘
- Conexão: Estabelece conexão com SQL Server via PyODBC
- Extração: Executa query SQL otimizada
- Transformação: Processa dados com Pandas
- Filtros: Aplica filtros selecionados pelo usuário
- Agregação: Calcula métricas e KPIs
- Visualização: Gera gráficos interativos
- Apresentação: Renderiza no Streamlit
Escolha: PyODBC
- ✅ Nativo do Python
- ✅ Suporte completo ao SQL Server
- ✅ Bom desempenho
- ✅ Documentação extensa
Alternativas consideradas:
- SQLAlchemy: Mais pesado para este caso de uso
- pymssql: Menos mantido
Escolha: Streamlit
- ✅ Rápido desenvolvimento
- ✅ Interface intuitiva
- ✅ Excelente integração com Pandas/Plotly
- ✅ Auto-reload durante desenvolvimento
- ✅ Deploy simplificado
Alternativas consideradas:
- Dash: Mais verboso
- Flask/Django: Requer mais código boilerplate
- Power BI: Não é Python-native
Escolha: Plotly
- ✅ Gráficos interativos nativamente
- ✅ Aparência profissional
- ✅ Boa documentação
- ✅ Integração perfeita com Streamlit
Alternativas consideradas:
- Matplotlib: Menos interativo
- Seaborn: Menos interativo
- Altair: Curva de aprendizado maior
Escolha: Pandas
- ✅ Padrão da indústria
- ✅ Performance adequada
- ✅ Sintaxe intuitiva
- ✅ Ampla comunidade
- Índices existentes: Aproveitamento de PKs e FKs
- JOINs eficientes: INNER JOIN onde possível
- LEFT JOIN apenas quando necessário: Categorias podem ser NULL
- WHERE com filtro: Eliminação de dados inválidos
- ORDER BY final: Reduz overhead
- Cache de conexão:
@st.cache_resource - Cache de dados:
@st.cache_data(ttl=3600) - Type hints: Melhor legibilidade e manutenção
- Funções modulares: Código reutilizável
- Lazy loading: Carregamento sob demanda
- Layout wide: Melhor uso do espaço
- Sidebar para filtros: UX organizada
- Multicolumn layout: Melhor visualização de KPIs
- Expanders: Reduz poluição visual
- Vendas Totais: Soma de TotalDue
- Total de Pedidos: Count distinct de SalesOrderID
- Ticket Médio: Média de TotalDue
- Produtos Vendidos: Count distinct de ProductID
- Tipo: Line Chart com área preenchida
- Eixo X: YearMonth (período)
- Eixo Y: TotalDue (valor de vendas)
- Interatividade: Hover com detalhes
- Tipo: Horizontal Bar Chart
- Eixo X: LineTotal (total de vendas)
- Eixo Y: ProductName
- Ordenação: Descendente por valor
- Cor: Gradient baseado em valor
- Tipo: Pie Chart
- Valores: LineTotal por categoria
- Labels: ProductCategory
- Percentuais: Mostrados automaticamente
- Tipo: Horizontal Bar Chart
- Eixo X: TotalDue
- Eixo Y: RegionName
- Cor: Gradient verde
- Clareza: Informação clara e direta
- Consistência: Padrões visuais mantidos
- Feedback: Loading states e mensagens informativas
- Eficiência: Menos cliques para mais informação
- Responsividade: Layout adaptável
- Primária:
#1f77b4(Azul Streamlit) - Secundária:
#f0f2f6(Cinza claro) - Sucesso: Verde (KPIs positivos)
- Background: Branco/Cinza claro
- Headers: 2.5rem, bold
- KPIs: 2rem, bold
- Body: 1rem, regular
- Font: Sans-serif system font
- ✅ Conexão com banco de dados
- ✅ Carregamento de dados
- ✅ Aplicação de filtros individuais
- ✅ Aplicação de múltiplos filtros
- ✅ Cálculo de KPIs
- ✅ Renderização de gráficos
- ✅ Responsividade da interface
- ✅ Performance com dados completos
- Data: 2011-2014
- Região: California
- País: United States
- Categoria: Bikes
- Resultado: ✅ Sucesso
- Filtros incompatíveis
- Resultado: ✅ Mensagem adequada exibida
- Dataset completo (~120k registros)
- Resultado: ✅ < 3s para carregar e filtrar
- Conexão ao DB: ~200ms
- Query SQL: ~1-2s (primeira vez)
- Processamento Pandas: ~500ms
- Renderização UI: ~300ms
- Total (primeira carga): ~3s
- Total (com cache): ~800ms
- Aplicação base: ~150MB
- Com dados carregados: ~350MB
- Pico de uso: ~500MB
- Registros testados: 120,000+
- Performance: Aceitável
- Recomendação: Para >1M registros, considerar:
- Agregação no SQL
- Paginação
- Data warehouse
- Sem credenciais no código: Configuração externa
- Prepared statements: PyODBC previne SQL injection
- Input validation: Filtros validados
- HTTPS recomendado: Para deploy em produção
- Autenticação de usuários
- Criptografia de credenciais
- Logs de auditoria
- Rate limiting
- RBAC (Role-Based Access Control)
# Push para GitHub
git push origin main
# Conectar no streamlit.io
# Deploy automáticoFROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8501
CMD ["streamlit", "run", "dashboard.py"]- Suporte nativo para Python
- Integração com Azure SQL
- Controle total
- Necessita configuração manual
- Otimização de Query: Balancear completude vs performance
- Cache Strategy: Definir TTL adequado
- UX de Filtros: Evitar sobrecarga cognitiva
- Visualizações: Escolher tipos adequados para cada métrica
- Query: LEFT JOIN apenas onde necessário
- Cache: TTL de 1h, refresh manual disponível
- UX: Sidebar colapsável, filtros progressivos
- Viz: Plotly para interatividade, cores consistentes
- Exportar dados para Excel/CSV
- Adicionar filtro de cliente
- Comparação entre períodos
- Dark mode
- Machine Learning para previsões
- Análise de cohort
- Drill-down em gráficos
- Alertas automáticos
- Multi-tenancy
- Real-time updates
- Mobile app
- Advanced analytics
- Streamlit Best Practices
- SQL Performance Tuning
- Data Visualization Guidelines
- Análise de requisitos: 30 min
- Setup do ambiente: 20 min
- Desenvolvimento SQL: 40 min
- Desenvolvimento Python: 2h
- Testes: 40 min
- Documentação: 50 min
- Total: ~5h
- ✅ Python
- ✅ SQL (T-SQL)
- ✅ Pandas
- ✅ Streamlit
- ✅ Plotly
- ✅ Git
- 📋 Planejamento
- 🎯 Foco em requisitos
- 💡 Resolução de problemas
- 📝 Documentação clara
- ⏱️ Gestão de tempo
Para questões sobre o projeto:
- Consulte o README.md
- Execute test_connection.py
- Revise a documentação SQL
Desenvolvido com dedicação para o Teste de Habilidade BI - Hexagon
Última atualização: Fevereiro 2026