Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
É comum em QlikView (ou Sense) termos uma solicitação de implementar uma tabela (ou gráfico) contendo o acumulado do ano em uma coluna.
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.
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
Muito obrigado por compartilhar.
Thank you for sharing.
Muito bom o post Clever!
AsOf já salvou muitas vidas!
Show! Valeu.