Transformo dados em decisão: Power BI de ponta a ponta, automação de processos e Inteligência Artificial aplicada a negócios. Mais de 10 anos entre dados e negócios, nos setores de saúde, energia, estacionamentos e startup de mobilidade urbana. I turn data into decisions: end-to-end Power BI, process automation and AI applied to business. Over 10 years across data and business, in healthcare, energy, parking and an urban mobility startup.
LinkedIn Baixar currículoDownload CV (English)
Sou profissional sênior de Business Intelligence & Analytics, criador do projeto AUDIT-IA, uma auditoria de receita com Inteligência Artificial que evoluiu de 95% para 99% de assertividade validada pelos auditores e mapeou mais de R$ 100 mil em perdas de receita em 7 semanas. I am a senior Business Intelligence & Analytics professional and the creator of AUDIT-IA, an AI-powered revenue audit that evolved from 95% to 99% accuracy validated by field auditors and mapped over R$ 100k in revenue leakage within 7 weeks.
Minha atuação cobre o ciclo completo do dado: ETL e modelagem (Power Query/M, Pentaho PDI, SQL), medidas DAX documentadas, governança e RLS no Power BI Service, automação com n8n e Power Automate, apps de campo no Power Apps e IA generativa com engenharia de prompt. My work covers the full data lifecycle: ETL and modeling (Power Query/M, Pentaho PDI, SQL), documented DAX measures, governance and RLS on Power BI Service, automation with n8n and Power Automate, field apps on Power Apps and generative AI with prompt engineering.
Especialista em Gestão e Análise Estratégica de Dados pela PUC Minas e graduado em Administração pela FAA-IESA, comecei no negócio antes do dado: 9 anos em uma operadora de saúde, de estagiário a analista de BI, passando por liderança de equipe. Entendo o problema antes de abrir a ferramenta. A PUC Minas specialist in Strategic Data Management & Analysis with a BBA from FAA-IESA, I started on the business side: 9 years at a healthcare company, from intern to BI analyst, including team leadership. I understand the problem before opening the tool.
Auditoria de receita com IA: toda semana, o motor analisa dados operacionais e financeiros da rede, nomeia a causa raiz de cada anomalia e prioriza os casos críticos. A triagem que exigia visitas exploratórias (2 estacionamentos por auditor ao dia) passou a sair em 10 minutos, e o auditor vai a campo com o diagnóstico em mãos. AI-powered revenue audit: every week the engine analyzes operational and financial data across the network, names the root cause of each anomaly and ranks critical cases. Triage that once required exploratory visits (2 sites per auditor per day) now takes 10 minutes, and auditors go to the field with the diagnosis in hand.
| UnidadeSite | Causa raizRoot cause | R$ | Status |
|---|---|---|---|
| 127 - Torre Alfa | Abertura manualManual gate open | 3.240 | EvasãoEvasion |
| 204 - Plaza Central | Carga e descargaLoading bay | 2.110 | Em análiseReviewing |
| 318 - Ed. Aurora | Desconto indevidoImproper discount | 1.480 | Em análiseReviewing |
| 092 - Mirante Sul | Falha de leituraReader failure | 920 | ResolvidoResolved |
RAG com regras de auditoria + engenharia de prompt; a IA nomeia causa raiz entre 4 categorias e marca alto potencial de evasão.RAG with audit rules + prompt engineering; the AI names one of 4 root-cause categories and flags high evasion risk.
Cada diagnóstico é validado pelos auditores em planilha de controle; divergências viram ajuste imediato do modelo.Every diagnosis is validated by auditors in a control sheet; divergences become immediate model adjustments.
Fluxos no Power Automate publicam o relatório semanal e o bot de auditoria nos canais do time.Power Automate flows publish the weekly report and the audit bot to the team's channels.
Recriações fiéis à arquitetura de painéis reais que desenvolvo, com nomes, marcas e números 100% fictícios. Cada um representa uma família de problema: funil comercial, mídia paga, retenção e financeiro. Faithful recreations of the architecture of real dashboards I build, with 100% fictitious names, brands and figures. Each one represents a problem family: sales funnel, paid media, retention and finance.
No painel real, a matriz é uma pivotTable com parâmetro de "meses seguintes", medidas de retenção % + quantidade, e recortes por zona, faixa de cobertura e perfil de cliente, com análises de cross-use entre produtos.In the real dashboard, the matrix is a pivotTable with a "following months" parameter, retention % + count measures, and slicers by zone, coverage tier and customer profile, plus cross-use analyses between products.
Amostras reais do meu padrão de trabalho, com tabelas e regras renomeadas: modelo estrela com role-playing de datas, medidas DAX sempre documentadas e Power Query avançado. Real samples of my working standard, with renamed tables and rules: star schema with role-playing dates, always-documented DAX measures and advanced Power Query.
Fatos "espelho" (produção e churn) convergem no calendário por datas diferentes (role-playing) e a fato mensal, derivada em Power Query com List.Generate, fecha o triângulo por competência. Relação tracejada = inativa, ativada via USERELATIONSHIP nas medidas de churn."Mirror" facts (production and churn) converge on the calendar through different dates (role-playing), and the monthly fact, derived in Power Query with List.Generate, closes the triangle by accrual month. Dashed relation = inactive, enabled via USERELATIONSHIP in churn measures.
% Parceiros com Ocorrência = DIVIDE( [Qtd Parceiros com Ocorrência], [Qtd Parceiros Visitados], 0 ) -- Formato indicado: Porcentagem com 2 casas decimais -- Métrica principal do BSC: % dos parceiros únicos visitados -- no período que registraram ocorrência. -- Measure branching: reaproveita as duas medidas base do modelo. Churn com Débito (D180) = CALCULATE( [Total Parceiros Cancelados], FT_PARCEIROS_CHURN[ZONA] = "PRIME", FT_PARCEIROS_CHURN[DIAS_ATIVO] <= 180, FT_PARCEIROS_CHURN[DATA_ATIVACAO] >= DATE(2026, 2, 1), FT_PARCEIROS_CHURN[ISENTO_D180] = "NÃO" ) -- Formato indicado: Número inteiro -- Cancelamentos que geram débito D180 no mês: só zona prioritária, -- ativados após a regra vigente e fora da lista de isenções -- mantida no Power Query. Data da Visita Anterior = IF( ISEMPTY(FT_CHECKLIST), BLANK(), VAR DataAtual = MAX(DIM_VISITAS[DATA_VISITA_HORA]) VAR Parceiro = MAX(DIM_VISITAS[ID_PARCEIRO]) RETURN CALCULATE( MAX(DIM_VISITAS[DATA_VISITA]), FILTER(ALL(DIM_VISITAS), DIM_VISITAS[ID_PARCEIRO] = Parceiro && DIM_VISITAS[DATA_VISITA_HORA] < DataAtual) ) ) -- Formato indicado: Data (dd/mm/aaaa) -- Visita imediatamente anterior do mesmo parceiro, para a trilha -- de validação. Compara por data e hora para ordenar revisitas -- no mesmo dia; ISEMPTY evita produto cartesiano.
% Partners with Occurrence = DIVIDE( [Qty Partners with Occurrence], [Qty Partners Visited], 0 ) -- Suggested format: Percentage, 2 decimal places -- Main BSC metric: % of unique partners visited in the -- period that logged an occurrence. -- Measure branching: reuses the model's two base measures. Churn with Debit (D180) = CALCULATE( [Total Cancelled Partners], FT_PARTNER_CHURN[ZONE] = "PRIME", FT_PARTNER_CHURN[ACTIVE_DAYS] <= 180, FT_PARTNER_CHURN[ACTIVATION_DATE] >= DATE(2026, 2, 1), FT_PARTNER_CHURN[D180_EXEMPT] = "NO" ) -- Suggested format: Whole number -- Cancellations that generate the D180 debit in the month: -- priority zone only, activated after the current rule and -- outside the exemption list kept in Power Query. Previous Visit Date = IF( ISEMPTY(FT_CHECKLIST), BLANK(), VAR CurrentDate = MAX(DIM_VISITS[VISIT_DATETIME]) VAR Partner = MAX(DIM_VISITS[PARTNER_ID]) RETURN CALCULATE( MAX(DIM_VISITS[VISIT_DATE]), FILTER(ALL(DIM_VISITS), DIM_VISITS[PARTNER_ID] = Partner && DIM_VISITS[VISIT_DATETIME] < CurrentDate) ) ) -- Suggested format: Date (dd/mm/yyyy) -- Immediately previous visit for the same partner, for the -- validation trail. Compares by date and time to order -- same-day revisits; ISEMPTY avoids a cartesian product.
// Reincidência por parceiro: ordena, agrupa e numera as ocorrências #"Linhas Ordenadas" = Table.Sort(Fonte, {{"PARCEIRO", Order.Ascending}, {"DATA_EVENTO", Order.Ascending}}), #"Agrupadas" = Table.Group(#"Linhas Ordenadas", {"PARCEIRO"}, { {"Dados", each Table.AddIndexColumn(_, "REINCIDENCIA", 1, 1, Int64.Type)} }), // Protocolo de ação conforme o nível de reincidência #"Protocolo" = Table.AddColumn(#"Expandida", "PROTOCOLO_ACAO", each if [REINCIDENCIA] >= 3 then "Escalonar avaliação da parceria" else if [REINCIDENCIA] = 2 then "Formalizar penalidade contratual" else "Orientação pelo time de atendimento", type text), // Saldo devedor móvel por consultor: List.Generate itera mês a mês, // abate o débito com teto de 30% da comissão e carrega o saldo. CalculoLoop = List.Generate( () => [ Indice = 0, DividaTotal = Debitos{0}, LimiteDesconto = Comissoes{0} * 0.30, DescontoAplicado = List.Min({DividaTotal, LimiteDesconto}), ComissaoLiquida = Comissoes{0} - DescontoAplicado, SaldoAtual = DividaTotal - DescontoAplicado ], each [Indice] < QtdLinhas, (estado) => let i = estado[Indice] + 1, divida = estado[SaldoAtual] + Debitos{i}, limite = Comissoes{i} * 0.30, desconto = List.Min({divida, limite}) in [ Indice = i, DividaTotal = divida, LimiteDesconto = limite, DescontoAplicado = desconto, ComissaoLiquida = Comissoes{i} - desconto, SaldoAtual = divida - desconto ] ) // Resultado: fluxo Bruta → Débito → Teto 30% → Líquida → Saldo, // competência a competência, sem depender de coluna auxiliar no BD.
// Recurrence per partner: sort, group and number the occurrences #"Sorted Rows" = Table.Sort(Source, {{"PARTNER", Order.Ascending}, {"EVENT_DATE", Order.Ascending}}), #"Grouped" = Table.Group(#"Sorted Rows", {"PARTNER"}, { {"Data", each Table.AddIndexColumn(_, "RECURRENCE", 1, 1, Int64.Type)} }), // Action protocol based on the recurrence level #"Protocol" = Table.AddColumn(#"Expanded", "ACTION_PROTOCOL", each if [RECURRENCE] >= 3 then "Escalate partnership review" else if [RECURRENCE] = 2 then "Formalize contractual penalty" else "Guidance from the support team", type text), // Rolling debit balance per consultant: List.Generate iterates month // by month, caps the discount at 30% of gross commission and carries // the remaining balance forward. CalcLoop = List.Generate( () => [ Index = 0, TotalDebt = Debits{0}, DiscountCap = Commissions{0} * 0.30, AppliedDiscount = List.Min({TotalDebt, DiscountCap}), NetCommission = Commissions{0} - AppliedDiscount, CurrentBalance = TotalDebt - AppliedDiscount ], each [Index] < RowCount, (state) => let i = state[Index] + 1, debt = state[CurrentBalance] + Debits{i}, cap = Commissions{i} * 0.30, discount = List.Min({debt, cap}) in [ Index = i, TotalDebt = debt, DiscountCap = cap, AppliedDiscount = discount, NetCommission = Commissions{i} - discount, CurrentBalance = debt - discount ] ) // Result: Gross → Debit → 30% cap → Net → Balance flow, // month by month, with no helper column needed in the database.
Aplicativos corporativos que conectam a operação de rua ao modelo de dados, com telas e nomes recriados de forma fictícia. Corporate apps connecting street operations to the data model, with screens and names recreated fictitiously.
Registro de visitas em campo com validação por geolocalização (fórmula de Haversine em Power Fx): o formulário só libera o envio a até 50 m da unidade, fechando o ciclo do AUDIT-IA com prova de presença. Field visit logging with geolocation validation (Haversine formula in Power Fx): the form only unlocks within 50 m of the site, closing the AUDIT-IA loop with proof of presence.
Power FxGPS + HaversineAutoria individualSolo buildApp de captação que registra potenciais parceiros em campo com GPS automático, alimentando o funil comercial e os painéis de expansão em Power BI. Acquisition app registering potential partners in the field with automatic GPS, feeding the sales funnel and the expansion dashboards in Power BI.
GPSFunil → Power BIConstrução em equipeTeam buildSuíte de visitas, atendimentos e ocorrências dos agentes de rua, com check-in georreferenciado e trilha completa para os indicadores de cobertura. Suite for street agents' visits, support and incidents, with geo check-in and a full trail feeding coverage KPIs.
SharePointCheck-in GPSConstrução em equipeTeam buildMais de 20 fluxos de automação em produção e um repositório ETL corporativo com mais de 1.000 transformações e 230 jobs no Pentaho (PDI), integrando Oracle, Azure SQL, PostgreSQL e APIs REST/JSON. Exemplos com nomes fictícios: Over 20 automation flows in production and a corporate ETL repository with 1,000+ transformations and 230 jobs in Pentaho (PDI), integrating Oracle, Azure SQL, PostgreSQL and REST/JSON APIs. Examples with fictitious names:
Publica o diagnóstico semanal do AUDIT-IA para o time, sem intervenção manual.Publishes the weekly AUDIT-IA diagnosis to the team, no manual steps.
Varredura periódica da base; tickets críticos disparam notificação em tempo real.Periodic database sweep; critical tickets trigger real-time notifications.
Nenhuma atualização quebrada passa despercebida: o erro chega ao canal antes de o usuário sentir.No broken refresh goes unnoticed: the error reaches the channel before users notice.
Upsert diário mantém o CRM dos apps de campo e o DW analítico consistentes.Daily upsert keeps the field apps' CRM and the analytical DW consistent.
Novos registros nos apps disparam avisos e agendamentos automáticos para os responsáveis.New app records trigger automatic alerts and scheduling for owners.
Pós-graduação Lato Sensu · Gestão e Análise Estratégica de Dados (2026)Postgraduate specialization · Strategic Data Management & Analysis (2026)
SQL, Python, Estatística, ETL/ELT, Modelagem Dimensional, Governança de Dados (DMBoK, LGPD), Machine Learning, IA Generativa, Data Storytelling.SQL, Python, Statistics, ETL/ELT, Dimensional Modeling, Data Governance (DMBoK, LGPD), Machine Learning, Generative AI, Data Storytelling.
FAA-IESA · Graduação em Administração (2022)BBA, Business Administration (2022)