Olá meus amigos! Olhando para o artigo anterior que demonstra a funcionalidade da função Peek() para uma determinada situação, onde gostaria de pegar o valor do registro anterior a partir do momento que o valor atual estaria em branco. Fiquei pensando em uma outra situação, e se eu quisesse fazer uma lista de saldos por produtos? Como faria isso de uma maneira simples, já que tudo no QlikView é simples!
Após algumas cabeçadas, pesquisas, testes cheguei à conclusão que é possível fazer de uma maneira muito simples e interessante. Seria uma mescla da conhecida função Peek() (irá pegar o valor anterior do registro) com outra função RangeSum().
A função RangeSum() retorna a soma de um intervalo de 1 a N argumentos. Ao contrário do operador + (soma), RangeSum() tratará todos os valores não-numéricos como 0. Exemplificando :
RangeSum (1,2,4) retorna 7
RangeSum(1,’xyz‘) retorna 1
RangeSum(null()) retorna 0
O exemplo que mostrarei para vocês é uma tabela simples onde tenho dois clientes, dois produtos e valor para o produto correspondente e também retorno a data de consumo/venda. A tabela abaixo demonstra os dados por consumidos por data, cliente, produto e seu valor (figura.1).

figura.1
Bom, não basta ter apenas os dados em mãos e jogar nas funções! Primeiro, tem que pensar na estrutura e como o QlikView irá pegar, tratar ou analisar esses dados, se começa a “ler” a tabela de baixo para cima, de cima para baixo e aí por diante e entender as funções usadas, como foi explicado no artigo anterior, a função Peek() irá pegar o registro anterior e assim por diante, logo veio a primeira idéia, tenho que organizar minha tabela de forma que quero primeiro saber. Primeiro os Clientes, depois os Produtos e por último a Data de consumo/vendas desse produto. Como fiz isso? “Order By”, algo simples e funcional. Pronto, criei uma nova tabela, agora ordenada da forma que eu quis. Figura 2

figura.2
O próximo passo é criar o campo saldo, com alguns tratamentos e algumas regras que foi determinada anteriormente, minha linha de expressão é essa abaixo, complicada no primeiro visual, mas após analisá-la iremos ver que nada mais passa de pura lógica! Repetindo.. Nós que complicamos o fácil!
rangesum(if ( CLIENTE = PEEK(CLIENTE) AND PRODUTO = PEEK(PRODUTO),
rangesum( VALOR , peek (SALDO) , VALOR)) as SALDO
Analisando a seguinte expressão “CLIENTE = PEEK(CLIENTE) AND PRODUTO = PEEK(PRODUTO)“, iremos apenas pegar os valores correspondentes ao que me interessa no momento, se cliente atual é o mesmo do cliente anterior e produto anterior igual ao produto atual, feito essa comparação e se a mesma for verdadeira, ele irá fazer o somatório dos dois valores comparados, usando a expressão rangesum(VALOR peek(SALDO)). Agora tentando responder uma pergunta que com certeza veio a sua mente, mas de onde esse cara está pegando o valor SALDO? Simples, lembrando que na primeira comparação, a expressão irá comparar o primeira linha com a anterior, mas como é a primeira linha, não existe a anterior ou a anterior não é igual, logo ele irá pegar o valor da primeira linha e jogar como saldo… Lembra do Senão do IF, é isso que está acontecendo na primeira vez que for ler a primeira linha. Outro detalhe, quando falei em primeira linha, não é só a primeira linha da tabela e sim a primeira linha onde Cliente é diferente do seu antecessor e produto diferente do seu antecessor também. E para finalizar esse confuso processo, após fazer suas comparações, ele irá fazer um somatório retornando o Saldo. Realmente é muito mais fácil quando se tem a idéia na cabeça, analisando a expressão e sabendo o que realmente faz cada função é muito mais fácil que ler um texto gigante como este. Segue a dica, tente saber o funcionamento de cada função e os valores que podem retornar cada função, isso facilitará muitoooooooo.. Na figura 3 o script feito.

figura.3
Pronto, passado essa expressão turbulenta, temos os valores finais, com seus respectivos saldos, conforme mostra a Figura 4 e mais um desafio realizado.

Figura.4
PessoALL, obrigado pela oportunidade e logo estarei com mais novidades! Fábio, obrigado pelo espaço cedido.
Júnior Ibagy
Tags: QlikView