fbpx

função SUMX

#ABCdoDAX

Função SUMX

A função SUMX é uma função faz uma soma, mas ao contrário da função SUM ela soma valores a partir da leitura de cada uma das linhas de uma determinada tabela.

Depois que explicar vai ficar mais simples de entender 🙂

No exemplo a seguir queremos calcular o custo total de cada um dos produtos. Nós temos uma tabela com o cadastro de produtos e a indicação de seu custo unitário e outra tabela com a informação de venda desses produtos e portanto a quantidade de cada um deles.

Esta é a tabela de produtos:

Esta a de vendas. Note que elas se relacionam pela coluna de Código do Produto.

Se criarmos uma medida simplesmente multiplicando a coluna de Custo Unitário e de Quantidade teremos isto:

Note que Quantidade é uma medida que está SOMANDO a coluna de Volume de vendas. Já no caso do custo unitário precisamos fazer alguma “agregação” dele através de uma função. No caso estamos usando a função SUM.

O que essa função SUMX fará?

Lembremos sempre da questão do contexto. Se por exemplo colocarmos essa medida em um cartão nós teremos isto:

O contexto do cartão será TUDO, então a medida vai somar toda a quantidade (55.300) e vai multiplicar pela soma do custo unitário (5,83):

Óbvio que está errado, porque na verdade a função deveria ter pego o custo unitário para cada produto, multiplicado pelo volume de vendas de cada um deles e somente depois disto somado os valores.

Se colocarmos esta medida em uma tabela é isto o que vamos ver:

O custo de cada produto está correto, porque a medida está trabalhando naquele contexto de produto, então ela vai somar somente a quantidade daquele produto e vai “somar”  custo unitário dele.

 

Como só temos um custo para cada produto então ela vai fazer a conta corretamente.

Já no total da família temos um valor errado, pois a medida irá somar o volume de vendas de todos os produtos daquela família (está OK) . Em seguida vai multiplicar pela soma de todos os custos unitários dos produtos daquela família. Bom, já sabemos que não vai dar certo.

Temos esse problema porque a função SUM está fazendo o que se espera dela, que é trabalhar dentro do contexto de filtro, isto é, está somando os valores para aquele produto, cidade, estado, etc…

Para termos o cálculo correto precisamos da função SUMX, porque é ela quem “anda” por todas as linhas da tabela antes de fazer a soma (a isto chamamos de contexto de linha).

Precisamos dizer que é para a função ir de linha em linha na tabela de PRODUTOS fazendo o cálculo de cada um dos produtos, e somente após isto ela somá-los.

Sintaxe da função SUMX

 

A sintaxe dela será esta:

O 1º argumento é a tabela onde a função vai “andar” (em inglês chama-se iteration, mas resolvi abrasileirar para “andar”). Significa que ela irá ler linha por linha da tabela de produtos.

O 2º argumento indica que cálculo ela deve fazer ao andar linha por linha. Bom, queremos pegar o volume de vendas DAQUELE PRODUTO e multiplicar pelo seu CUSTO UNITÁRIO.

Veja que aqui não estamos somando a coluna de Custo Unitário, estamos apenas indicando a coluna, pois é assim que a função irá multiplicar cada linha.

Depois de fazer essa multiplicação ela vai somar o seu resultado.

Nossa tabela ficará assim:

Veja que agora o cálculo está correto, mesmo nos totais da famílias, porque a função está sempre lendo linha a linha da tabela de produtos e somando somente o resultado final na família.

No caso do exemplo com a SUM ela somava o custo unitário daquela família.

 E se usássemos a tabela de Vendas?

Ela também funcionaria, pois ele somente iria somar os valores depois de fazer a multiplicação em cada uma das linhas, o único cuidado seria para trazer o valor do custo unitário, pois precisaríamos usar a função RELATED para trazer o valor individual de cada produto para a medida:

 

A função vai “andar” por todas as linhas da tabela de Vendas fazendo a multiplicação. Em seguida despejará seu resultado de acordo com o contexto de filtro que tivermos em nosso visual:

 

 

Licença Creative Commons

OUTROS ARTIGOS DE INTERESSE

Fabio Vianna
Siga-Me

Nossas Redes Sociais

Facebook
Linkedin
Instagram
Youtube