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