QlikView: Peek() Gerando Saldos

By Júnior Ibagy

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).

Valores Iniciais

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

Ordena Valores

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:

Deixe uma resposta