A IA escreve DAX melhor quando recebe o modelo, o objetivo e o formato de entrega. Este guia mostra o que pôr no prompt e como pedir o código já no padrão da casa, pronto para testar na DAX Query View.
1. Anatomia do prompt eficaz
| Componente | O que incluir | Exemplo |
|---|---|---|
| 1. Modelo | Tabelas, colunas, tipos e relacionamentos | "TabFatVenda (Data, CodigoProduto, ValorVenda); TabDimCalendario[Data Referência] marcada como Tabela de Datas, 1 → * com TabFatVenda[Data]" |
| 2. Objetivo | O que a medida calcula, com nome de negócio | "Medida Total de Vendas AV: soma de ValorVenda no período filtrado" |
| 3. Restrições | Filtros, exceções e tratamento de vazio | "Ignore pedidos cancelados; mês sem venda fica em branco, não em 0" |
| 4. Uso | Onde a medida aparece | "Matriz com Categoria nas linhas e mês nas colunas" |
| 5. Padrão da casa | Nomes, VAR, DIVIDE e formato de entrega | Cole o bloco da seção 2 |
| 6. Resultado esperado | Um valor conhecido para conferir | "Bebidas em abril de 2026 deve dar 50.000" |
2. Bloco "padrão da casa"
Cole este bloco no fim de qualquer prompt. Ele evita as correções mais comuns: divisão que devolve 0, variação em texto, nomes em inglês e código que não roda na DAX Query View.
Padrões obrigatórios:
- Nomes de medida em português de negócio, sem prefixo técnico.
- Comparação de períodos: sufixos AV (período atual) e AA (mesmo período
do ano anterior) e prefixos Δ (AV − AA), Δ% (Δ ÷ AA) e Δi (farol:
✔️ alta, ⚠️ estável, ❗ queda).
- Contagens com prefixo # (ex.: # Clientes).
- Variáveis com prefixo v (ex.: vTotal, vAA).
- DIVIDE sem valor alternativo: sem denominador, o resultado é BLANK,
nunca 0.
- A medida devolve número. Formato, seta e cor ficam na formatação
condicional ou na cadeia de formato dinâmica, e não em FORMAT.
- Use só funções da referência DAX da Microsoft (learn.microsoft.com/dax).
- Entregue um único bloco para a DAX Query View: DEFINE com um MEASURE
por medida, uma descrição em /// acima de cada uma, e EVALUATE com
SUMMARIZECOLUMNS por [COLUNA DE TESTE] para eu conferir o resultado.- 💡 Na DAX Query View, Executar (F5) mostra o resultado e
Atualizar o modelo com alterações grava as medidas no modelo, já
com a descrição escrita em
///.
3. Modelos de prompt
Troque o que está entre [colchetes]. Nos exemplos, o modelo é o mesmo
do Cookbook: TabFatVenda, TabDimProduto, TabDimCliente e
TabDimCalendario gerada pela UDF DataHora.Calendario.
Medida simples:
Modelo:
- TabFatVenda: Data (data), CodigoProduto (texto), ValorVenda (decimal)
- TabDimProduto: CodigoProduto, NomeProduto, Categoria; 1 → * com TabFatVenda
- TabDimCalendario[Data Referência], marcada como Tabela de Datas;
1 → * com TabFatVenda[Data]
Crie a medida [NOME DE NEGÓCIO] que [OBJETIVO].
Condições:
- [CONDIÇÃO 1]
- [CONDIÇÃO 2]
Uso: [VISUAL E EIXOS].
Resultado esperado: [VALOR CONHECIDO PARA CONFERIR].
[BLOCO PADRÃO DA CASA]Comparação com o ano anterior:
Modelo: [MODELO, como no modelo anterior].
Crie as medidas [MÉTRICA] AV, [MÉTRICA] AA, Δ [MÉTRICA], Δ% [MÉTRICA]
e Δi [MÉTRICA], usando SAMEPERIODLASTYEAR sobre
TabDimCalendario[Data Referência].
- Δ% é número, formatado como percentual na própria medida.
- Sem AA, Δ% e Δi ficam em branco. Mês sem venda no AV também.
Teste por TabDimCalendario[Ano] e TabDimCalendario[Mês #].
[BLOCO PADRÃO DA CASA]Resposta esperada, que já roda na DAX Query View:
DEFINE
/// Vendas do período filtrado.
MEASURE TabFatVenda[Total de Vendas AV] =
SUM ( TabFatVenda[ValorVenda] )
/// Vendas do mesmo período no ano anterior.
MEASURE TabFatVenda[Total de Vendas AA] =
CALCULATE (
[Total de Vendas AV],
SAMEPERIODLASTYEAR ( TabDimCalendario[Data Referência] )
)
/// Variação absoluta AV − AA. Em branco quando não há venda no AV.
MEASURE TabFatVenda[Δ Total de Vendas] =
VAR vAV = [Total de Vendas AV]
RETURN
IF ( NOT ISBLANK ( vAV ), vAV - [Total de Vendas AA] )
/// Variação percentual sobre o AA. Em branco sem AV ou sem AA.
MEASURE TabFatVenda[Δ% Total de Vendas] =
DIVIDE ( [Δ Total de Vendas], [Total de Vendas AA] )
/// Farol da variação: ✔️ alta, ⚠️ estável, ❗ queda.
MEASURE TabFatVenda[Δi Total de Vendas] =
VAR vVariacao = [Δ% Total de Vendas]
RETURN
SWITCH (
TRUE (),
ISBLANK ( vVariacao ), BLANK (),
vVariacao > 0, "✔️",
vVariacao = 0, "⚠️",
"❗"
)
EVALUATE
SUMMARIZECOLUMNS (
TabDimCalendario[Ano],
TabDimCalendario[Mês #],
"AV", [Total de Vendas AV],
"AA", [Total de Vendas AA],
"Δ", [Δ Total de Vendas],
"Δ%", [Δ% Total de Vendas],
"Δi", [Δi Total de Vendas]
)
ORDER BY TabDimCalendario[Ano], TabDimCalendario[Mês #]- ⚠️
SAMEPERIODLASTYEARexige o calendário marcado como Tabela de Datas. Para o acumulado no ano, veja o caso 1 do Cookbook.
Cálculo condicional:
Situação de negócio: [CENÁRIO].
Modelo:
- [TABELA A]: [colunas]
- [TABELA B]: [colunas]
- Relacionamento: [COMO SE LIGAM]
Regras, na ordem de prioridade:
1. Se [CONDIÇÃO 1], então [RESULTADO 1]
2. Se [CONDIÇÃO 2], então [RESULTADO 2]
3. Nos demais casos, [RESULTADO PADRÃO]
Use SWITCH ( TRUE (), ... ) com as condições nessa ordem e comente cada
uma. Teste por [COLUNA].
[BLOCO PADRÃO DA CASA]Correção de medida:
A medida abaixo retorna [RESULTADO ERRADO] para [CONTEXTO, ex.: Bebidas
em abril de 2026]. O valor certo é [VALOR ESPERADO].
[COLE A MEDIDA]
1. Explique a causa do erro.
2. Devolva um bloco para a DAX Query View com a medida original e a
corrigida (sufixo " Corrigida") lado a lado no EVALUATE, filtrado
no contexto acima.
3. Explique o que mudou e por quê.4. Técnicas de prompt
Passo a passo antes do código — pedir a lógica em português antes do DAX reduz erros de lógica:
"Antes de escrever o DAX, explique em português, sem código, cada etapa do cálculo. Depois converta cada etapa numa VAR."
Autorrevisão — pedir que a IA revise o próprio resultado:
"Revise a medida e aponte: (1) casos não tratados (BLANK, divisão por zero, período sem dado, período futuro), (2) partes que o filtro de um visual muda sem você querer, (3) o que dá para simplificar. Corrija e devolva o bloco completo para a DAX Query View."
Analogia — para entender uma função nova:
"Explique CALCULATE com uma analogia do dia a dia e depois mostre um exemplo com as tabelas do meu modelo."
Construção em etapas — do simples ao completo:
Prompt 1: "Crie a versão mais simples de [OBJETIVO]."
Prompt 2: "Agora considere só [CONDIÇÃO]."
Prompt 3: "Agora acrescente o AA, o Δ% e o Δi no padrão da casa."5. Prompts por cenário
Performance:
"Esta medida está lenta numa tabela de 50 milhões de linhas: [MEDIDA]. Reescreva usando variáveis para não repetir cálculos e predicados de coluna no CALCULATE no lugar de FILTER sobre a tabela inteira. Explique cada mudança e devolva as duas versões no mesmo bloco da DAX Query View para eu comparar o tempo."
Várias tabelas:
"Modelo estrela: TabFatVenda ligada a TabDimProduto, TabDimCliente, TabDimLoja e TabDimCalendario pelas colunas Codigo*. TabDimCliente tem UF; TabDimLoja tem DataAbertura. Crie Total de Vendas por Categoria para clientes de SP, só lojas abertas há mais de 12 meses, nos últimos 6 meses até a última venda. [BLOCO PADRÃO DA CASA]"
Estatística — dias fora da curva:
"Crie uma consulta para a DAX Query View que liste, por TabDimCalendario[Data Referência], Total de Vendas, a média diária, o desvio-padrão e um sinalizador de outlier (mais de 2 desvios da média). Média e desvio devem usar todos os dias do período, e não só a linha. Ordene pela data."
- 💡 O resultado é uma tabela, então o pedido é uma consulta
(
EVALUATE), e não uma medida. Uma medida sempre devolve um único valor; para o relatório, peça a medida do sinalizador e use-a num visual de tabela.
Número abreviado (K, M) sem virar texto:
"A medida Total de Vendas deve aparecer como 950, 45,2 K ou 1,2 M, conforme o tamanho, e continuar numérica nos gráficos. Use uma cadeia de formato dinâmica com SELECTEDMEASURE, e não FORMAT."
Na medida, em Formato › Dinâmico, cole a expressão de formato:
-- Cadeia de formato dinâmica: a medida continua numérica
VAR vValor = ABS ( SELECTEDMEASURE () ) -- ABS: negativos usam a mesma faixa
RETURN
SWITCH (
TRUE (),
vValor < 1000, "#,##0", -- até 999: sem sufixo
vValor < 1000000, "#,##0,.0 K", -- uma vírgula antes do ponto divide por mil
"#,##0,,.0 M" -- duas vírgulas dividem por um milhão
)- ⚠️
FORMATdevolve texto: o gráfico perde o eixo numérico e um valor em branco vira texto vazio. A cadeia de formato dinâmica mantém o número. - ⚠️ Se o visual mostrar a unidade duas vezes, mude Unidades de exibição de Automático para Nenhum.
6. IA dentro do Power BI: Copilot na DAX Query View
O Copilot da DAX Query View escreve e explica consultas DAX no modelo aberto. No Power BI Desktop, habilite-o em Opções › Recursos de visualização, abra uma aba de consulta e pressione Ctrl + I.
| O que saber | Efeito no prompt |
|---|---|
| Exige workspace com capacidade do Fabric | Sem ela, use um assistente externo com as regras da seção 2 |
| Usa os metadados do modelo (tabelas, colunas, medidas), não os dados; no modo Import pode ler mínimo e máximo | Nomes de negócio claros valem mais que um prompt longo |
| Lê só os primeiros 200 caracteres da descrição | Comece a descrição pelo que a medida calcula |
| A sintaxe gerada é verificada; se falhar, o pedido é repetido uma vez | Mesmo assim, execute (F5) antes de manter a consulta |
| Funções DAX recentes podem ser desconhecidas | Confira a função na referência da Microsoft |
| Envia todo o texto da aba de consulta atual | Abra uma aba só com o que interessa ao pedido |
Prompts que funcionam bem no Copilot:
"Escreva uma consulta DAX com Total de Vendas AV, Total de Vendas AA e Δ% Total de Vendas por Categoria em 2026, ordenada pelo Δ%."
"Explique o que esta consulta faz." (com a consulta selecionada)
Descrições que ajudam a IA: escreva a descrição em /// acima de
cada MEASURE e grave com Atualizar o modelo com alterações. A
descrição vai para o modelo, aparece ao passar o mouse sobre a medida e
é lida pelo Copilot. O exemplo abaixo usa as medidas AA e Δ da seção 3,
já gravadas no modelo.
DEFINE
/// Variação percentual das vendas sobre o mesmo período do ano anterior.
/// Em branco quando não há venda no AA.
MEASURE TabFatVenda[Δ% Total de Vendas] =
DIVIDE ( [Δ Total de Vendas], [Total de Vendas AA] )
EVALUATE
SUMMARIZECOLUMNS ( TabDimCalendario[Ano], "Δ%", [Δ% Total de Vendas] )Assistente externo ligado ao modelo: com MCP, um assistente como o Claude lê e altera o modelo aberto no Power BI Desktop. Veja a configuração em /dax/mcp.
- ⚠️ Privacidade: o Copilot segue as regras de privacidade e segurança do Copilot no Fabric. Num assistente externo, envie metadados (nomes, tipos, medidas) e não linhas de dados de clientes, a menos que a política da empresa permita.
7. Erros comuns e prompt de diagnóstico
| Erro | Sintoma | Prompt para diagnóstico |
|---|---|---|
| Dependência circular | Erro "circular dependency" | "Por que esta medida ou coluna causa dependência circular? [CÓDIGO]" |
| Transição de contexto | Coluna calculada mostra o mesmo total em todas as linhas | "Esta coluna calculada repete o total em todas as linhas. Explique a transição de contexto e corrija." |
| BLANK ou 0 | Linhas somem do visual, ou aparece 0 onde não há dado | "Esta medida devolve [BLANK/0] em [CONTEXTO]. Explique quando o DAX devolve BLANK e ajuste para [COMPORTAMENTO ESPERADO]." |
| Filtro ignorado | Total não muda com a segmentação | "A medida ignora a segmentação de [COLUNA]. Analise o uso de ALL, REMOVEFILTERS e ALLSELECTED e corrija." |
| Lentidão | Visual demora mais de 5 s | "Por que esta medida é lenta? Aponte os trechos caros e proponha a versão otimizada. [MEDIDA]" |
8. Glossário
| Termo | O que é | Quando usar |
|---|---|---|
| Few-shot | Dar 2 ou 3 exemplos de entrada e saída antes do pedido | Impor um padrão de nomes ou de estrutura |
| Zero-shot | Pedir sem exemplos | Funções e cálculos comuns |
| Passo a passo | Pedir o raciocínio antes do código | Lógica com várias condições |
| Papel | "Aja como especialista em DAX e modelagem" | Revisão e boas práticas |
| Restrição | Listar o que é obrigatório ("DIVIDE sem alternativo", "só funções da referência Microsoft") | Forçar o padrão da casa |
| Refinamento | Ajustar em várias rodadas | Medidas com muitos requisitos |
| Prompt negativo | Dizer o que não fazer ("não use FORMAT para formatar número") | Evitar um erro conhecido |
9. Checklist
Antes de enviar o prompt:
- Incluí os nomes exatos das tabelas e colunas e os relacionamentos?
- Dei um resultado esperado com valor conhecido?
- Disse o que fazer com vazio: BLANK, e não 0?
- Disse onde a medida será usada (visual e eixos)?
- Colei o bloco do padrão da casa?
Depois de receber o código:
- Rodei o bloco na DAX Query View e conferi o valor conhecido?
- Testei período sem dado, período futuro e denominador zero?
- Conferi que cada função existe na referência DAX da Microsoft?
- Conferi o resultado com segmentações e filtros?
- Gravei as medidas com a descrição em
///?
Atenção: nunca publique uma medida gerada por IA sem testá-la. O código pode rodar e ainda assim devolver o número errado. Confira com um valor conhecido antes de publicar.
Fontes
- Escrever consultas DAX com Copilot
- Trabalhar com a exibição de consulta DAX
- Consultas DAX
- DIVIDE · DAX: função DIVIDE vs. operador de divisão · Evitar converter BLANKs em valores
- Evitar usar FILTER como argumento de filtro
- Cadeias de formato dinâmicas para medidas · SELECTEDMEASURE
- SAMEPERIODLASTYEAR
- Privacidade, segurança e uso responsável do Copilot no Fabric