BLOG DOS
INCOMPARÁVEIS

Publicações

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

Leia também

Assista agora o Minicurso gratuito de Power BI:

Publicações recentes:
Assuntos: