Combinando qualificador TOTAL e AGGR

Olá Qlikers,

Como último post de 2017,  resolvi escrever sobre 2 fucionalidades muito poderosas para construção de expressões em QlikView / Qlik Sense. O qualificador TOTAL e a função AGGR

Se você já a trabalha algum tempo com o Qik, você já deve ter usado o qualificador total na sua expressão de agregação para calcular por exemplo % do produto sobre total de vendas, ou mesmo obter a maior venda dentro de um agrupamento de dimensão,

Com o  qualificador TOTAL podemos obter o total geral da expressão ou obter subtotais.

Parao obter subtotais via de regra os campos devem estar declarados como dimensões do seu gráfico.

Mas existe uma situação peculiar que é o uso do TOTAL com campos de subtotais sem que estes campos estejam declarados na dimensão do seu gráfico ! E para conseguir isso , utilizamos o AGGR.

Bom, vamos recaptular o uso do TOTAL e do AGGR caso você ainda não esteja familirizado e logo em seguida explico o uso combinado destes dois comandos.

O Qualificador Total

Veja o exemplo a seguir onde temos 2 expressões utizando o qualificador TOTAL

Sales = sum(Sales)

% over totalsum(Sales) / sum (TOTAL Sales)

Largest Sale from Same Car Makemax(TOTAL <[Car Make]> Sales)

Perceba que na expressão % over total , utilizamos o TOTAL sem modificador e assim obtemos a soma dos valores possíveis deprezandos os valores pertinentes a cada item da dimensão.

Já na segunda expressão  Largest Sale from Same Car Make, temos  um campo definido entre <> no TOTAL para obtermos o maior valor de um modelo de carro dentro de um mesmo fabricante “Car Make” e este valor é atribuido para todos os modelos do mesmo fabricante. 

Simplificando, utilizamos TOTAL com campos definidos entre <> para obter valores de subtotais.

Existe uma regra básica para o uso qualificador TOTAL com campos que diz:

“O Qualificador TOTAL atua sobre todas as dimensões de um gráfico”.

E se eu tivesse que obter um subtotal de uma dimensão que não estivesse definida no gráfico ?

Se eu simplesmente remover a dimensão “Car Make” do meu gráfico, o cálculo Largest Sale from Same Car Make deixa de funcionar.

Perceba o valor 19.731 repetido para todas as linhas.

E como que eu mantenho o cálculo funcionando após remover a dimensão “Car Make” ?

Ai entra o nosso amigo AGGR .

O AGGR

Segundo definição extraída do manual do QlikView Aggr é (link para o manual online) :

Aggr() retorna um conjunto de valores da expressão calculada sobre a dimensão indicada e as dimensões. Por exemplo, o valor máximo de vendas por cliente, por região. A função Aggr é usada para agregações avançadas, em que a função Aggr está incluída em outra função de agregação, usando o conjunto de resultados da função Aggr como entrada para a agregação na qual está inserida.”

Sintaxe básica:

AGGR (expressão de agregação, campo1, campo2, campo.. )

Um exemplo simples do AGGR seria:

Sum(Aggr(Avg(Sales), “Car Make”))

Primeiro calculamos a média do fabricante com Avg(Sales). 

Colocamos esta expressão dentro do AGGR e definimos qual dimensão a função AVG utilizará para agregação.  

E por fim encapsulamos o AGGR com a função Sum para obter a soma das médias por fabricante.

“Pense no AGGR como uma função que cria uma tabela virtual com uma expressão e n dimensões, com resultado semelhante ao de um grafico de tabela simples.”

Em um uso mais avançado, é possível definir a classifcação dos valores dentro do AGGR. Para saber mais sobre isso leia meu post na Qlik Community “Classificação por expressão no AGGR”

Combinando o qualificador TOTAL com a função AGGR

Agora que revisamos os conceitos do qualificador TOTAL e a função AGGR. Podemos falar da solução que encontrei meu problema com cálculo sobre dimensões não declaradas no gráfico.

Sabendo que o TOTAL exige que os campos utilizados como subtotal existam no gráfico, podemos “simular” isso ao encapsular a expressão em um AGGR.

A solução se resume a expressão abaixo (indentada para facilitar a leitura) :

max(

aggr(

max(TOTAL <[Car Make]> Sales)

  ,  [Car Make],  [Car Model])

)

Colocamos a expressão max(TOTAL <[Car Make]> Sales) , dentro da função aggr declarando os campos de agregação necessários:

  • Car Model é a dimensão principal do gráfico
  • Car Make é a dimensão secundária para subtotalização

Por fim temos o max como função mais externa para obter o maior valor entre  todos os carros.

Conclusão

O qualificador TOTAL junto com a função de agregação avançada AGGR nos possibilita expandir as possibilidades de cálculo sem que seja necessário ter todas as dimensões incluidas no gráfico. Podemos utilizar esta técnica para cálculos que podem utilizados em objetos de Texto, KPI, Barras, Linhas entre outros objetos que talvez somente possamos utilizar somente uma ou talvez nenhuma dimensão.

Um ponto importante a considerar sobre o AGGR é que ele é um recurso que pode consumir muitos recursos de CPU e memória dependendo da complexidade e volume de dados utilizado como base para os cálculos, Use com cautela.

Espero que este post te ajude a fazer melhor uso das expressões avançadas com AGGR e fazer um  bom uso delas.

Aguardo seu comentário. Se gostou , compartilhe.

Feliz 2018 !!

 

 

Comments

  1. Jackson Alfonso

    Excelente post, mestre Pablo, muito elucidativo.

    Desculpe se não encontrei e nem se é possível, mas seria muito top, se pudéssemos baixar o app de exemplo que você montou, não digo nem quanto as informações, pois são poucos dados, mas vendo o código de caras experientes como você, podemos tirar muitos bons exemplos de como estruturar o nosso scripts nos nossos apps, parabéns !

    1. Post
      Author

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *