xperiun/pbi-dax-create
Cria medida DAX a partir de descrição em PT, respeitando o modelo Power BI existente (colunas reais, naming convention, padrões DAX). Use quando o usuário pedir "cria medida pra X", "preciso de DAX que faça Y", "quero calcular Z", "uma fórmula pra...", ou qualquer pedido pra gerar nova medida em projeto PBIP aberto.
npx skills add https://github.com/xperiun/claude-code-powerbi-skills --skill pbi-dax-create
> 📦 Distribuída publicamente: github.com/xperiun/claude-code-powerbi-skills — pasta claude-code/pbi-dax-create/ (skill nativa) + claude-web/pbi-dax-create.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.
Gera medidas DAX a partir de descrição em linguagem natural, respeitando o modelo existente:
Output principal: medida DAX no chat com nome, fórmula completa, explicação linha-a-linha e onde colar. Opcional: aplica direto no .tmdl (com aprovação explícita).
Não usar quando:
/pbi-doc/pbi-modelo-review/pbi-dax-refactor)/pbi-doc que tem isso).SemanticModel/. Se faltar, instruir conversão e encerrar..tmdl (via filesystem ou upload — ver "Modos de execução" abaixo)Se faltar PBIP, mensagem curta:
> Esse projeto ainda está em .pbix (binário). Pra eu criar medidas com base no modelo real, salva como Power BI Project: File → Save as → Power BI Project (.pbip). Sem isso eu não consigo ler colunas/medidas existentes pra te dar uma medida que funciona.
A skill detecta automaticamente o ambiente e adapta input/output:
.SemanticModel/.tmdl da pasta.tmdl da tabela host> Pra eu criar uma medida que funciona com o seu modelo real, anexe nesse chat:
> - model.tmdl (lista geral de tabelas)
> - O .tmdl da tabela onde a medida vai ficar (ex: Medidas.tmdl)
> - Se a medida vai usar colunas/medidas de outras tabelas, anexa também esses .tmdl
>
> Pode arrastar individualmente ou zipar tudo num arquivo só.
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 posso editar o .tmdl direto; pra web você precisa colar o bloco que eu te mando.
Medidas se existir, senão perguntaSe descrição for vaga ou ambígua (ex: "vendas totais" — bruto ou líquido?), fazer 1 pergunta clarificadora antes de gerar.
.SemanticModel/model.tmdl (config), relationships.tmdl, tables/*.tmdlLocalDateTable_* e DateTableTemplate_* (auto-date hidden)references/padroes.md)Da descrição em PT, identificar:
Se ambíguo, parar e perguntar (1 pergunta única, objetiva). Exemplos:
Ler references/padroes.md e seguir as regras:
DIVIDE(num, den) em vez de num / den (evita ∞ e erros silenciosos)SUMX(tabela, expressão) quando expressão envolve mais de 1 coluna por linhaSUM(tabela[col]) quando é soma simples de 1 colunaDISTINCTCOUNT() em coluna inteira (key) quando possívelSAMEPERIODLASTYEAR, DATEADD, DATESYTD) sempre referenciando coluna de tabela calendárioCALCULATE com filter modifier explícito quando precisa modificar contextoVAR ... RETURN pra medidas com 3+ passos lógicos (legibilidade)Detectar o padrão usado nas medidas existentes do projeto (ver references/padroes.md seção naming):
Total Vendas, % Margem Bruta)% Faturamento YoY, # Pedidos, Δ MoM)totalVendas)Sempre gerar 3 sugestões de nome seguindo o padrão dominante.
Verificar antes de retornar:
Usar o formato definido em templates/output-medida.md. Resposta:
.tmdl, em qual seção/displayFolder)Ao final, perguntar:
> Quer que eu aplique direto no Medidas.tmdl (vou editar o arquivo) ou prefere só copiar e colar no Power BI manualmente?
Default seguro: só mostra. Aplica direto somente se o usuário disser sim explicitamente.
Se aplicar:
.tmdldescription: opcional se útilModo padrão (só sugere):
Modo aplicar (com aprovação explícita):
.tmdl da tabela host modificado (medida inserida)| Cenário | O que fazer |
|---|---|
| Descrição muito vaga | 1 pergunta clarificadora antes de gerar |
| Coluna pedida não existe | Sugerir as 2-3 colunas reais mais próximas + perguntar qual |
| Medida pedida já existe (mesmo nome) | Avisar e perguntar: substituir ou criar com nome diferente? |
| Medida com fórmula similar já existe | Avisar e mostrar a existente — perguntar se é o que ele quer ou se realmente quer criar nova |
| Sem tabela "Medidas" no modelo | Listar tabelas e perguntar onde colocar (ou sugerir criar tabela vazia "Medidas") |
| Time intelligence sem dim Calendario marcada | Avisar limitação + criar a medida mas sinalizar que pode dar resultado errado |
| Modelo enorme (>500 medidas) | Carregar só nomes+DAX-essência das existentes (não DAX completo) pra evitar contexto explodir |
Estilo Xperiun:
Exemplos:
❌ Ruim: "Para calcular o faturamento, podemos utilizar a função SUMX que iterará..."
✅ Bom: "Faturamento — SUMX em fVendas multiplicando QtdItens × PrecoUnitario. Mais limpo que coluna calculada (que infla a fato)."
.tmdl (texto puro).tmdl da tabela host, nunca toca outrosQuando aplicar direto:
Medidas.tmdl e adicionar a medida na seção 0. Medidas Padrão. Pode?"git diff e descartar."v0.1 — protótipo interno Xperiun OS. Faz parte do trio do lead magnet (/pbi-modelo-review · /pbi-doc · /pbi-dax-create).
Take xperiun/pbi-dax-create 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.