Pular para o conteúdo
DAX

Medidas DAX: Quando usar a SUMX e quando usar a CALCULATE

2 min de leitura por Equipe Xperiun

Medidas DAX: Quando usar a SUMX e quando usar a CALCULATE

Você sabe quando usar a função SUMX e quando usar a CALCULATE?

Vejo muita gente utilizando a SUMX apenas para aplicação de filtros na tabela do primeiro argumento, enquanto deveriam usar a CALCULATE para isso. Relembrando, medidas com a função SUMX e as demais funções iteradoras (com X no final) adicionam um contexto de linha ao contexto de filtro original. Então a medida abaixo, quando avaliada em um visual no Power BI, possui dois contextos (de filtro e de linha):

Total Vendas = SUMX( Vendas; Vendas[Quantidade] * Vendas[Preço Unt] )

O primeiro argumento é uma tabela, que será iterada (contexto de linha) em todas as linhas visíveis (contexto de filtro) para a avaliação da expressão do segundo argumento. No final da avaliação de todas as linhas é feita a agregação solicitada, que no caso é Soma!

Essa medida está perfeita, é assim mesmo que devemos fazer!

Aí um dos pontos interessantes das funções X é a possibilidade de eu aplicar um filtro prévio na tabela do primeiro argumento. Algo como:

Total Vendas para Qtd > 10:  SUMX(  FILTER(Vendas; Vendas[Quantidade] > 10);  Vendas[Quantidade] * Vendas[Preço Unt]  )

E é aqui que talvez venha um grande ponto de confusão das pessoas quando eu mostro a medida acima, pois a primeira reação é: “que legal, então quer dizer que eu posso aplicar filtros de outras tabelas também?!”.

E a resposta para isso é: utilize a CALCULATE para aplicar filtros a medidas!

Ao invés de criar a medida da forma como está acima, eu faria o seguinte:

Total Vendas para Qtd > 10:  CALCULATE(  [Total Vendas]; Vendas[Quantidade] > 10 )

E quando usamos a CALCULATE, filtros de outras tabelas tornam-se naturais e são aplicados através do relacionamento entre tabelas. Então para calcularmos por exemplo o total em vendas para produtos da cor vermelha que tiveram venda acima de 10 unidades, podemos fazer o seguinte:

Total Vendas para Produtos Vermelhos com Qtd > 10:  CALCULATE(  [Total Vendas]; Vendas[Quantidade] > 10; Produto[Cor] = "Vermelho" )

Então fica a dica de usar a SUMX e as demais iteradoras se, e somente se, você precisa fazer uma operação prévia linha a linha da tabela que você estará iterando. Caso contrário, use a CALCULATE para aplicação de Filtros e para modificar o contexto de avaliação de expressões!

Informações sobre treinamentos: www.xperiun.com

Grande abraço,
Leonardo

Continue por aqui

DAX

Projeção de Valores com DAX

Hoje iremos falar sobre projeção de valores com DAX, e te mostrarei que o segredo está no entendimento dos contextos.

13 min de leitura

DAX

Do Excel para Contexto de Filtro, Modelos de Dados e Linguagem DAX

Vamos abordar assuntos do nível básico ao avançado, passando por tópicos como modelagem de dados, contextos de filtro e de linha, relacionamentos, cruzamento entre diferentes tabelas, comparativo de vendas com metas, diluição de meta, enfim... Um artigo completo para você começar a praticar e automatizar os seus processos, eliminando tarefas repetitivas.

24 min de leitura