Guia Prático de Funções DAX

Um guia de referência para as funções DAX mais usadas no Power BI, com exemplos práticos.

Prof. Esp. Leandro Gaudio Rosa

Principais Funções DAX

SUM (Soma)

Soma todos os números em uma coluna.

Sintaxe

SUM(<coluna>)
  • <coluna>: A coluna que contém os números que você deseja somar.

AVERAGE (Média)

Calcula a média aritmética de todos os números em uma coluna.

Sintaxe

AVERAGE(<coluna>)
  • <coluna>: A coluna que contém os números dos quais você deseja calcular a média.

COUNT (Contagem)

Conta o número de linhas em uma coluna que contêm valores não brancos (números, datas ou texto).

Sintaxe

COUNT(<coluna>)
  • <coluna>: A coluna da qual você deseja contar os valores.

DISTINCTCOUNT (Contagem Distinta)

Conta o número de valores únicos (distintos) em uma coluna.

Sintaxe

DISTINCTCOUNT(<coluna>)
  • <coluna>: A coluna da qual você deseja contar os valores distintos.

CALCULATE (Calcular)

A função mais importante do DAX. Avalia uma expressão em um contexto de filtro modificado.

Sintaxe

CALCULATE(<expressão>[, <filtro1>[, <filtro2>[, …]]])
  • <expressão>: A medida ou cálculo que você deseja executar (ex: `SUM(FactVendas[Quantidade])`).
  • <filtroN>: Uma ou mais condições de filtro que modificam o contexto (ex: `DimProduto[Categoria] = "Eletrônicos"`).

FILTER (Filtrar)

Retorna uma tabela que representa um subconjunto de outra tabela, com base em uma condição de filtro.

Sintaxe

FILTER(<tabela>, <expressão_de_filtro>)
  • <tabela>: A tabela que você deseja filtrar.
  • <expressão_de_filtro>: Uma expressão booleana (verdadeiro/falso) avaliada para cada linha da tabela.

ALL (Tudo)

Remove todos os filtros de uma tabela ou de colunas específicas. Muito usada dentro de `CALCULATE`.

Sintaxe

ALL([<tabela> | <coluna1>[, <coluna2>[, …]]])
  • <tabela> / <coluna>: (Opcional) A tabela ou colunas das quais você deseja remover os filtros. Se deixado em branco, remove todos os filtros do contexto atual.

RELATED (Relacionado)

Busca um valor de uma tabela relacionada (lado "um" da relação). Usada para criar colunas calculadas.

Sintaxe

RELATED(<coluna>)
  • <coluna>: A coluna da tabela relacionada (lado "um") que você deseja trazer.

IF (Se)

Verifica uma condição e retorna um valor se for VERDADEIRA, e outro valor se for FALSA.

Sintaxe

IF(<condição>, <resultado_verdadeiro>, [<resultado_falso>])
  • <condição>: A expressão lógica a ser testada.
  • <resultado_verdadeiro>: O valor a ser retornado se a condição for verdadeira.
  • <resultado_falso>: (Opcional) O valor a ser retornado se a condição for falsa. Se omitido, retorna BLANK.

SWITCH (Alternar)

Uma forma mais limpa de escrever múltiplos `IF`s aninhados. Compara uma expressão com uma lista de valores.

Sintaxe

SWITCH(<expressão>, <valor1>, <resultado1>[, <valor2>, <resultado2>[, …[, <outro>]]])
  • <expressão>: A expressão a ser avaliada.
  • <valorN>: Um valor constante a ser comparado com a expressão.
  • <resultadoN>: O valor a ser retornado se a expressão corresponder ao <valorN>.
  • <outro>: (Opcional) O valor a ser retornado se a expressão não corresponder a nenhum valor.

TOTALYTD (Total no Ano)

Calcula o acumulado de uma expressão no ano (Year-to-Date), desde o início do ano até a data atual no contexto.

Sintaxe

TOTALYTD(<expressão>, <datas>[, <filtro>[, <fim_do_ano>]])
  • <expressão>: A medida a ser acumulada (ex: `[Faturamento Total]`).
  • <datas>: A coluna de datas da sua tabela calendário (ex: `DimCalendario[Data]`).
  • <fim_do_ano>: (Opcional) Define a data de término do ano fiscal (ex: "31/12").

SAMEPERIODLASTYEAR (Mesmo Período do Ano Anterior)

Retorna uma tabela de datas deslocada um ano para trás. Usada com `CALCULATE` para comparar com o ano anterior.

Sintaxe

SAMEPERIODLASTYEAR(<datas>)
  • <datas>: A coluna de datas da sua tabela calendário (ex: `DimCalendario[Data]`).

DIVIDE (Dividir)

Executa uma divisão de forma segura, tratando automaticamente erros de divisão por zero.

Sintaxe

DIVIDE(<numerador>, <denominador>[, <resultado_alternativo>])
  • <numerador>: O número a ser dividido.
  • <denominador>: O número pelo qual dividir.
  • <resultado_alternativo>: (Opcional) O valor a ser retornado se o denominador for zero. Se omitido, retorna BLANK.

VALUES (Valores)

Retorna uma tabela de uma coluna contendo os valores distintos da coluna especificada. Respeita o contexto de filtro.

Sintaxe

VALUES(<tabela_ou_coluna>)
  • <tabela_ou_coluna>: A coluna da qual você deseja obter os valores distintos.

✨ Assistente DAX com Gemini

Use o poder da IA para acelerar seu aprendizado. Descreva o que você precisa ou peça para a IA explicar uma fórmula complexa.

1. Gerar Medida DAX

Descreva o cálculo que você quer fazer em português. A IA usará o esquema das tabelas da atividade prática para gerar a fórmula DAX.

Exemplo: "Qual o faturamento total apenas para a categoria 'Eletrônicos'?"

Sua fórmula DAX aparecerá aqui...

2. Explicar Fórmula DAX

Cole uma fórmula DAX (pode ser uma das geradas ou qualquer outra) e a IA explicará passo a passo o que ela faz, em português.

Exemplo: "CALCULATE([Faturamento Total], SAMEPERIODLASTYEAR(DimCalendario[Data]))"

A explicação da fórmula aparecerá aqui...

Atividade Prática: Modelo de Vendas

Para praticar, baixe os arquivos CSV abaixo e carregue-os no Power BI. Eles simulam um modelo de dados simples de vendas (Star Schema). Após carregar, vá para a exibição "Modelo" e crie os relacionamentos:

Importante: Após carregar a `DimCalendario`, vá para a exibição de "Tabela", selecione a tabela `DimCalendario` e, no menu superior, marque-a como "Tabela de data". Isso é essencial para as funções de inteligência de tempo.

Tabela Fato (FactVendas): Esta é a tabela principal de transações. Cada linha representa uma venda. Contém as chaves estrangeiras (IDs) que a ligam às tabelas de dimensão e os valores principais (Quantidade, ValorUnitario).

Tabela Dimensão (DimProduto): Descreve os produtos. Contém o ID do produto, nome, categoria e preço. É usada para filtrar ou agrupar as vendas por produto.

Tabela Dimensão (DimCliente): Descreve os clientes. Contém o ID do cliente, nome e localização (Cidade, Estado). Usada para analisar vendas por região ou cliente.

Tabela Dimensão (DimCalendario): A tabela de datas. Essencial para inteligência de tempo. Contém uma linha para cada dia, com colunas para Ano, Mês, Trimestre, etc.

Medidas e Colunas para Praticar (Mapeadas por Função)

Crie as seguintes medidas (ou colunas calculadas, quando indicado) no Power BI para praticar as funções DAX.

Função Base: Coluna Calculada

1. Coluna Faturamento (na `FactVendas`)

Faturamento = FactVendas[Quantidade] * RELATED(DimProduto[PrecoUnitario])

Por quê? Precisamos de uma coluna de faturamento em cada linha de venda. Como o preço está na `DimProduto`, usamos `RELATED` para buscá-lo.

Sugestão de Visualização: Esta coluna não é usada diretamente, mas é a base para a medida `Faturamento Total` abaixo.

Função Base: SUM

2. Medida Faturamento Total

Faturamento Total = SUM(FactVendas[Faturamento])

Por quê? Esta é a medida base principal. Ela soma a coluna `Faturamento` que acabamos de criar.

Sugestão de Visualização: Use em um Cartão (Card) para mostrar o KPI principal. Use também como o "Valor" em quase todos os outros gráficos (barras, linhas, pizza).

Funções Base: DIVIDE, COUNT

3. Medida Nº de Vendas

Nº de Vendas = COUNT(FactVendas[IDProduto])

4. Medida Ticket Médio

Ticket Médio = DIVIDE( [Faturamento Total], [Nº de Vendas] )

Por quê? `DIVIDE` é a forma segura de calcular o faturamento por número de vendas, evitando erros se `[Nº de Vendas]` for zero.

Sugestão de Visualização: Use a medida `Ticket Médio` em um Cartão (Card). Formate-a como moeda.

Função Base: AVERAGE

5. Medida Média Faturamento por Linha

Média Faturamento por Linha = AVERAGE(FactVendas[Faturamento])

Por quê? Diferente do Ticket Médio, isso calcula a média da coluna `Faturamento` (não por venda). Mostra o valor médio de cada *linha* de transação.

Sugestão de Visualização: Use em um Cartão (Card) para comparar com o `Ticket Médio`.

Função Base: DISTINCTCOUNT

6. Medida Clientes Únicos

Clientes Únicos = DISTINCTCOUNT(FactVendas[IDCliente])

Por quê? Conta quantos clientes *diferentes* compraram, não importa quantas vezes cada um comprou.

Sugestão de Visualização: Use em um Cartão (Card).

Funções Base: CALCULATE, FILTER (implícito)

7. Medida Faturamento Eletrônicos

Faturamento Eletrônicos = 
CALCULATE(
    [Faturamento Total],
    DimProduto[Categoria] = "Eletrônicos"
)

Por quê? `CALCULATE` modifica o contexto. Ele executa o `[Faturamento Total]` *apenas* para as linhas onde a categoria é "Eletrônicos".

Sugestão de Visualização: Use em um Cartão (Card). Crie um gráfico de Pizza com `DimProduto[Categoria]` na Legenda e `[Faturamento Total]` nos Valores para ver esta medida como uma fatia.

Funções Base: CALCULATE, ALL, DIVIDE

8. Medida % Faturamento Total (Participação)

% Faturamento Total = 
DIVIDE(
    [Faturamento Total],
    CALCULATE(
        [Faturamento Total],
        ALL(DimProduto) 
    )
)

Por quê? Para calcular a participação (ex: de um produto no total), dividimos o faturamento do produto (`[Faturamento Total]` no contexto atual) pelo faturamento total de *todos* os produtos (`CALCULATE` com `ALL` para remover o filtro do produto).

Sugestão de Visualização: Formate como Porcentagem. Use em uma Matriz com `DimProduto[Produto]` nas Linhas e esta medida nos Valores.

Funções Base: IF

9. Coluna Classificação de Preço (na `DimProduto`)

Classificação Preço = 
IF(
    DimProduto[PrecoUnitario] > 1000, 
    "Alto Custo", 
    "Baixo Custo"
)

Por quê? `IF` nos permite categorizar cada produto com base em seu preço.

Sugestão de Visualização: Use esta nova coluna como Segmentação de Dados (Slicer) ou como Eixo em um Gráfico de Barras com `[Faturamento Total]` nos Valores.

Funções Base: SWITCH

10. Coluna Grupo Categoria (na `DimProduto`)

Grupo Categoria = 
SWITCH(
    TRUE(),
    DimProduto[Categoria] = "Eletrônicos", "Tecnologia",
    DimProduto[Categoria] = "Informática", "Tecnologia",
    DimProduto[Categoria] = "Móveis", "Casa",
    DimProduto[Categoria] = "Escritório", "Casa",
    "Outros"
)

Por quê? `SWITCH` é mais limpo que vários `IF`s para agrupar categorias em grupos maiores.

Sugestão de Visualização: Use `Grupo Categoria` como Eixo em um Gráfico de Barras ou Pizza para ver as vendas por grupos consolidados.

Funções Base: TOTALYTD

11. Medida Faturamento YTD (Acumulado no Ano)

Faturamento YTD = 
TOTALYTD(
    [Faturamento Total],
    DimCalendario[Data]
)

Por quê? Calcula o faturamento acumulado desde o início do ano até a data atual no filtro.

Sugestão de Visualização: Use em um Gráfico de Linha com `DimCalendario[Data]` (ou Mês) no Eixo X para ver a curva de faturamento acumulado ao longo do ano.

Funções Base: SAMEPERIODLASTYEAR, CALCULATE

12. Medida Faturamento Ano Anterior (LY)

Faturamento LY = 
CALCULATE(
    [Faturamento Total],
    SAMEPERIODLASTYEAR(DimCalendario[Data])
)

Por quê? `SAMEPERIODLASTYEAR` "viaja no tempo", aplicando o `[Faturamento Total]` ao período exato do ano anterior.

Sugestão de Visualização: Use em um Gráfico de Linha e Coluna Agrupada. Coloque `DimCalendario[Mes]` no Eixo X, `[Faturamento Total]` nos Valores da Coluna e `[Faturamento LY]` nos Valores da Linha.

Funções Base: DIVIDE

13. Medida Crescimento vs Ano Anterior (%)

Crescimento % vs LY = 
DIVIDE(
    ( [Faturamento Total] - [Faturamento LY] ),
    [Faturamento LY]
)

Por quê? A fórmula padrão de crescimento (Ano Atual - Ano Anterior) / Ano Anterior.

Sugestão de Visualização: Formate como Porcentagem. Use em um Cartão (Card) ou em uma Matriz com `DimCalendario[Ano]` nas colunas.

Funções Base: VALUES, COUNTROWS, IF

14. Medida Faturamento (Apenas se 1 Produto filtrado)

Faturamento (se 1 Produto) = 
IF(
    COUNTROWS(VALUES(DimProduto[Produto])) = 1,
    [Faturamento Total],
    BLANK()
)

Por quê? Uma medida defensiva. `VALUES` retorna os produtos no contexto atual. Se for apenas 1, mostra o faturamento. Se for mais de 1 (ou 0), não mostra nada. Útil para títulos de gráficos dinâmicos.

Sugestão de Visualização: Use em um Cartão (Card). Ele só mostrará valor quando você filtrar um único produto no seu relatório (ex: em uma Segmentação de Dados).