Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
nicolett_yuri

Acumulado com Expressão

Fala pessoal! Tudo beleza?



Certamente vocês já fizeram algum relatório de Contabilidade e foi solicitado um indicador que possui os valores acumulados mês a mês, seja de Saldo, Lucro, etc.



Sabemos que a maioria dos gráficos possuem a função de acumular na aba de expressões, mas nem sempre esse acumulado vai atender a nossa demanda.


 
Gráficos que possuem a função de acumular: Barra, Linha, Combinado, Radar, Mekko, Dispersão, Grade e Table Simples.

Gráficos que não possuem a função de acumular: Mostrador, Tabela Dinâmica, Pizza, Funil e Blocos.


  
Imagine um cenário em que temos: um gráfico de tabela simples com o valor de REALIZADO e o valor de META. Precisamos agora criar mais três colunas: Realizado Acumulado, Meta Acumulada e % de Realizado em relação a meta.

Tranquilo! Gráfico de tabela simples possui a função de acumular a expressão por padrão.


 
Primeira expressão: Realizado Acumulado!

SUM(VALOR)

Marco Acumular, já era uma.


 
Segunda expressão: Meta Acumulada!

SUM(META)

Marco Acumular, já era duas!


 
Terceira expressão: %!

Vou apenas reaproveitar as expressões...
 
[Realizado Acum.]/[Meta Acum.]

Pronto! Terminei!


  
Apenas verifico os valores só para ter certeza que não fiz nada errado
  
Jan/2015
Realizado Acum = 100
Meta Acum =  110
Percentual = 100/110 = 90,91%
Qlikview = 90,91% BOA!

  
Fev/2015
Realizado Acum = 220
Meta Acum =  240
Percentual = 220/240= 91,66%
Qlikview = 92,31% UÉ!
 

Bom, acho que preciso marcar o acumulado na expressão do percentual também!

Qlikview = 183,22%

NÃO É POSSÍVEL!


 
Deve ser algum erro de casa decimal (RSRSRS Eu sempre penso isso kkk!!!)

Refaço as contas e realmente não é erro de casa decimal.

Removo o acumulado das expressões: Realizado Acum e Meta Acum, e refaço o cálculo do percentual
 
Fev/2015
Realizado Acum = 120
Meta Acum =  130
Percentual = 120/130= 92,31%
 
Não acredito, o qlikview não consegue reutilizar a expressão com o acumulado. Afff! E agora?


 
Bom! Teremos então que investigar algumas funções que possam obter o mesmo resultado do acumulado do QlikView.
 

Funções

Hoje trabalharemos com as funções Funções Inter-Registro de Gráficos, são elas:

Above() = Acima - Retorna o valor da expressão avaliada com os valores de dimensão do gráfico da forma como aparecem na linha acima da atual em um segmento de coluna de uma tabela.

Below() = Abaixo - Retorna o valor da expressão avaliado com os valores de dimensão do gráfico que aparecem na linha abaixo da atual dentro de um segmento de coluna em uma tabela.

Before() = Antes - Retorna o valor da expressão avaliada com os valores de dimensão de uma tabela dinâmica como aparecerem na coluna antes da atual.

After() = Depois - Retorna o valor da expressão avaliada com os valores de dimensão de uma tabela dinâmica como aparecerem na coluna depois da atual.
  

Características das funções

  • Na primeira coluna de um segmento de linha, um valor NULL será retornado, já que não há uma coluna
    antes dela.
  • Se a tabela for unidimensional ou se a expressão for precedida pelo qualificador total, o segmento de linha
    atual será sempre igual à linha inteira.
  • Especificar um deslocamento maior que 1 permite que você transfira a avaliação da expressão para essa outra coluna, por exemplo: Se usar para a função Before, então estará avaliando colunas a esquerda em relação a atual coluna.
  • Um número de deslocamento negativo tornará a função o seu inverso, por exemplo a função before ficará equivalente a função after.
  • A especificação de um deslocamento igual a 0 avaliará a expressão da coluna atual.
  • Ao especificar um terceiro parâmetro n maior que 1, a função retornará não um, mas uma série de valores n,
    um para cada n colunas da tabela. Dessa forma, a função pode ser usada como um argumento para qualquer uma das Funções de Intervalo de Gráfico especiais.

 
A parte acima grifada é muito importante, pois como queremos trabalhar com valores acumulados, então teremos que pegar o valor da linha/coluna atual e somar com o de linha(s)/coluna(s) anterior(es) e isso nos obriga a utilizar essas funções de intervalo de gráfico especiais.
 
Essas funções são precedidas da palavra Range, então temos: RangeSum, RangeAvg, RangeCount, RangeMin, RangeMax.... por aí vai.
 
IMPORTANTE: Essas funções de Range servirão para somar os resultados das funções Inter-Registros. Lembre-se que essas funções Inter-Registros retornaram vários resultados e é por isso que teremos que utilizar as funções de Range. Se tentássemos utilizar somente um SUM, o Qlikview retornaria nulo.
  

Exemplo

No exemplo em que vou comentar, estarei utilizando um gráfico de tabela simples com a dimensão MêsAno e suas respectivas expressões.



Se estamos trabalhando com um gráfico de tabela simples, então utilizaremos a função Inter-Registro Above(), pois o resultado do mês anterior esta na linha acima, desde que o gráfico esteja ordenado de forma Crescente.



Lembrando: Queremos acumular desde o primeiro MêsAno disponível nos filtros.


 
Expressão de Realizado: RangeSum(Above(SUM(VALOR), 0, RowNo()))



Vamos entender os parâmetros do Above

Deslocamento é zero, ou seja, estou avaliando a expressão da linha atual

N = RowNo() [RowNo() retorna o número da linha do gráfico]



Se estamos na primeira linha do gráfico, então a expressão estará da seguinte forma: RangeSum(Above(SUM(VALOR), 0, 1)), ou seja, estamos analisando somente a linha atual. Para a expressão RangeSum estamos somando o intervalo da linha atual até a linha atual.

Se estamos na segunda linha do gráfico, então a expressão estará da seguinte forma: RangeSum(Above(SUM(VALOR), 0, 2)), ou seja, estamos analisando a linha atual  e a linha anterior. Para a expressão RangeSum estamos somando o intervalo da linha atual até a linha anterior.

Se estamos na terceira linha do gráfico, então a expressão estará da seguinte forma: RangeSum(Above(SUM(VALOR), 0, 3)), ou seja, estamos analisando a linha atual  e duas linhas anteriores. Para a expressão RangeSum estamos somando o intervalo da linha atual até duas linhas anteriores.


 
Expressão de Meta: RangeSum(Above(SUM(META), 0, RowNo()))

A regra se mantém a mesma para a meta.



Agora o percentual fica fácil:

RangeSum(Above(SUM(VALOR), 0, RowNo())) / RangeSum(Above(SUM(META), 0, RowNo()))

Agora teremos o seguinte resultado
 
Grafico01
 
Muito bom!
  

Fique Atento

Lembre-se de escolher corretamente a expressão Inter-Registro a ser utilizada, se estiver em uma tabela dinâmica, com o MêsAno pivoteado, então temos que pegar o resultado da COLUNA ANTERIOR, para isso devemos utilizar a função Before().

Abaixo disponibilizei uma aplicação com um exemplo na tabela dinâmica e como acumular somente alguns passos, por exemplo: Somente 1 mês anterior ou somente dois meses anteriores.

Para fazer download da aplicação de exemplo clique aqui!
  

Conclusão

Se o que você deseja fazer o QlikView oferece, então utilize! Sempre as funções prontas do QlikView oferecem melhor performance, mas nem tudo o QlikView nos oferece de "mão beijada", desta forma é bom estarmos preparados para essas ocasiões.

Até a próxima semana!

Labels (1)
2 Replies
Not applicable

Adorei!! Obrigada Yuri! Estou em um projeto que agora precisou contar com estas funções, foi esclarecedor.

Abs,

nicolett_yuri
Author

Obrigado Karla!