Menu
CoddyTech

Cheat sheet de Power BI

Última atualização

Aprenda Power BI grátis

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 fazDAX
Criar uma medidaTotal Sales = SUM ( Sales[Amount] )
Criar uma coluna calculada (um valor por linha)Line Total = Sales[Quantity] * Sales[Unit Price]
Criar uma tabela calculadaTop Customers = TOPN ( 10, Customer, [Total Sales] )
Referenciar uma coluna: nome da tabela e depois a coluna entre colchetesSales[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 medidaAverage Price = DIVIDE ( [Total Sales], [Total Units] )

Funções de agregação

Cada uma resume uma coluna no contexto de filtro atual.

O que fazDAX
Somar uma colunaSUM ( Sales[Amount] )
Média de uma colunaAVERAGE ( Sales[Amount] )
Menor valorMIN ( Sales[Order Date] )
Maior valorMAX ( Sales[Order Date] )
Contar as linhas de uma tabelaCOUNTROWS ( Sales )
Contar os valores de uma coluna que não estão em brancoCOUNT ( Sales[Amount] )
Contar valores distintosDISTINCTCOUNT ( Sales[Customer Key] )
Dividir com segurança: em branco em vez de erro quando o divisor é 0DIVIDE ( [Total Sales], [Total Units] )
Dividir com um valor para mostrar quando o divisor é 0DIVIDE ( [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 fazDAX
Multiplicar por linha e depois somarSUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Média de um resultado por linhaAVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Maior resultado por linhaMAXX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Média de uma medida por clienteAVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] )
Usar uma coluna de uma tabela relacionada na expressãoSUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) )
Contar as linhas que atendem a uma condiçãoCOUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) )
Classificar cada produto por uma medidaRANKX ( 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 textoCONCATENATEX ( 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 fazDAX
Filtrar por um valorCALCULATE ( [Total Sales], Product[Category] = "Bikes" )
Filtrar por uma lista de valoresCALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } )
Dois filtros (AND)CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" )
OR entre duas colunasCALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) )
Filtrar por uma medidaCALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Manter o filtro existente e fazer a interseção com eleCALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) )
Remover os filtros de uma colunaCALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) )
Remover todos os filtros de uma tabelaCALCULATE ( [Total Sales], ALL ( Product ) )
Remover todos os filtros de uma tabela, exceto algumas colunasCALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) )
Manter a seleção da segmentação e ignorar as linhas do próprio visualCALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) )
Usar uma relação inativaCALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) )
Fazer um filtro fluir nas duas direções para uma medidaCALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) )
Filtrar por uma tabela sem relaçãoCALCULATE ( [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 fazDAX
Acumulado no anoTOTALYTD ( [Total Sales], 'Date'[Date] )
Acumulado no ano, com ano fiscal terminando em 30 de junhoTOTALYTD ( [Total Sales], 'Date'[Date], "6/30" )
Acumulado no ano dentro do CALCULATECALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )
Acumulado no trimestreTOTALQTD ( [Total Sales], 'Date'[Date] )
Acumulado no mêsTOTALMTD ( [Total Sales], 'Date'[Date] )
Mesmo período do ano anteriorCALCULATE ( [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 inteiroCALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) )
O período inteiro um ano antesCALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) )
Os últimos 12 meses até a última data visívelCALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) )
Um intervalo de datas fixoCALCULATE ( [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 fazDAX
Percentual sobre todas as categoriasCategory % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) )
Percentual sobre o que as segmentações deixamVisible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) )
Crescimento ano a anoYoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear )
Total acumulado desde o inícioRunning 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 primeirosTop 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] )
Contar clientes acima de um limiteBig Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) )
Fazer um total somar as suas linhasBonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] )
Mostrar um valor só em um nível de uma matrizCategory Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) )
Saldo final: a última data que tem valorClosing 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 fazDAX
Uma condiçãoIF ( [Total Sales] > 1000, "High", "Low" )
Vários valores de uma expressãoSWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" )
Faixas, verificadas de cima para baixoSWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" )
AND e ORIF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" )
O valor está em branco?ISBLANK ( [Total Sales] )
Primeiro valor que não está em brancoCOALESCE ( [Total Sales], 0 )
O filtro deixa exatamente um valor?HASONEVALUE ( Product[Category] )
Esse único valor, ou um padrãoSELECTEDVALUE ( Product[Category], "All categories" )
Esta linha do visual está agrupada pela coluna?ISINSCOPE ( Product[Category] )
Retornar um valor em brancoBLANK ()

Funções de texto

O operador & junta textos; FORMAT transforma um número ou uma data em texto.

O que fazDAX
Juntar textosCustomer[First Name] & " " & Customer[Last Name]
Formatar um númeroFORMAT ( [Total Sales], "#,0.00" )
Formatar uma dataFORMAT ( 'Date'[Date], "mmm yyyy" )
Primeiros caracteresLEFT ( Product[Code], 3 )
Caracteres a partir de uma posiçãoMID ( Product[Code], 4, 2 )
ComprimentoLEN ( Product[Name] )
MaiúsculasUPPER ( Store[City] )
Remover espaços extrasTRIM ( Customer[Name] )
Substituir textoSUBSTITUTE ( 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 fazDAX
Data de hojeTODAY ()
Montar uma dataDATE ( 2025, 12, 31 )
Ano de uma dataYEAR ( 'Date'[Date] )
Número do mêsMONTH ( 'Date'[Date] )
Dia da semana, com segunda-feira como 1WEEKDAY ( 'Date'[Date], 2 )
Número da semana, com semanas começando na segunda-feiraWEEKNUM ( 'Date'[Date], 2 )
Último dia do mêsEOMONTH ( 'Date'[Date], 0 )
Mesmo dia um mês antesEDATE ( 'Date'[Date], -1 )
Dias entre duas datasDATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY )
Uma tabela de datas a partir de datas fixasCALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) )
Uma tabela de datas a partir das datas do modeloCALENDARAUTO ()

Relações e pesquisas

RELATED segue uma relação do lado muitos para o lado um.

O que fazDAX
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çãoLOOKUPVALUE ( 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 linhaUSERPRINCIPALNAME ()

Funções de tabela

Retornam tabelas: use-as em uma tabela calculada, dentro do CALCULATE ou em um iterador.

O que fazDAX
Valores distintos no filtro atualVALUES ( Product[Category] )
Linhas que atendem a uma condiçãoFILTER ( Product, Product[Price] > 100 )
As N primeiras linhas por uma medidaTOPN ( 5, ALL ( Product[Product] ), [Total Sales] )
Agrupar por colunas e adicionar medidasSUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] )
Adicionar uma coluna a uma tabelaADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] )
Escolher e renomear colunasSELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] )
Uma lista de númerosGENERATESERIES ( 1, 10, 1 )
Todas as combinações de duas tabelasCROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) )
Empilhar duas tabelas com as mesmas colunasUNION ( 'Sales 2024', 'Sales 2025' )

Variáveis

VAR dá nome a uma etapa e a calcula uma vez; RETURN entrega o resultado.

O que fazDAX
Uma variávelMargin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue )
Várias variáveisSales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY
Uma tabela em uma variávelTop 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 fazM
Manter as linhas que correspondemTable.SelectRows(Source, each [Status] = "Paid")
Remover colunasTable.RemoveColumns(Source, {"Notes", "Temp"})
Definir os tipos das colunasTable.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}})
Renomear uma colunaTable.RenameColumns(Source, {{"amt", "Amount"}})
Adicionar uma colunaTable.AddColumn(Source, "Total", each [Quantity] * [Price], type number)
Mesclar (join) duas consultasTable.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter)
Acrescentar (empilhar) consultasTable.Combine({Sales2024, Sales2025})
Transformar colunas em linhas (unpivot)Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")
Agrupar e agregarTable.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}})
Substituir erros por um valorTable.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?
Sim. Funções como 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.

Ilustração das linguagens de programação do Coddy

Aprenda Power BI com a Coddy

Começar