Cheat sheet de Power BI
Última atualização
Medidas, colunas e tabelas
Uma medida é calculada para cada célula de um visual; uma coluna calculada é calculada uma vez por linha e armazenada.
| O que faz | DAX |
|---|---|
| Criar uma medida | Total Sales = SUM ( Sales[Amount] ) |
| Criar uma coluna calculada (um valor por linha) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Criar uma tabela calculada | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Referenciar uma coluna: nome da tabela e depois a coluna entre colchetes | Sales[Amount] |
| Colocar entre aspas um nome de tabela que tem espaço ou é uma palavra reservada | 'Date'[Date] |
| Referenciar uma medida: só colchetes | [Total Sales] |
| Usar uma medida dentro de outra medida | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Funções de agregação
Cada uma resume uma coluna no contexto de filtro atual.
| O que faz | DAX |
|---|---|
| Somar uma coluna | SUM ( Sales[Amount] ) |
| Média de uma coluna | AVERAGE ( Sales[Amount] ) |
| Menor valor | MIN ( Sales[Order Date] ) |
| Maior valor | MAX ( Sales[Order Date] ) |
| Contar as linhas de uma tabela | COUNTROWS ( Sales ) |
| Contar os valores de uma coluna que não estão em branco | COUNT ( Sales[Amount] ) |
| Contar valores distintos | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Dividir com segurança: em branco em vez de erro quando o divisor é 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| Dividir com um valor para mostrar quando o divisor é 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
Iteradores (as funções X)
Percorrem uma tabela linha por linha, avaliam uma expressão em cada linha e depois agregam os resultados.
| O que faz | DAX |
|---|---|
| Multiplicar por linha e depois somar | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Média de um resultado por linha | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Maior resultado por linha | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Média de uma medida por cliente | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| Usar uma coluna de uma tabela relacionada na expressão | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Contar as linhas que atendem a uma condição | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Classificar cada produto por uma medida | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Classificar sem saltos depois de empates (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Juntar valores em um único texto | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE e funções de filtro
CALCULATE avalia uma expressão com filtros alterados. Um filtro na mesma coluna substitui o anterior; filtros em colunas diferentes se combinam com AND.
| O que faz | DAX |
|---|---|
| Filtrar por um valor | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Filtrar por uma lista de valores | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| Dois filtros (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR entre duas colunas | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Filtrar por uma medida | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Manter o filtro existente e fazer a interseção com ele | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Remover os filtros de uma coluna | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Remover todos os filtros de uma tabela | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Remover todos os filtros de uma tabela, exceto algumas colunas | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Manter a seleção da segmentação e ignorar as linhas do próprio visual | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Usar uma relação inativa | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Fazer um filtro fluir nas duas direções para uma medida | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| Filtrar por uma tabela sem relação | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Inteligência de tempo
Precisam de uma tabela de datas: uma linha por dia, sem lacunas, marcada como tabela de datas.
| O que faz | DAX |
|---|---|
| Acumulado no ano | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Acumulado no ano, com ano fiscal terminando em 30 de junho | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| Acumulado no ano dentro do CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Acumulado no trimestre | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Acumulado no mês | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Mesmo período do ano anterior | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Deslocar as datas por um intervalo (aqui, um mês para trás) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| O mês anterior inteiro | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| O período inteiro um ano antes | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| Os últimos 12 meses até a última data visível | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Um intervalo de datas fixo | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Padrões comuns de medidas
Copie e renomeie as tabelas e colunas de acordo com o seu modelo.
| O que faz | DAX |
|---|---|
| Percentual sobre todas as categorias | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Percentual sobre o que as segmentações deixam | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Crescimento ano a ano | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Total acumulado desde o início | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| Média móvel de 7 dias (por dia com vendas) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Mostrar um valor só para os 5 primeiros | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Contar clientes acima de um limite | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Fazer um total somar as suas linhas | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Mostrar um valor só em um nível de uma matriz | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Saldo final: a última data que tem valor | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Funções lógicas e de informação
Para condições e para saber o que o contexto de filtro contém.
| O que faz | DAX |
|---|---|
| Uma condição | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Vários valores de uma expressão | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Faixas, verificadas de cima para baixo | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND e OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| O valor está em branco? | ISBLANK ( [Total Sales] ) |
| Primeiro valor que não está em branco | COALESCE ( [Total Sales], 0 ) |
| O filtro deixa exatamente um valor? | HASONEVALUE ( Product[Category] ) |
| Esse único valor, ou um padrão | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Esta linha do visual está agrupada pela coluna? | ISINSCOPE ( Product[Category] ) |
| Retornar um valor em branco | BLANK () |
Funções de texto
O operador & junta textos; FORMAT transforma um número ou uma data em texto.
| O que faz | DAX |
|---|---|
| Juntar textos | Customer[First Name] & " " & Customer[Last Name] |
| Formatar um número | FORMAT ( [Total Sales], "#,0.00" ) |
| Formatar uma data | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| Primeiros caracteres | LEFT ( Product[Code], 3 ) |
| Caracteres a partir de uma posição | MID ( Product[Code], 4, 2 ) |
| Comprimento | LEN ( Product[Name] ) |
| Maiúsculas | UPPER ( Store[City] ) |
| Remover espaços extras | TRIM ( Customer[Name] ) |
| Substituir texto | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Posição de um texto, sem diferenciar maiúsculas (0 quando não encontra) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Funções de data
Por baixo, datas são números, então você pode subtraí-las para obter dias.
| O que faz | DAX |
|---|---|
| Data de hoje | TODAY () |
| Montar uma data | DATE ( 2025, 12, 31 ) |
| Ano de uma data | YEAR ( 'Date'[Date] ) |
| Número do mês | MONTH ( 'Date'[Date] ) |
| Dia da semana, com segunda-feira como 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Número da semana, com semanas começando na segunda-feira | WEEKNUM ( 'Date'[Date], 2 ) |
| Último dia do mês | EOMONTH ( 'Date'[Date], 0 ) |
| Mesmo dia um mês antes | EDATE ( 'Date'[Date], -1 ) |
| Dias entre duas datas | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Uma tabela de datas a partir de datas fixas | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Uma tabela de datas a partir das datas do modelo | CALENDARAUTO () |
Relações e pesquisas
RELATED segue uma relação do lado muitos para o lado um.
| O que faz | DAX |
|---|---|
| Valor do lado um (em uma coluna de Sales) | RELATED ( Product[Category] ) |
| As linhas do lado muitos da linha atual (em uma coluna de Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| Pesquisar um valor sem relação | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Caminho pai e filho (para hierarquias e segurança em nível de linha) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| O usuário conectado, para segurança dinâmica em nível de linha | USERPRINCIPALNAME () |
Funções de tabela
Retornam tabelas: use-as em uma tabela calculada, dentro do CALCULATE ou em um iterador.
| O que faz | DAX |
|---|---|
| Valores distintos no filtro atual | VALUES ( Product[Category] ) |
| Linhas que atendem a uma condição | FILTER ( Product, Product[Price] > 100 ) |
| As N primeiras linhas por uma medida | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Agrupar por colunas e adicionar medidas | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Adicionar uma coluna a uma tabela | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Escolher e renomear colunas | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Uma lista de números | GENERATESERIES ( 1, 10, 1 ) |
| Todas as combinações de duas tabelas | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Empilhar duas tabelas com as mesmas colunas | UNION ( 'Sales 2024', 'Sales 2025' ) |
Variáveis
VAR dá nome a uma etapa e a calcula uma vez; RETURN entrega o resultado.
| O que faz | DAX |
|---|---|
| Uma variável | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Várias variáveis | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Uma tabela em uma variável | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Etapas do Power Query (M)
O Power Query prepara os dados antes do carregamento. Estas são as fórmulas M por trás dos botões mais comuns.
| O que faz | M |
|---|---|
| Manter as linhas que correspondem | Table.SelectRows(Source, each [Status] = "Paid") |
| Remover colunas | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Definir os tipos das colunas | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Renomear uma coluna | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Adicionar uma coluna | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| Mesclar (join) duas consultas | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Acrescentar (empilhar) consultas | Table.Combine({Sales2024, Sales2025}) |
| Transformar colunas em linhas (unpivot) | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Agrupar e agregar | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Substituir erros por um valor | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Esta cheat sheet de Power BI reúne em uma página o DAX que você mais escreve: agregações, os iteradores X, CALCULATE e as funções que alteram filtros, inteligência de tempo, funções de texto e de data e padrões de medidas para copiar, como percentual do total, crescimento ano a ano e totais acumulados.
Os exemplos usam um modelo de vendas com as tabelas Sales, Product, Customer e 'Date'; renomeie de acordo com o seu modelo. O DAX foi analisado pelo mecanismo do curso de Power BI da Coddy, onde você pode escrevê-lo em um espaço de trabalho do Power BI no navegador e ter tudo verificado.
Perguntas frequentes sobre a cheat sheet de Power BI
Esta cheat sheet de Power BI é grátis?
Sim. Leia aqui ou salve nos favoritos; não precisa de cadastro.
Qual é a diferença entre uma medida e uma coluna calculada?
Uma coluna calculada é calculada uma vez por linha na atualização e fica armazenada, então você pode segmentar por ela. Uma medida é calculada para cada célula de um visual, com os filtros daquela célula, e não armazena nada. Totais e proporções ficam em medidas.
O que o CALCULATE faz?
Ele avalia uma expressão com filtros alterados: adiciona, substitui ou remove filtros e depois calcula o resultado. A maior parte do DAX além de totais simples é CALCULATE com os argumentos de filtro certos.
Por que usar DIVIDE em vez do operador /?
DIVIDE retorna um valor em branco (ou um valor que você escolher) quando o divisor é zero ou está em branco. O operador / retorna infinito ou um valor de erro, que aparece nos visuais.Preciso de uma tabela de datas para inteligência de tempo?
TOTALYTD e SAMEPERIODLASTYEAR precisam de uma tabela com uma linha por dia, sem lacunas e com anos completos, relacionada às suas tabelas de fatos e marcada como tabela de datas.Este DAX funciona no Power Pivot do Excel e no Analysis Services?
A linguagem DAX é a mesma, então quase tudo funciona lá também. Algumas funções mais novas chegam primeiro ao Power BI.
Onde posso praticar DAX?
No curso de Power BI da Coddy: cada lição dá a você um espaço de trabalho do Power BI no navegador e verifica sua medida com os dados da lição e com cópias ocultas deles.