Você está na página 1de 5

Todos os Lugares Qlik Brasil Discusses

7 Respostas ltima resposta: 22/09/2014 13:16 por Luciano Vasconcelos

odair goncalves d 08/05/2014 16:56

Acumular valores via Script


Esta pergunta foi respondida.

Pessoal, boa tarde!!!

Estou com uma dificuldade na criao de um campo acumulado com valores dos ltimos 3 meses durante a carga.

Preciso ter a quantidade de uma determinada filial e produto dos ltimos 3 meses, incluindo o ms atual, ou seja valores do Ms atual + 2 meses
anteriores.

Hoje estes valores nos grficos tabelas do app eu consigo esta informaes com set analysis, como os clculos so complexos esta causando
uma lentido muito grande. Estou transformando todos os clculos durante a carga e estou apanhando um pouco nesta parte.

Pra facilitar estou anexando um QVW e o QVD.

Algum pode me ajudar.

Grato,

Odair

Recebimentos.qvw
1.1 MB

recbtotst.qvd
1.7 MB

Resposta correta
por Yuri Nicolett c d em 19/05/2014 11:39

Segue um exemplo de acumulado, via script, utilizando a funo peek

Peek:
LOAD * INLINE [
MES, VALOR, PRODUTO
1, 10, A
1, 20, A
1, 30, A
2, 10, A
2, 20, A
3, 10, A
4, 10, A
5, 10, A
6, 10, A
6, 20, A
7, 10, A
7, 20, A
8, 10, A
9, 10, A
9, 20, A
9, 30, A
10, 10, A
1, 11, B
1, 21, B
1, 31, B
2, 12, B
2, 22, B
3, 12, B
4, 12, B
5, 13, B
6, 13, B
6, 23, B
7, 13, B
7, 24, B
8, 14, B
9, 14, B
9, 24, B
9, 34, B
10, 14, B
1, 311, C
1, 321, C
1, 231, C
2, 212, C
2, 122, C
3, 112, C
4, 212, C
5, 213, C
6, 313, C
6, 323, C
7, 213, C
7, 224, C
8, 114, C
9, 114, C
9, 224, C
9, 234, C
10, 214, C
];

Acumulado:
LOAD
MES,
VALOR,
if(
MES <> Previous(MES),
NumSum(VALOR),
NumSum(Peek('ACUMULADO_POR_MES', -1)) + NumSum(VALOR)
) as ACUMULADO_POR_MES,

RangeSum(Peek('ACUMULADO_TOTAL', -1)) + RangeSum(VALOR) as ACUMULADO_TOTAL


RESIDENT Peek
ORDER BY
MES asc;

1828 Visualizaes Categorias: Scripting Rtulos: script, via, valores, acumular

Aderlan Rodrigues d16/05/2014 15:25 (em resposta a odair goncalves d)

Re: Acumular valores via Script

Ol Odair,

T meio corrido agora, mas esse exemplo da ajuda (F1) do QlikView pode lhe ser til, abrao.

peek(nomedocampo [, linha [ , nomedatabela ] ] )


Retorna o contedo do nomedocampo no registro especificado por linha na tabela interna nomedatabela. Os dados so lidos da base de dados
associada do QlikView.
O nomedocampo deve ser fornecido como string (por exemplo, um literal entre aspas).
Linha deve ser um inteiro. 0 indica o primeiro registro, 1 indica o segundo e assim por diante. Os nmeros negativos indicam a ordem a partir do
final da tabela. -1 indica o ltimo registro lido.
Se nenhuma linha for definida, -1 ser assumido.
Nomedatabela um rtulo de tabela, consulte Rtulos da Tabela, sem os dois-pontos finais. Se nenhum nomedatabela for definido, a tabela atual
ser assumida. Se usado fora do comando load ou em referncia a outra tabela, o nomedatabela deve ser includo
Exemplos:
peek( 'Vendas' )
retorna o valor de Vendas na leitura do registro anterior (equivale a previous(Vendas)).
peek( 'Vendas', 2 )
retorna o valor de Vendas a partir do terceiro registro lido na tabela interna atual.
peek( 'Vendas', -2 )
retorna o valor de Vendas a partir do segundo registro lido na tabela interna atual.
peek( 'Vendas', 0, Tab1 )
retorna o valor de Vendas a partir do primeiro registro lido na tabela de entrada Tab1.
Load A, B, numsum( B, peek( 'Bsum' ) ) as Bsum...;
cria um acumulado de B em Bsum.

Aes Curtir (0)

odair goncalves d16/05/2014 15:34 (em resposta a Aderlan Rodrigues d)

Re: Acumular valores via Script

Opa valeu amigo, eu tambm estou na correria por aqui, apanhando um pouco pra variar.. rsrsr , mais valeu pela ajuda a partir da prxima
segunda-feira vou retornar a este item.

Abraos.

Odair

Aes Curtir (0)

Carlos De Sa 19/05/2014 09:22 (em resposta a odair goncalves d)

Re: Acumular valores via Script

Bom dia.

Tambm possvel criar o acumulador na SQL, j tentou ?

Aes Curtir (0)

odair goncalves d19/05/2014 09:43 (em resposta a Carlos De Sa)

Re: Acumular valores via Script

Oi Carlos, no consigo fazer via SQL, pois antes de acumular tenho tratamentos com estas informaes que dependem de outras que
no esto na base de dados, se no fosse este detalhe com certeza seria mais fcil tratar na query.

Grato,

Odair

Aes Curtir (0)

Yuri Nicolett cd19/05/2014 11:39 (em resposta a odair goncalves d)

Resposta correta Re: Acumular valores via Script

Segue um exemplo de acumulado, via script, utilizando a funo peek

Peek:
LOAD * INLINE [
MES, VALOR, PRODUTO
1, 10, A
1, 20, A
1, 30, A
2, 10, A
2, 20, A
3, 10, A
4, 10, A
5, 10, A
6, 10, A
6, 20, A
7, 10, A
7, 20, A
8, 10, A
9, 10, A
9, 20, A
9, 30, A
10, 10, A
1, 11, B
1, 21, B
1, 31, B
2, 12, B
2, 22, B
3, 12, B
4, 12, B
5, 13, B
6, 13, B
6, 23, B
7, 13, B
7, 24, B
8, 14, B
9, 14, B
9, 24, B
9, 34, B
10, 14, B
1, 311, C
1, 321, C
1, 231, C
2, 212, C
2, 122, C
3, 112, C
4, 212, C
5, 213, C
6, 313, C
6, 323, C
7, 213, C
7, 224, C
8, 114, C
9, 114, C
9, 224, C
9, 234, C
10, 214, C
];

Acumulado:
LOAD
MES,
VALOR,
if(
MES <> Previous(MES),
NumSum(VALOR),
NumSum(Peek('ACUMULADO_POR_MES', -1)) + NumSum(VALOR)
) as ACUMULADO_POR_MES,

RangeSum(Peek('ACUMULADO_TOTAL', -1)) + RangeSum(VALOR) as ACUMULADO_TOTAL


RESIDENT Peek
ORDER BY
MES asc;
Aes Curtir (1)

Luciano Vasconcelos 22/09/2014 13:08 (em resposta a Yuri Nicolett cd)

Re: Re: Acumular valores via Script

Boa tarde.
Segue qvd com a soluo.
O nico detalhe que os valores de ms anterior esto replicados em todas as linhas.
Caso haja mais de uma linha por ms, filial e produto, no podemos somar os valores.

Recebimentos.qvw
2.6 MB

Aes Curtir (0)

Luciano Vasconcelos 22/09/2014 13:16 (em resposta a Yuri Nicolett cd)

Re: Acumular valores via Script

Odair, a resposta anterior est incompleta.


Se houver furo nas informaes no nvel filial/produto/ms no ir funcionar. Alm disso o if de quebra no est considerando
filial e produto.

Aes Curtir (0)

Sections Blogs Qlik Sites


Home Page Groups Business Discovery Qlik Support Updates Qlik.com

QlikView Forums Blogs Qlik Design Technical Bulletin Partner Portal


Qlik Sense Forum Community Manager Blog All Blogs Customer Portal

Qlik Market

Demos

Trademarks Privacy Terms of Use Copyright 19932017 QlikTech International AB, All Rights Reserved.