Parte da nossa série Data Analytics & BI
Leia o guia completoFórmulas DAX que todo usuário empresarial deve saber
DAX (Data Analysis Expressions) é a linguagem de fórmula que transforma o Power BI de uma simples ferramenta de gráficos em um mecanismo analítico completo. Embora a interface de arrastar e soltar do Power BI lide com agregações básicas, a verdadeira inteligência de negócios requer DAX. Comparações ano após ano, médias móveis, classificações, cenários hipotéticos e KPIs complexos dependem de fórmulas DAX.
O desafio é que o DAX parece aparentemente simples, mas se comporta de maneira que surpreende até mesmo usuários experientes do Excel. Os conceitos de contexto de filtro, contexto de linha e transição de contexto são exclusivos do DAX e não têm equivalente direto no Excel ou SQL. Este guia concentra-se nas 20 fórmulas DAX mais práticas para usuários empresariais, com exemplos do mundo real que você pode adaptar imediatamente.
Principais conclusões
- CALCULATE é a função DAX mais importante --- ela modifica o contexto do filtro e é usada em mais de 80% das medidas não triviais
- As funções de inteligência temporal (TOTALYTD, SAMEPERIODLASTYEAR, DATEADD) requerem uma tabela de datas adequada marcada como tal no modelo
- A sintaxe VAR/RETURN torna medidas complexas legíveis e evita cálculos redundantes
- Funções iteradoras (SUMX, AVERAGEX, RANKX) avaliam expressões linha por linha, enquanto agregadores (SUM, AVERAGE) operam em colunas
- A transição de contexto ocorre quando uma coluna calculada ou iterador chama uma medida, convertendo o contexto da linha em contexto de filtro
- SWITCH(TRUE(), ...) substitui instruções IF aninhadas e é muito mais legível
- ALL, ALLEXCEPT e REMOVEFILTERS controlam quais filtros estão ativos --- mas tenha cuidado com as implicações de RLS
Fundação: Contexto de Filtro e Contexto de Linha
Antes de mergulhar nas fórmulas, é essencial compreender esses dois conceitos. Toda confusão no DAX remonta ao contexto do filtro e ao contexto da linha.
Filtro de contexto
Contexto de filtro é o conjunto de filtros aplicados a um cálculo. Ele vem de segmentações de dados, filtros visuais, filtros de página, filtros de relatório e RLS. Quando você coloca uma medida em um visual de matriz com "Ano" nas linhas e "Região" nas colunas, cada célula tem um contexto de filtro exclusivo: (Ano = 2025, Região = América do Norte), (Ano = 2025, Região = EMEA) e assim por diante.
Cada função de agregação DAX (SUM, AVERAGE, COUNT, MIN, MAX) é avaliada dentro do contexto de filtro atual. SUM(Sales[Revenue]) em uma célula filtrada para 2025 + América do Norte soma apenas as linhas de receita que correspondem a ambas as condições.
Contexto da linha
O contexto da linha existe dentro de colunas calculadas e funções iteradoras. Significa "a linha atual". Em uma coluna calculada na tabela Vendas, Sales[Revenue] * Sales[Quantity] avalia cada linha individualmente.
Transição de Contexto
Quando uma função iteradora (como SUMX) chama uma medida, o contexto da linha é automaticamente convertido em contexto de filtro. Isso é chamado de transição de contexto. É poderoso, mas pode ser uma fonte de problemas de desempenho se for mal utilizado.
-- Row context exists here (iterating over Products)
Revenue Per Product =
SUMX(
Products,
[Total Revenue] -- This measure is evaluated in filter context
-- where the current product's ID filters the Sales table
)
A compreensão desses conceitos torna cada fórmula DAX intuitiva. Sem eles, as fórmulas DAX parecem caixas pretas.
As 20 Fórmulas Essenciais
1. CALCULAR — Modificar o contexto do filtro
CALCULATE é a função DAX mais importante. Avalia uma expressão em um contexto de filtro modificado.
Sintaxe: CALCULATE(expression, filter1, filter2, ...)
Exemplo: receita apenas de pedidos grandes
Large Order Revenue =
CALCULATE(
SUM(Sales[Revenue]),
Sales[OrderTotal] > 10000
)
Exemplo: receita de uma categoria de produto específica
Electronics Revenue =
CALCULATE(
SUM(Sales[Revenue]),
Products[Category] = "Electronics"
)
CALCULATE substitui o filtro existente na coluna especificada. Se uma segmentação de dados já filtrar Categoria como "Vestuário", a medida Receita de eletrônicos ignorará essa segmentação e mostrará Receita de eletrônicos porque CALCULATE substitui o filtro de categoria.
2. FILTER — Filtragem em nível de linha
FILTER retorna uma tabela filtrada por uma condição. É frequentemente usado dentro de CALCULATE para filtragem complexa que não pode ser expressa como uma simples comparação de colunas.
Sintaxe: FILTER(table, condition)
Exemplo: Receita de clientes com mais de 5 pedidos
Revenue From Repeat Customers =
CALCULATE(
SUM(Sales[Revenue]),
FILTER(
Customers,
CALCULATE(COUNTROWS(Sales)) > 5
)
)
Importante: FILTER itera linha por linha, tornando-o mais lento que filtros simples CALCULATE em tabelas grandes. Use-o somente quando um filtro de coluna direto for insuficiente.
3. TODOS - Remover todos os filtros
ALL remove todos os filtros de uma tabela ou coluna, retornando a tabela completa não filtrada. É usado para calcular totais, porcentagens do total e proporções.
Sintaxe: ALL(table) ou ALL(table[column])
Exemplo: receita como porcentagem do total
Revenue % of Total =
DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(SUM(Sales[Revenue]), ALL(Sales))
)
Quando uma segmentação de dados é filtrada para "América do Norte", SUM(Sales[Revenue]) retorna a receita da América do Norte. CALCULATE(SUM(Sales[Revenue]), ALL(Sales)) remove todos os filtros e retorna a receita global. A divisão dá a porcentagem.
4. ALLEXCEPT – Remover todos os filtros, exceto os especificados
ALLEXCEPT remove todos os filtros de uma tabela, exceto as colunas especificadas. Isto é útil quando você deseja preservar alguns filtros (como ano) enquanto remove outros (como categoria de produto).
Sintaxe: ALLEXCEPT(table, column1, column2, ...)
Exemplo: divisão da receita no ano atual
Revenue % of Year Total =
DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(
SUM(Sales[Revenue]),
ALLEXCEPT(Sales, DateTable[Year])
)
)
Isso mostra a participação de cada produto ou região na receita no ano selecionado, e não em todo o período.
5. TOTALYTD — Acumulado no ano
TOTALYTD calcula um total acumulado desde o início do ano até a data atual no contexto.
Sintaxe: TOTALYTD(expression, dates[date_column], [filter], [year_end_date])
Exemplo: receita acumulada no ano
Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])
Com ano fiscal encerrado em 30 de junho:
Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "6/30")
Pré-requisito: A DateTable deve ser marcada como uma tabela de datas no modelo (Ferramentas de Tabela, depois Marcar como Tabela de Datas).
6. MESMO PERIODLASTYEAR - ano após ano
SAMEPERIODLASTYEAR desloca o contexto da data exatamente um ano.
Sintaxe: SAMEPERIODLASTYEAR(dates[date_column])
Exemplo: receita em relação ao ano passado
Revenue PY =
CALCULATE(SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(DateTable[Date]))
Revenue YoY Growth =
VAR CurrentRevenue = SUM(Sales[Revenue])
VAR PriorRevenue = [Revenue PY]
RETURN
DIVIDE(CurrentRevenue - PriorRevenue, PriorRevenue, 0)
Numa matriz mensal, cada linha mostra a receita do mês atual e do mesmo mês do ano anterior, juntamente com a percentagem de crescimento.
7. DATEADD — Mudanças de horário flexíveis
DATEADD muda as datas em qualquer intervalo: dias, meses, trimestres ou anos. É mais flexível que SAMEPERIODLASTYEAR.
Sintaxe: DATEADD(dates[date_column], intervals, interval_type)
Exemplo: receita de 3 meses atrás
Revenue 3 Months Ago =
CALCULATE(
SUM(Sales[Revenue]),
DATEADD(DateTable[Date], -3, MONTH)
)
Exemplo: receita contínua de 12 meses
Revenue Rolling 12M =
CALCULATE(
SUM(Sales[Revenue]),
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)
8. RANKX — Classificações Dinâmicas
RANKX atribui uma classificação a cada item com base em uma expressão.
Sintaxe: RANKX(table, expression, [value], [order], [ties])
Exemplo: Classifique os produtos por receita
Product Revenue Rank =
RANKX(
ALL(Products[ProductName]),
[Total Revenue],
,
DESC,
DENSE
)
O ALL(Products[ProductName]) fornece a lista completa de produtos para classificação, independentemente dos filtros de segmentação de dados nos produtos. DESC significa que a receita mais alta obtém a classificação 1. DENSE significa que os valores vinculados obtêm a mesma classificação.
Exemplo: filtro N superior
Top 10 Products Revenue =
CALCULATE(
[Total Revenue],
FILTER(
ALL(Products[ProductName]),
RANKX(ALL(Products[ProductName]), [Total Revenue], , DESC) <= 10
)
)
9. SWITCH - Lógica Condicional
SWITCH substitui instruções IF aninhadas e é muito mais legível.
Sintaxe: SWITCH(expression, value1, result1, value2, result2, ..., else_result)
Exemplo: Classificação do segmento de cliente
Customer Segment =
SWITCH(
TRUE(),
[Total Revenue] > 100000, "Enterprise",
[Total Revenue] > 25000, "Mid-Market",
[Total Revenue] > 5000, "SMB",
"Startup"
)
Exemplo: seleção de medida dinâmica
Selected Measure =
SWITCH(
SELECTEDVALUE(MeasureSelector[Measure]),
"Revenue", [Total Revenue],
"Orders", [Order Count],
"AOV", [Average Order Value],
"Margin", [Gross Margin %],
[Total Revenue]
)
Esse padrão funciona com uma segmentação de dados que permite aos usuários escolher qual métrica exibir em um gráfico.
10. VAR/RETURN — Variáveis
As variáveis armazenam resultados intermediários, tornando as fórmulas legíveis e evitando cálculos redundantes. Uma variável é avaliada uma vez e reutilizada.
Sintaxe: VAR name = expression RETURN final_expression
Exemplo: KPI complexo com variáveis
Customer Health Score =
VAR Revenue = [Total Revenue]
VAR OrderCount = [Order Count]
VAR DaysSinceLastOrder =
DATEDIFF(MAX(Sales[OrderDate]), TODAY(), DAY)
VAR RevenueScore =
SWITCH(TRUE(), Revenue > 50000, 3, Revenue > 10000, 2, 1)
VAR FrequencyScore =
SWITCH(TRUE(), OrderCount > 20, 3, OrderCount > 5, 2, 1)
VAR RecencyScore =
SWITCH(TRUE(), DaysSinceLastOrder < 30, 3, DaysSinceLastOrder < 90, 2, 1)
RETURN
RevenueScore + FrequencyScore + RecencyScore
Sem variáveis, esta fórmula repetiria os mesmos cálculos várias vezes, tornando-a ilegível e mais lenta.
11. DIVIDIR – Divisão Segura
DIVIDE lida com a divisão por zero normalmente, retornando um resultado alternativo especificado em vez de um erro.
Sintaxe: DIVIDE(numerator, denominator, [alternate_result])
Exemplo:
Conversion Rate =
DIVIDE([Closed Won Deals], [Total Opportunities], 0)
Sempre use DIVIDE em vez do operador / nas medidas. O operador / retorna um erro ao dividir por zero, quebrando seu visual.
12. DISTINCTCOUNT – Contar valores exclusivos
DISTINCTCOUNT conta o número de valores exclusivos em uma coluna.
Sintaxe: DISTINCTCOUNT(column)
Exemplo: Clientes ativos no período
Active Customers =
DISTINCTCOUNT(Sales[CustomerID])
Isso conta clientes únicos que fizeram pelo menos uma compra no contexto de filtro atual (mês, trimestre selecionado, etc.).
13. COUNTROWS — Contar linhas em uma tabela
COUNTROWS conta o número de linhas em uma tabela, opcionalmente filtradas.
Sintaxe: COUNTROWS(table)
Exemplo: contagem de pedidos
Order Count =
COUNTROWS(Sales)
Cancelled Orders =
CALCULATE(
COUNTROWS(Sales),
Sales[Status] = "Cancelled"
)
14. SUMX - Soma linha por linha
SUMX é um iterador que avalia uma expressão para cada linha e soma os resultados. É essencial quando você precisa multiplicar colunas antes de somar.
Sintaxe: SUMX(table, expression)
Exemplo: Cálculo da média ponderada
Weighted Average Price =
DIVIDE(
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice]),
SUM(Sales[Quantity])
)
SUM não pode multiplicar duas colunas. Você precisa do SUMX para avaliar Quantidade vezes UnitPrice para cada linha e, em seguida, somar os resultados.
15. AVERAGEX — Média linha por linha
AVERAGEX é a versão iteradora de AVERAGE.
Sintaxe: AVERAGEX(table, expression)
Exemplo: média de dias para fechamento
Average Days to Close =
AVERAGEX(
Opportunities,
DATEDIFF(Opportunities[CreatedDate], Opportunities[ClosedDate], DAY)
)
16. MAXX e MINX - Iterador Mín/Máx
MAXX e MINX encontram o valor máximo ou mínimo de uma expressão avaliada linha por linha.
Exemplo: data do último pedido por cliente
Most Recent Order =
MAXX(Sales, Sales[OrderDate])
Oldest Unpaid Invoice =
MINX(
FILTER(Invoices, Invoices[PaymentStatus] = "Unpaid"),
Invoices[InvoiceDate]
)
17. LOOKUPVALUE - Equivalente a VLOOKUP
LOOKUPVALUE recupera um valor de uma tabela com base em um ou mais critérios de pesquisa. É o equivalente DAX do VLOOKUP do Excel.
Sintaxe: LOOKUPVALUE(result_column, search_column, search_value, ...)
Exemplo:
Customer Region =
LOOKUPVALUE(
Customers[Region],
Customers[CustomerID], Sales[CustomerID]
)
Observação: LOOKUPVALUE normalmente é usado em colunas calculadas, não em medidas. Nas medidas, são preferidos RELATED (para muitos para um) ou RELATEDTABLE (para um para muitos).
18. SELECTEDVALUE — Obtenha o valor atual do Slicer
SELECTEDVALUE retorna o valor de uma coluna quando exatamente um valor está no contexto do filtro. Se vários valores forem selecionados, ele retornará o resultado alternativo.
Sintaxe: SELECTEDVALUE(column, [alternate_result])
Exemplo: título dinâmico
Chart Title =
"Revenue for " & SELECTEDVALUE(DateTable[Year], "All Years")
19. ISBLANK – Verifique se há valores vazios
ISBLANK testa se um valor está em branco (nulo/vazio).
Exemplo: Pedidos sem vendedor designado
Unassigned Orders =
CALCULATE(
COUNTROWS(Sales),
ISBLANK(Sales[SalespersonID])
)
20. CONCATENATEX — Concatenar valores de uma tabela
CONCATENATEX itera em uma tabela e concatena valores em uma única string.
Sintaxe: CONCATENATEX(table, expression, [delimiter], [order_by], [order])
Exemplo: Lista de produtos adquiridos por um cliente
Products Purchased =
CONCATENATEX(
VALUES(Products[ProductName]),
Products[ProductName],
", ",
Products[ProductName], ASC
)
Em uma tabela de detalhes do cliente, isso mostra “Produto A, Produto B, Produto C” para cada cliente.
Aprofundamento da Inteligência de Tempo
A inteligência de tempo é o motivo mais comum pelo qual os usuários empresariais precisam do DAX. As funções de inteligência temporal do Power BI exigem uma tabela de datas dedicada. Aqui está um conjunto abrangente de medidas de tempo.
Pré-requisitos: a tabela de datas
Seu modelo deve ter uma tabela de datas com:
- Uma coluna de data contínua (sem lacunas) cobrindo todo o intervalo de dados
- A tabela marcada como tabela de datas (Ferramentas de Tabela e Marcar como Tabela de Datas)
- Um relacionamento da coluna de data da tabela de datas com a coluna de data de cada tabela de fatos
Medidas comuns de inteligência de tempo
-- Month-to-Date
Revenue MTD =
TOTALMTD(SUM(Sales[Revenue]), DateTable[Date])
-- Quarter-to-Date
Revenue QTD =
TOTALQTD(SUM(Sales[Revenue]), DateTable[Date])
-- Year-to-Date
Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])
-- Previous Month
Revenue PM =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSMONTH(DateTable[Date]))
-- Previous Quarter
Revenue PQ =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSQUARTER(DateTable[Date]))
-- Previous Year
Revenue PY =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSYEAR(DateTable[Date]))
-- Month-over-Month Growth
Revenue MoM % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PM]
RETURN DIVIDE(Current - Prior, Prior, 0)
-- Year-over-Year Growth
Revenue YoY % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PY]
RETURN DIVIDE(Current - Prior, Prior, 0)
-- Rolling 3-Month Average
Revenue 3M Avg =
AVERAGEX(
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -3, MONTH),
CALCULATE(SUM(Sales[Revenue]))
)
-- Cumulative Total (Running Sum)
Revenue Cumulative =
CALCULATE(
SUM(Sales[Revenue]),
FILTER(
ALL(DateTable[Date]),
DateTable[Date] <= MAX(DateTable[Date])
)
)
Inteligência temporal do ano fiscal
Se o seu ano fiscal não estiver alinhado com o ano civil, use o parâmetro opcional year_end_date:
-- Fiscal Year ending March 31
Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "3/31")
-- Or use DATESYTD for more control
Revenue Fiscal YTD v2 =
CALCULATE(
SUM(Sales[Revenue]),
DATESYTD(DateTable[Date], "3/31")
)
Transição de contexto: o mecanismo oculto
A transição de contexto é o processo em que o contexto da linha (de uma coluna calculada ou iterador) é convertido em contexto de filtro quando uma medida é chamada. Este é o conceito mais poderoso e mais incompreendido do DAX.
Como funciona
Considere esta medida:
Total Revenue = SUM(Sales[Revenue])
E esta coluna calculada na tabela Produtos:
Product Revenue = [Total Revenue]
Na coluna calculada, existe o contexto da linha (a linha do produto atual). Quando [Total Revenue] é chamado, a transição de contexto converte o contexto da linha em um filtro: CALCULATE(SUM(Sales[Revenue]), Products[ProductID] = <current row's ProductID>). O resultado é a receita desse produto específico.
Implicações de desempenho
A transição de contexto adiciona um CALCULATE implícito em torno da chamada de medida. Para mesas pequenas, isso é insignificante. Para mesas grandes e com medidas complexas, pode sair caro. Evite chamar medidas complexas dentro de iteradores em tabelas grandes.
Ineficiente:
-- Iterates over every customer, calling a complex measure each time
Customer Profitability =
SUMX(
Customers,
[Revenue] - [COGS] - [Allocated Overhead]
)
Melhor:
-- Pre-compute the components and use simple arithmetic
Customer Profitability =
SUM(Sales[Revenue]) - SUM(Sales[COGS]) -
DIVIDE(SUM(Sales[Revenue]), [Total Revenue]) * [Total Overhead]
Cenários práticos de negócios
Cenário 1: Análise ABC (Classificação de Pareto)
Classifique os produtos em A (80% principais da receita), B (próximos 15%) e C (5% inferiores):
ABC Class =
VAR CurrentProduct = SELECTEDVALUE(Products[ProductName])
VAR AllProducts =
ADDCOLUMNS(
ALL(Products[ProductName]),
"@Revenue", [Total Revenue]
)
VAR Sorted = TOPN(COUNTROWS(AllProducts), AllProducts, [@Revenue], DESC)
VAR TotalRev = SUMX(AllProducts, [@Revenue])
VAR CumulativeRev =
SUMX(FILTER(Sorted, [@Revenue] >= [Total Revenue]), [@Revenue])
VAR CumulativePct = DIVIDE(CumulativeRev, TotalRev)
RETURN
SWITCH(TRUE(),
CumulativePct <= 0.8, "A",
CumulativePct <= 0.95, "B",
"C"
)
Cenário 2: Análise de retenção de coorte
Acompanhe quantos clientes de cada coorte de aquisição permanecem ativos ao longo do tempo:
Cohort Retention Rate =
VAR CohortMonth = SELECTEDVALUE(DateTable[YearMonth])
VAR CohortCustomers =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerID]),
FILTER(
ALL(Sales),
FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
)
)
VAR ActiveCustomers =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerID]),
FILTER(
ALL(Sales),
FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
)
)
RETURN
DIVIDE(ActiveCustomers, CohortCustomers, 0)
Cenário 3: Total Anual Móvel (MAT)
Um total anual móvel suaviza a sazonalidade somando os últimos 12 meses completos:
Revenue MAT =
CALCULATE(
SUM(Sales[Revenue]),
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)
Revenue MAT Growth =
VAR Current = [Revenue MAT]
VAR Prior =
CALCULATE(
[Revenue MAT],
DATEADD(DateTable[Date], -12, MONTH)
)
RETURN
DIVIDE(Current - Prior, Prior, 0)
Iterador vs Agregador: quando usar cada um
Funções agregadoras
SUM, AVERAGE, COUNT, MIN, MAX operam em uma única coluna. Eles são rápidos porque o mecanismo de armazenamento pode resolvê-los diretamente a partir de dados de coluna compactados.
Use quando: Você precisa de uma agregação simples de uma coluna.
Funções Iteradoras
SUMX, AVERAGEX, COUNTX, MINX, MAXX, RANKX avaliam uma expressão linha por linha. Eles são mais flexíveis, mas mais lentos porque o mecanismo de fórmula processa cada linha.
Usar quando:
- Você precisa multiplicar as colunas antes de agregar (SUMX para cálculos ponderados)
- Você precisa aplicar uma condição por linha (COUNTX com IF)
- Você precisa classificar os itens (RANKX)
- O cálculo depende de valores de tabelas relacionadas que precisam de avaliação em nível de linha
Regra básica de desempenho: Se o mesmo resultado puder ser alcançado com um agregador, use o agregador. Use iteradores somente quando a avaliação linha por linha for necessária.
Depurando DAX
Mensagens de erro comuns
| Erro | Causa | Correção |
|---|---|---|
| "É esperado um único valor para a coluna X" | Measure retorna vários valores onde um é esperado | Use SELECTEDVALUE, MAX ou CALCULATE para reduzir para um valor |
| “Dependência circular” | Duas colunas ou medidas calculadas fazem referência entre si | Redesenhar a cadeia de cálculo para remover o ciclo |
| "Não é possível determinar relacionamentos" | Caminho de relacionamento ambíguo entre tabelas | Especifique o relacionamento em USERELATIONSHIP ou ative-o |
| "A expressão refere-se a múltiplas colunas" | ALL/VALUES usados com múltiplas colunas incorretamente | Use ALL(Tabela) ou ALL(Tabela[Col1], Tabela[Col2]) |
Analisador de Desempenho
O Analisador de Desempenho do Power BI Desktop (Exibição e, em seguida, Analisador de Desempenho) mostra a consulta DAX e o tempo de execução de cada visual. Use-o para:
- Identifique imagens lentas (mais de 1 segundo)
- Copie a consulta DAX para o DAX Studio para análise detalhada
- Compare os tempos de execução antes/depois ao otimizar medidas
Estúdio DAX
DAX Studio é uma ferramenta externa gratuita que fornece análise detalhada de consultas. Isso mostra:
- Consultas do mecanismo de armazenamento (varreduras rápidas de armazenamento de colunas)
- Consultas do mecanismo de fórmula (avaliação mais lenta, linha por linha)
- Tamanhos de materialização (dados embaralhados entre motores)
Se uma medida gerar muitas consultas de mecanismo de fórmula, provavelmente usará muitos iteradores ou expressões FILTER complexas. Refatore para enviar mais trabalho ao mecanismo de armazenamento.
Para treinamento em Power BI que abrange DAX desde os fundamentos até a otimização avançada, a ECOSIRE oferece workshops práticos adaptados aos seus conjuntos de dados e questões de negócios específicos.
Perguntas frequentes
Qual é a diferença entre uma medida e uma coluna calculada?
Uma medida é avaliada no momento da consulta no contexto de filtro atual. Ele não adiciona dados à tabela – ele calcula um valor dinamicamente. Uma coluna calculada é avaliada no momento da atualização dos dados e adiciona uma coluna física à tabela. Use medidas para agregações e KPIs que mudam com base em segmentações de dados e filtros. Use colunas calculadas para classificações ou valores em nível de linha que precisam ser usados em segmentações de dados, filtros ou relacionamentos. As medidas são quase sempre preferidas porque não aumentam o tamanho do modelo.
Por que minha medida acumulada no ano mostra valores incorretos?
A causa mais comum é que sua tabela de datas não está configurada corretamente. Verifique três coisas: (1) a tabela de datas não tem lacunas --- todas as datas desde o início dos seus dados até o presente devem ser incluídas, (2) a tabela está marcada como uma tabela de datas no Power BI (Ferramentas de Tabela, depois Marcar como Tabela de Datas) e (3) o relacionamento entre a tabela de datas e sua tabela de fatos está ativo e mapeado corretamente. Verifique também se a coluna de data não inclui um componente de hora que impeça a correspondência exata.
Quando devo usar CALCULATE versus FILTER?
Use CALCULATE quando puder expressar o filtro como uma simples comparação de colunas (por exemplo, Products[Category] = "Electronics"). CALCULATE converte isso em um filtro eficiente que o mecanismo de armazenamento pode otimizar. Use FILTER quando precisar de condições complexas linha por linha que façam referência a várias colunas ou medidas de chamada (por exemplo, filtrando clientes onde CALCULATE(COUNTROWS(Sales)) > 5). FILTER é um iterador e é mais lento, então prefira a sintaxe simples de CALCULATE quando possível.
Como faço para criar uma soma total acumulada ou cumulativa no DAX?
Use CALCULATE com um filtro que inclui todas as datas até a data atual: Revenue Cumulative = CALCULATE(SUM(Sales[Revenue]), FILTER(ALL(DateTable[Date]), DateTable[Date] <= MAX(DateTable[Date]))). Isso remove o filtro de data existente (ALL) e o substitui por um filtro que inclui todas as datas desde o início até a data máxima no contexto atual. Em uma matriz mensal, cada linha mostra o total acumulado naquele mês.
Posso usar o DAX para gravar dados no banco de dados?
Não. DAX é uma linguagem de consulta somente leitura. Ele pode calcular, filtrar e transformar dados para exibição, mas não pode inserir, atualizar ou excluir dados no banco de dados de origem. Para cenários de write-back, utilize o Power Apps incorporado no Power BI ou utilize fluxos do Power Automate acionados por alertas do Power BI. Algumas ferramentas de terceiros (Acterys, Writeback Manager) adicionam recursos de write-back por meio de recursos visuais personalizados.
Escrito por
ECOSIRE Research and Development Team
Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.
Artigos Relacionados
Recursos de IA do Power BI: Copilot, AutoML e análise preditiva
Domine os recursos de IA do Power BI, incluindo Copilot para relatórios em linguagem natural, AutoML para previsões, detecção de anomalias e narrativas inteligentes. Guia de licenciamento.
Guia completo para desenvolvimento de painel do Power BI
Aprenda como criar painéis eficazes do Power BI com design de KPI, práticas recomendadas visuais, páginas de detalhamento, marcadores, layouts móveis e segurança RLS.
Modelagem de dados do Power BI: design de esquema em estrela para Business Intelligence
Domine a modelagem de dados do Power BI com design de esquema em estrela, tabelas de fatos e dimensões, medidas DAX, grupos de cálculo, inteligência de tempo e modelos compostos.
Mais de Data Analytics & BI
Guia completo para desenvolvimento de painel do Power BI
Aprenda como criar painéis eficazes do Power BI com design de KPI, práticas recomendadas visuais, páginas de detalhamento, marcadores, layouts móveis e segurança RLS.
Power BI Embedded: Adicionando análises ao seu aplicativo
Incorpore análises do Power BI em seu aplicativo SaaS. Abrange autenticação, RLS multilocatário, dimensionamento de capacidade, SDK JavaScript, temas personalizados e preços do Fabric.
Migrando do Excel para o Power BI: guia passo a passo
Guia completo para migrar do Excel para o Power BI, abrangendo tradução de fórmulas, criação de modelo de dados, Power Query, validação e descomissionamento.
O guia completo para integração Power BI + Odoo
Conecte o Power BI ao Odoo ERP para análises avançadas. Consultas diretas do PostgreSQL, tabelas principais, painéis de vendas/estoque/RH e configuração de atualização incremental.
Medindo o ROI da IA nos negócios: uma estrutura que realmente funciona
Uma estrutura prática para medir o retorno do investimento em IA, abrangendo economias diretas, ganhos de produtividade, impacto nas receitas e valor estratégico entre departamentos.
Construindo painéis de relatórios financeiros: KPIs, design e integração de ERP
Projete painéis de relatórios financeiros que orientam decisões. Saiba quais KPIs rastrear, princípios de design de painel e práticas recomendadas de integração de ERP.