xperiun/pbi-modelo-review
Audita modelo Power BI (PBIP) e gera relatório priorizado com anti-patterns, score 0-100 e recomendações acionáveis. Use quando o usuário pedir "audita esse modelo", "revisa esse power bi", "tá bem feito?", "manda ver no review", ou apontar uma pasta PBIP pra análise crítica.
npx skills add https://github.com/xperiun/claude-code-powerbi-skills --skill pbi-modelo-review
> 📦 Distribuída publicamente: github.com/xperiun/claude-code-powerbi-skills — pasta claude-code/pbi-modelo-review/ (skill nativa) + claude-web/pbi-modelo-review.zip (upload no Claude.ai). Mudança aqui exige sincronizar lá: atualizar pasta + regenerar ZIP (Python zipfile, ver CLAUDE.md) + commit + bump CHANGELOG. Repo é open-source, leiame público — evitar referências internas (Xperiun-only) na SKILL.md.
Audita um projeto Power BI (formato PBIP) e devolve relatório priorizado com:
.pbix e quer mapa rápido de qualidadeNão usar quando:
/pbi-doc/pbi-dax-create/pbi-perf).SemanticModel/ e .Report/. Se o usuário só tem .pbix, instruir conversão antes de prosseguir:Power BI Desktop → File → Save as → Power BI Project (.pbip).tmdl (via filesystem ou upload — ver "Modos de execução" abaixo)Se faltar PBIP, retornar mensagem curta:
> Esse projeto ainda está em .pbix (binário). Pra eu auditar, salva como Power BI Project: File → Save as → Power BI Project (.pbip). Vira uma pasta de texto e aí eu consigo ler. Avisa quando converter.
E encerrar — não tentar rodar nada.
A skill detecta automaticamente o ambiente e adapta input/output:
.SemanticModel/.tmdl da pasta ./SemanticModel/./_review/index.html + ./_review/relatorio.md na raiz do projeto Power BI> Pra eu auditar, anexe nesse chat:
> - Os arquivos .tmdl da pasta SemanticModel/definition/ (model.tmdl, relationships.tmdl, expressions.tmdl)
> - Os arquivos da pasta SemanticModel/definition/tables/ (1 .tmdl por tabela)
>
> Pode arrastar todos de uma vez ou zipar a pasta SemanticModel/ e subir o ZIP.
Verificar se a pasta .SemanticModel/ é acessível via filesystem:
Se ambíguo, perguntar uma vez:
> Você tá rodando isso no Claude Code (CLI/IDE com acesso à pasta) ou no claude.ai (web)? Pra Code eu leio a pasta sozinho; pra web preciso que você suba os arquivos.
tudo)tudo → reporta crítico + médio + levecrítico+médio → ignora leves (foco no que cobra juros)só crítico → só o que bloqueia produçãoSe o usuário não especificar, perguntar uma vez antes de rodar:
> Quer auditoria completa (todos os níveis) ou só os críticos+médios? Default é completa.
./SemanticModel/ (ou *.SemanticModel/ na raiz).tmdl em ./SemanticModel/tables/./SemanticModel/model.tmdl, ./SemanticModel/relationships.tmdl (se existir)measure em todos os tmdl), N relacionamentos, tamanho do projetoLer references/checks.md e rodar as 6 famílias de check descritas lá:
/, variáveis não usadas, CALCULATE aninhadoCada check encontrado vira um issue com:
id (slug único, ex: model-flat-detected)categoria (uma das 6 acima)severidade (critical | medium | light)titulo (uma frase, máx 90 chars)path (caminho do arquivo + linha quando aplicável)por_que_importa (1-2 parágrafos explicativos)como_corrigir (1 parágrafo + opcionalmente um snippet TMDL/DAX)Fórmula simples:
score = max(0, 100 - (criticos × 4) - (medios × 1.5) - (leves × 0.4))
Limites:
A label sempre usa champagne gold (vibe v4 "alerta elegante", não "vermelho de painel").
Filtrar issues conforme severidade mínima escolhida e gerar dois arquivos:
A. Markdown (versionável Git):
templates/relatorio.md./_review/relatorio.md na raiz do projeto Power BIB. HTML standalone (visual):
🚨 REGRA INVIOLÁVEL — usar templates/relatorio.html LITERAL:
templates/relatorio.html — esse arquivo já tem todo o CSS, todo o HTML estrutural, todos os tokens DS v4 (Bebas Neue, accent-gold, gold-grid + beams animados, orb-v2 elipses blue/purple, brackets), todo o JS de filtro de severidade.{{...}} pelos dados de auditoria reais. Lista completa em references/checks.md desta skill (seção "Placeholders do templates/relatorio.html").--accent-gold-bright #E8C9A0, --accent-glow #7099FF, --neon-magenta #C47FFF)<div class="gold-grid">, <div class="section-orb">, ou ornamentos do template<!-- ... --> — comentários são instruções pra você, não conteúdo a substituir.<style>...</style> ou <script>...</script> — CSS e JS ficam intocados.ã, ç, é, á, õ, ê, í, ú) e símbolos especiais (├, └, ─, →, ↔, ↑, ↓, ⚠, ·, —) devem aparecer como caracteres reais UTF-8, NÃO como sequências escapadas/HTML entities/mojibake.críticos, →, Atenção, ⚠crÃticos, â, Atenção./_review/index.html (modo Code) ou retornar como artifact (modo Web).#f5a623 (laranja) ou #7c6af7 (roxo), ou fonte 'Segoe UI' → ignorou template, refaz.ã ou â → encoding quebrado, refaz UTF-8.Devolver mensagem curta no chat com:
_review/index.html no navegador pra ver completo"[raiz do projeto Power BI do usuário]/
├── SemanticModel/ ← input (não tocar)
├── Report/ ← input (não tocar)
└── _review/ ← OUTPUT da skill
├── relatorio.md ← versão markdown (commitável)
└── index.html ← versão visual standalone
| Cenário | O que fazer |
|---|---|
| Modelo sem .SemanticModel/ | Mensagem de pré-requisito (PBIP), encerra |
| Pasta _review/ já existe | Sobrescrever (skill é idempotente) — mas avisar no chat |
| Modelo perfeito (zero issues) | Score 100 + celebrar + listar 3 melhores patterns encontrados (já que não tem o que reclamar) |
| Modelo apocalíptico (>50 críticos) | Truncar relatório nos top 30 críticos + linha "+ N issues não listados — começa por aqui antes" |
| Erro lendo um .tmdl específico (corrupção) | Reportar arquivo problemático no chat, seguir com os demais |
| Projeto enorme (>500 medidas) | Avisar "modelo grande, vou processar em chunks · ~5min" antes de começar |
_review/.SemanticModel/ ou .Report/ — somente leitura nesses./_review/ (cria se não existe, sobrescreve se existe).SemanticModel/, .Report/, ou qualquer arquivo binárioEstilo Xperiun (declarado em contexto/posicionamento.md):
Exemplos de bom vs ruim:
❌ Ruim: "Identificou-se a presença de relacionamento bi-direcional que pode impactar negativamente a performance do modelo."
✅ Bom: "Bi-direcional em N:1 com calendário causa ambiguidade de filtro e duplica scan no engine. Em modelo de 1.4GB você está pagando ~30% de overhead por refresh sem ganhar nada."
O relatório HTML tem footer fixo:
Branding é sempre Xperiun (não @leokarpa) — a skill faz parte do posicionamento institucional. Mesmo se o usuário rodar a skill no projeto dele, o footer mantém referência Xperiun (é nossa skill, ele só tá usando).
Avisar ao usuário se > 3min esperados.
v0.1 — protótipo interno Xperiun OS. Ainda não distribuído publicamente.
Quando estabilizar, vira pacote no repo xperiun/claude-code-powerbi-skills (lead magnet).
Take xperiun/pbi-modelo-review from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.