É comum em QlikView (ou Sense) termos uma solicitação de implementar uma tabela (ou gráfico) contendo o acumulado do ano em uma coluna.

Capturar2.pngCapturar.png

Existem várias técnicas para fazer isso, algumas utilizam fórmulas relativamente complexas, valendo-se de funções tais como "RangeSum", "Above", "RowNo", etc. Mesmo assim, sofrem do efeito colateral de que se o usuário fizer um filtro, pode ser que o valor seja comprometido.

Vou ensinar aqui a técnica conhecida como "AsOf", que consiste em gerar um calendário, com "flags" apropriados que irão simplicificar sua análise.

Um exemplo,

Vendas:

LOAD

Date(Today() - RecNo()) as Data,

RecNo() & IterNo() as NumeroNF,

num(round(Rand() * 1000,0.01),'R$ #.##0,00;-R$ #.##0,00') as ValorVenda

AutoGenerate 400 While IterNo() < 5;

Calendario: // Tabela temporaria com todas as datas

LOAD FieldValue('Data',RecNo()) as Data

AUTOGENERATE FieldValueCount('Data');

CalendarioAsOf: // Periodo Atual

LOAD Distinct Data as Data ,

Data as AsOfData ,

'Atual' as AsOfTipo

RESIDENT Calendario;

tmp: LOAD Min(Data) as min Resident Calendario; // Limitador Registros

LET LimiteInferior = num(Peek('min'));

Drop Table tmp;

Concatenate(CalendarioAsOf) // Acumulado Geral

LOAD Distinct num(Data - IterNo() +1) as Data ,

Data as AsOfData ,

'Acumulado Geral' as AsOfTipo

RESIDENT Calendario WHILE num(Data - IterNo() +1) >= $(LimiteInferior);

Com esse código, teremos uma tabela "CalendarioAsOf" que irá conter todas as datas que logicamente compõe o "Acumulado até agora", ou seja todas as datas até aquela data em específico.

Capturar1-300x143.png

Construindo-se uma tabela como essa simplifica enormemente a construção de tabelas acumuladas, onde podemos incluir nessa tabela “CalendarioAsOf” todos as condições que precisarmos: YTD, MTD, LYTD, etc

Baixe aqui uma aplicação para avaliar: qvw

 

Link