DATA & BI EXPERT

Transformando dados em resultados mensuráveis: +R$2.1M em economia identificada, 40% redução em processos ETL.

Impacto Mensurável

40%
Redução tempo ETL
Processos bancários
R$ 2.1M
Economia identificada
Anual, Agronegócio
15h/sem
Processos automatizados
Python + Power Automate
99.8%
Precisão dashboards
PL-300 Certified
Alysson Uchoa, Analista de Dados Sênior certificado PL-300
Fortaleza, Ceará
Analista de Dados - Banco do Nordeste
Certificado PL-300 Microsoft

Resultados Comprovados:

Como especialista certificado PL-300 pela Microsoft no Banco do Nordeste, lidero a transformação de dados no setor de Agronegócio. Minhas soluções de BI e automação resultaram em redução de 40% no tempo de processamento ETL e identificação de R$ 2.1 milhões em oportunidades de otimização no último ano. Pós-graduando em Machine Learning & Data Science na PUC Campinas.

Habilidades Técnicas

BI & Visualização

Power BI (PL-300), DAX Avançado (contextual, YoY, classificação), Power Query (Linguagem M), Dashboards Dinâmicos, Storytelling com Dados.

Bancos de Dados

SQL Server, Window Functions (PARTITION BY, ROW_NUMBER), CROSS APPLY, Otimização de Queries (índices), ETL, Tratamento de Dados Legados.

Programação

Python, Automação, Pandas, NumPy, APIs, Scripting, Processamento de Dados.

Machine Learning

Scikit-learn, Análise Preditiva, Feature Engineering, Modelos Supervisionados.

Cases de Alto Impacto

DATA QUALITY 01

Correção Inteligente de Geolocalização | Análise de Pares

Método inovador para identificar e corrigir coordenadas geográficas inconsistentes. Em vez de usar média global (que falha com outliers extremos), o algoritmo compara cada ponto com seus pares dentro da mesma cidade, identificando o padrão natural e corrigindo apenas os registros problemáticos.

PYTHON PANDAS NUMPY GEOLOCALIZAÇÃO OUTLIER DETECTION DATA QUALITY
AUTOMAÇÃO 02

Radar PMPR – Automação de Acompanhamento de Metas

Rotina automatizada em Python que consolida bases de crédito, calcula projeções de metas e dispara e-mails personalizados com gráficos e planilhas para superintendências. Redução de 8h/semana em trabalho manual e eliminação de erros de cálculo.

PYTHON OPENPYXL PANDAS OUTLOOK ETL LGPD
POWER BI 03

Dashboard de Análise de Vendas | Ciclismo

Análise completa de operação com 250 clientes: 45,6% inativos, faturamento de R$ 3,05M e público feminino responsável por 60,9% da receita.

POWER BI DAX ANÁLISE DE DADOS KPI
DAX AVANÇADO 04

Matriz de Performance: Lucro vs. Volume

CLASSIFICAÇÃO DAX · 2.905 PRODUTOS · 4 QUADRANTES 15 itens "baixa performance" (como Kit Corporativo) geram alto volume mas consomem a margem. Clientes diamante gastam 27% nesses itens. R$ 8,49M faturamento 48,24% margem média

POWER BI DAX AVANÇADO CLASSIFICAÇÃO SCATTER PLOT SQL
AUTOMAÇÃO • API 05

Automação de Certificados: de dias para minutos

Uma cliente precisava enviar certificados para centenas de alunos, manualmente. Desenvolvi uma automação em Python que integra Excel, Word, PDF, API do ClickSign e Outlook. O que levava dias, agora roda em minutos, sem erros.

PYTHON PANDAS API CLICKSIGN OUTLOOK PDF
100% AUTOMÁTICO

Publicações Técnicas

Conteúdo publicado no LinkedIn sobre SQL Server, Power BI, DAX e Power Query - com código real e contexto de produção.

SQL SERVER

DATEDIFF vs DATEADD em Filtros

DATEDIFF no WHERE impede uso de índice e processa linha por linha. Reescrever com DATEADD reduziu uma consulta de 325 mil linhas de 42s para 30s - e ainda corrigiu a semântica: DATEDIFF conta mudança de mês no calendário, não intervalo exato.

SQL PERFORMANCE ÍNDICE
-- Lento (sem índice)
WHERE DATEDIFF(MONTH, dt_ctr, GETDATE()) <= 6

-- Rápido (usa índice)
WHERE dt_ctr >= DATEADD(MONTH, -6, GETDATE())
SQL SERVER

GROUP BY vs EXISTS

GROUP BY agrega. EXISTS verifica presença - e para assim que acha o primeiro registro válido, sem processar o restante. Para filtros de existência, EXISTS é mais eficiente e semanticamente correto.

SQL FILTRO SUBQUERY
SELECT DISTINCT nome_cliente
FROM pedidos p1
WHERE EXISTS (
  SELECT 1 FROM pedidos p2
  WHERE p2.id_cliente = p1.id_cliente
    AND p2.id_tipo = 1
)
SQL SERVER

PARTITION BY no Dia a Dia

Precisava entender o que cada código de segmentação representava no sistema - sem tabela de descrição. A solução: ROW_NUMBER com PARTITION BY trouxe os 5 registros mais recentes de cada tipo em uma única consulta, substituindo N consultas manuais.

SQL WINDOW FUNCTION ROW_NUMBER
ROW_NUMBER() OVER (
  PARTITION BY tipo_segmentacao
  ORDER BY data_inicio DESC
) AS rn
-- WHERE rn <= 5
SQL SERVER

CROSS APPLY em Bases Históricas

Relatório mensal dos maiores clientes PF precisava incluir renda. A base de renda é histórica - múltiplos registros por cliente. JOIN simples triplicava linhas. CROSS APPLY com TOP 1 garante um único registro por cliente, sempre o mais recente.

SQL CROSS APPLY INTEGRIDADE
CROSS APPLY (
  SELECT TOP 1 * FROM BASE_RENDA RD
  WHERE RD.ID_CLIENTE = CLI.ID
    AND RD.NOTACREDITO IS NOT NULL
  ORDER BY RD.DATA_REFERENCIA DESC
) AV
SQL SERVER

CPF Numérico - Tratamento Direto na Query

Sistemas legados armazenam CPF como campo numérico, perdendo zeros à esquerda e quebrando qualquer JOIN. Solução com REPLICATE e RIGHT reconstruindo corpo (9 dígitos) e dígito verificador (2 dígitos) - sem alterar a estrutura da tabela.

SQL REPLICATE DADOS LEGADOS
CASE WHEN LEN(NR_CPF) < 9
  THEN RIGHT(REPLICATE('0',
    9-LEN(NR_CPF))+CAST(NR_CPF AS VARCHAR),9)
  ELSE CAST(NR_CPF AS VARCHAR)
END + -- + dígito verificador
...
SQL SERVER

NOT EXISTS vs NOT IN - Clientes com Produto Exclusivo

Precisava retornar clientes que têm um produto específico e somente esse produto. NOT IN falha silenciosamente com nulos. NOT EXISTS lida com nulos corretamente e tem melhor desempenho em bases grandes - para assim que encontra o primeiro registro que satisfaz a condição.

SQL NOT EXISTS FILTRO EXCLUSIVO
AND NOT EXISTS (
  SELECT 1
  FROM TB_OPERACAO sub
  WHERE sub.CLIENTE_SCD = cli.CLIENTE_SCD
    AND sub.PRODUTO <> 'PRODUTO_X'
)
DAX

YoY Correto com DAX - Intervalo Equivalente

O erro comum: comparar ano fechado com ano em andamento. A medida de 2025 usa DATE(2025, MONTH(TODAY()), DAY(TODAY())) como limite - sempre o mesmo período do ano atual, garantindo comparação justa. A %Variação trata o zero como crescimento total para novas praças.

DAX POWER BI YoY
%Variação =
IF(AND([2025]=0,[2026]>0), 1,
  IF(AND([2025]=0,[2026]=0), 0,
    DIVIDE([2026],[2025],0)-1
  )
)
DAX

Custo Total Contextual com ISCROSSFILTERED

Medida que detecta o contexto de filtro ativo e ajusta o salário automaticamente: se há filtro de cliente, salário é zero (cliente não paga o salário sozinho); filtro de mês, proporcional; sem filtro, anualizado. Custo correto em qualquer visão.

DAX ISCROSSFILTERED SWITCH
VAR TemCli = ISCROSSFILTERED(dim_clientes)
VAR TemMes = ISFILTERED('cal'[Mês])
RETURN SWITCH(TRUE(),
  TemCli, [Custo Produtos],
  NOT TemMes, [Salário]*12 + [...],
  TRUE, [Salário] + [...]
)
DAX

RANKX com Duplicatas - ALL('base') vs ALL('base'[coluna])

Ranking por valor retornava duplicatas e ignorava filtros das segmentações. O problema estava no escopo do ALL: ALL('base') remove todos os filtros da tabela inteira, incluindo vendedor e mês. Trocar para ALL('base'[Cliente]) corrigiu os dois problemas.

DAX RANKX ALL
-- Errado: ignora segmentações
RANKX(ALL('base'), [valor],, DESC, Dense)

-- Correto: mantém filtros ativos
RANKX(ALL('base'[Cliente]), [valor],, DESC, Dense)
POWER QUERY - M

MissingField.Ignore - Automação Segura

Arquivo de março chegou com colunas em minúsculo. Sem alterar a fonte (outros usuários dependiam dela), o tratamento foi feito no parâmetro Transformar Arquivo - antes da consolidação, individualmente em cada arquivo. MissingField.Ignore garante que arquivos já corretos não quebrem.

POWER QUERY LINGUAGEM M ETL
Table.RenameColumns(
  #"Cabeçalhos Promovidos",
  {{"uf_ag","UF_AG"},
   {"somadeqtde","SomaDeQtde"}},
  MissingField.Ignore
)
POWER QUERY - M

De 8 Etapas para 2 com Record.FieldOrDefault

8 etapas de substituição de valores, cada uma com espaços ocultos. List.Accumulate causava efeito cascata ("MEDIO II" virava "MEDIOI"). Record.FieldOrDefault funciona como dicionário - processa cada valor de forma independente, sem cascata.

POWER QUERY LINGUAGEM M OTIMIZAÇÃO
each Record.FieldOrDefault(
  [#"MÉDIO II"="MEDIO",
   #"MEDIO I"="MEDIO",
   MINI="MINI/MICRO",
   MICRO="MINI/MICRO"],
  _, _)

Formação & Certificações

Microsoft Certified: Power BI Data Analyst Associate (PL-300)

Microsoft | 2025 | Validade: 2026

Domínio em: DAX, Power Query, Data Modeling, Dashboard Design, Row-Level Security

CERTIFICAÇÃO

Pós-Graduação em Machine Learning e Ciência de Dados

PUC Campinas | 2025 - 2026

Deep Learning, NLP, Computer Vision, Model Deployment, MLOps

ESPECIALIZAÇÃO

Análise e Desenvolvimento de Sistemas

Faculdade CDL | 2020 - 2023

Nota: 9.2 | Projeto Final: Sistema de Recomendação com Python

GRADUAÇÃO