fbpx

função MAXX

#ABCdoDAX

Função MAXX

A função MAXX é parecida com a função MAX, que já vimos anteriormente, porém com uma diferença importante, que mostraremos a seguir.

Em termos de cálculo ela mostra o maior valor de determinada lista de valores.

No nosso exemplo queremos calcular o maior preço praticado. Note que na nossa tabela não temos uma COLUNA de preço, e sim uma medida.

No nosso raciocínio se pensarmos em calcular o maior preço vamos imaginar uma LISTA com todos os preços e em seguida a função buscando o maior preço dentro daquela lista.

Bom, é isso o que representa calcular o maior valor, mas não é o que a FUNÇÃO faz. Uma coisa é sabermos o que o cálculo faz, outra é saber o como a função funciona.

Se formos criar um cálculo usando a função MAX,

Teremos uma mensagem de erro:

 

Porque na verdade esse PREÇO precisa de algum contexto para aparecer. Enquanto não estiver em algum visual é como se ele “não existisse”.

Então nós deveríamos ter essa lista de preços calculado na medida “em algum lugar”.

E há 2 “lugares”: criando uma coluna e nela colocando esse preço ou usando uma função especial.

No primeiro exemplo nós iríamos inserir uma nova coluna na nossa consulta com essa função:

 

Basicamente iríamos inserir uma coluna com o resultado daquela medida para cada linha, e nosso resultado seriam os preços para cada registro:

Em seguida nós poderíamos calcular o máximo (usando a função MAX) nessa nova coluna criada:

 

 

E daí por diante bastaria colocar esse resultado em um visual qualquer.

É possível? Claro que sim, mas há outra forma, usando a função MAXX. As funções  com um “X” no final trabalham usando o chamado contexto de linha, que significa que a função avalia cada uma das linhas da consulta e para cada linha faz o cálculo desejado.

E é isso o que queremos fazer, calcular o maior preço de cada uma das linhas de nossa tabela.

Se tivéssemos a coluna de preço criada não seria necessário passar por cada linha, pois esse cálculo já estaria lá na nossa consulta. Mas no momento temos somente uma medida, sem estar aplicada no contexto de cada linha.

Contexto de Linha e Contexto de Filtro / Query

Sem querer complicar antes da hora (falaremos mais sobre contexto em postagens futuras) e nem fugir do objetivo desse texto, já sabemos que as medidas trabalham em um determinado contexto.

Se pegarmos a receita e colocarmos em um visual com o nome do produto nós teremos a receita por produto. Se colocarmos o preço num gráfico de meses teremos o preço dentro do contexto de meses, etc.

Esse contexto que temos nos visuais é o chamado contexto de filtro (ou query). É o contexto mais comum e o que entendemos intuitivamente, já que ele é meio óbvio.

Porém existe um outro contexto, que é o de linha. Não entenda linha como se fosse linha de uma tabela de visual, não é.

Linha aqui se refere à linha de consulta. As linhas que aparecem na base que importamos. Elas não estão agrupadas por nada, são registros “brutos”.

As funções “X” são funções que funcionam no contexto de linha, isto é, elas “passeiam” em cada uma das linhas de nossa base de dados e em seguida o cálculo é realizado.

É por isso que precisamos usar a função MAXX para calcular o maior preço, porque precisamos gerar um preço para cada linha da nossa consulta.

Como comentei, depois teremos um artigo explicando melhor essa questão de contexto de linha e filtro. Por enquanto basta saber que as funções “X” fazem o cálculo desejado para cada uma das linhas de nossa consulta.

Sintaxe da função MAXX

A função MAXX tem 2 argumentos: A tabela onde ela será calculada e a medida / coluna que será usada no cálculo.

No nosso exemplo queremos calcular o maior preço, e a tabela é a de VENDAS (a tabela principal).

Nossa sintaxe ficará:

Então a função MAXX irá calcular o preço para cada linha da tabela VENDAS.

Se criarmos uma tabela como a abaixo por produto, veremos a medida no contexto de filtro.

 

E temos o resultado desejado, que é o maior preço para aquele contexto de filtro.

Se por acaso montarmos uma tabela com o nome da família teremos o mair preço de todas as vendas feitas daquela família (lembre-se que a função ainda vai puxar os dados de todas as linhas da consulta, independente do contexto de filtro que você colocar).

Vamos complicar um pouco…

Vamos imaginar agora que queiramos calcular a maior receita de cada produto e visualizarmos isso numa tabela com o nome da família.

Temos um contexto de filtro, que será a familia. Se usarmos a medida básica MAX para a receita e a colocarmos em uma tabela com o nome da família só teremos a existência do contexto de filtro, uma vez que a medida MAX não possui contexto de linha, e dessa forma veríamos a maior receita dentro do contexto de filtro de cada família. Veja:

Esse valor de R$40 da família futas é a maior receita de todas as vendas feitas da família frutas.

Mas o que queremos é a maior receita de produtos da família frutas. Quer dizer que precisamos de uma função que irá somar a receita de todos os produtos e depois aplicar o contexto de filtro para pegar o preço de todos os produtos daquela família.

E isso se consegue usando a função MAXX, mas considerando a tabela de produtos. Veja:

A função irá calcular a maior receita da tabela de PRODUTOS. Como na tabela de produtos temos em cada linha um produto diferente. a receita será calculada para cada produto. É como se fizéssemos um SOMASE de produtos e em seguida calculássemos a maior receita.

Daí quando deixarmos no contexto de filtro a família teremos a maior receita de cada família. Veja abaixo que a coluna RECEITA é a medida sem contexto de linha, considerando a receita da família (no caso, a soma da receita de todas as vendas daquela família).

 As funções “X” são poderosas e com elas podemos fazer uma infinidade de cálculos. Vamos abordar outras funções dessas ao longo de nossa série #ABCdoDAX.

 

Licença Creative Commons

OUTROS ARTIGOS DE INTERESSE

Fabio Vianna
Siga-Me
Nossas Redes Sociais
Facebook
Linkedin
Instagram
Youtube