Nova Gripe, quem gosta do terrorismo?

agosto 9, 2009 by

Eu pessoalmente não gosto de filmes de terror, até gosto de alguns gêneros de suspense, mas em geral prefiro não assistir esse tipo de filme, no entanto gosto de dramas. E deve haver um padrão, uns adoram terror, outros preferem suspense, no fim a grande maioria das pessoas se sente excitada pelo perigo, pelo caos e até mesmo de sentir medo.

Pra mim isso explica porque tanta gente passa os dias procurando as mais terríveis noticias sobre essa nova gripe e enviando pra todo mundo que conhece e não conhece. 99% das informações recebidas por e-mail não são de fonte oficial, a última que recebi foi a cópia de um diálogo por MSN, um dos interlocutores da conversa que passava as terríveis informações não era um Dráuzio Varela, muito menos um especialista renomado em pandemias, no entanto passou a ter tanta credibilidade quanto qualquer outro, só eu recebi 3 e-mails com cópias desse diálogo.

O interessante, é que no meio de uma situação que realmente é grave, e deve ser tratada com seriedade, a grande maioria das pessoas se preocupa mais em tentar assustar as pessoas, ou se “auto-assustar”, do que em procurar então as boas noticias algo que evite o pânico. Preferem frases do tipo, “morrem 128, mas só divulgaram 32”, “estão escondendo a verdade de vocês”.

Essa última é genial, somos brasileiros gente, o que mais se faz nesse país é esconder a verdade, nosso sistema político esta ai para provar isso.

Falando aqui de Curitiba, dizem que na segunda-feira (10-ago-09) será decretado estado de calamidade pública, as informações vindas por email dizem que já são 115 mortes, entre elas seriam 12 médicos, mas oficialmente, ainda são 28 casos.

Minha opinião pode até que seja um pouco mais de 28 mortes, até porque entre as mortes computadas seis foram descartadas como sendo gripe A, então realmente é coerente esperar um pouco para divulgar certas informações. Mas 115 mortes?! No mundo todo confirmaram 561 mortes, 115 mortes só em Curitiba é obviamente um exagero.

Aqui esta um link que mostra o mapeamento dos “casos” da Gripe A no mundo diariamente, casos gente, não mortes.

Analisando os números dos casos, versus as mortes podemos ver que apenas certa de 4% dos casos terminaram em mortes, não tenho números relacionados a casos de gripe normal e mortes relacionadas a elas, mas não devem ser muito distantes. O caso é que as complicações dessa nova gripe se mostram mais graves, e em organismos debilitados pode e tem sido fatal.

Sendo assim, penso que o cuidado deve existir sim, no entanto, não há motivo para esse pânico que estão tentando pregar, que em minha opinião beira a palhaçada, gente querendo mais se aparecer do realmente preocupado com a coletividade.

Então vamos tomar os cuidados “oficiais”, mandar e-mails sem fundamento não vai acabar com o vírus.

Casa Nova

novembro 12, 2008 by

Resolvi mudar o blog para um dominio próprio onde tenhamos mais liberadade para disponibilizar exemplo e o que mais for necessário para que possamos contribuir com a comunidade QlikView, e aprendermos cada dia mais.

Então apartir de agora acesse o novo endereço, todos os posts já foram transferidos para la, e os novos serão feitos sempre la.

Irei excluir os post sobre QlikView daqui, e deixar esse site para assuntos aleatórios que foi minha intenção inicial, por isso um nome tão nada a ver com QlikView.

Aguardo vocês na nova casa!

QlikView: Analisando uma lista de valores

novembro 4, 2008 by

No SQL temos um recurso bastante interessante para analisar uma lista de valores, o “IN”, logo que comecei a utilizar o QlikView senti falta de um recurso semelhante no QlikView, uma breve pesquisada no help do QlikView e logo encontrei um conjunto de funções que não só oferecem um recurso equivalente ao IN como estendem as funcionalidades de tal recurso.

A primeira função é a match(), esta é a mais próxima do IN em SQL, ela avalia o primeiro parâmetro que pode ser um campo ou uma variável, e retorna o índice das expressões listadas começando de 1 até N, caso o valor não seja encontrado nas expressões listadas o valor retornado será 0. É importante perceber que esta função é sensível a maiúsculas.

match( [Código Alternativo],A333,B555,C888)

No exemplo acima caso o código alternativo seja B555 o valor retornado pela função será 2, caso o valor para o código alternativo seja X100 ou c888 será retornado 0.

A função mixmatch se diferencia da função match unicamente por não ser sensível a maiúsculas.

mixmatch( [Código Alternativo],A333,B555,C888)

Analisando o exemplo acima onde o código alternativo seja a333 o valor retornado será 1.

A última função do conjunto é bastante interessante, oferece os mesmos recursos da mixmatch, pois também não é sensível a maiúsculas, e como recurso adicional permite a utilização de máscaras, inclusive em um campo “blob”, trabalhei muito tempo com banco de dados, e vez ou outra surgia à necessidade de pesquisar alguma coisa em um campo blob, e na maioria dos bancos de dados, não é possível utilizar um campo blob na clausula where. Uma breve pesquisada no Google a respeito de “pesquisas em campo blob” e muitas referências ao assunto serão retornadas.

Felizmente no QlikView podemos utilizar a função wildmatch(), que serve não só para campos com textos mais extensos como também para os demais campos, inclusive numéricos.

wildmatch([Observação],’NF0012*’,'PED55??1′)

No exemplo acima serão retornados registros cujo campo [Observação] contenha valores como:

“Requisição para a NF00128″

“Pedido PED55ty1 enviado ao setor de vendas”

Sendo assim podemos usá-la em clausulas where, funções condicionas como IF, e também para atribuir um valor a uma variável se for o caso, em conjunto com outras funções como a peek() por exemplo.

O uso desse conjunto de funções possibilita maior clareza no script, facilitando a manutenção e a compreensão das condições, então, bom proveito a todos.

QlikView: Primeiros Passos – Carga dos Dados

outubro 1, 2008 by

Neste artigo irei falar a respeito de um passo bem básico do QlikView, a carga de dados, acredito que será bem útil para que esta iniciando com a ferramenta, sem saber bem por onde começar.

Com o QlikView podemos carregar facilmente dados de qualquer banco de dados que possua um driver ODBC, arquivos texto, documentos do Excel entre outros, independente da fonte dos dados, a forma de carga não varia muito.

Vamos começar com a fonte mais comum de dados, que é através de uma conexão ODBC com algum banco de dados, não vou entrar nos detalhes a respeito da configuração do driver ODBC tendo em vista que variam bastante de banco para banco, e também que geralmente a configuração da fonte ODBC fica a cargo da equipe técnica do cliente do cliente onde o projeto será desenvolvido, já que ele tem os dados de configuração, não cabe a um consultor QlikView esta obrigação.

Caso você não tenha nenhum banco de dados instalado em seu computar e conseqüentemente nenhuma conexão ODBC, poderá simular o exemplo que darei utilizando uma planilha do Excel, exemplo este que também mostrarei neste artigo.

O exemplo que irei mostrar será realizado com base em um banco de dados Firebird que possuo, trata-se de um sistema escolar, de onde carregarei algumas tabelas para demonstrar, como realizar a carga de uma fonte ODBC e também o vínculo entre as tabelas.

Figura 1 - Editar Script

Figura 1 - Editar Script

Primeiro na barra de ferramentas do QlikView procure pelo ícone em destaque na Figura.1, ou CTRL+E para ativar a janela de script. Feito isso na parte inferior da tela que surge procure pelo botão “Conectar” em destaque na Figura.2 . Agora serão listadas todas as conexões ODBC configuradas em seu computador, caso haja (Figura.3).

Figura 2 - Botão Conectar

Figura 2 - Botão Conectar

Figura 3 - Lista de Conexões ODBC

Figura 3 - Lista de Conexões ODBC

Irei selecionar a opção Sappia, que é a conexão ODBC para meu banco de dados Firebird, automaticamente o QlikView irá gerar uma string de conexão:

ODBC CONNECT TO Sappia (XUserId is xpto, XPassword is xpto);

A partir desse momento passamos a ter acesso às tabelas desse banco de dados, e poderemos trazer para o QlikView estas informações para que possamos começar a trabalhar com elas. Através do botão “Selecionar” em destaque na Figura.4.

Figura 4 - Selecionar Tabelas

Figura 4 - Selecionar Tabelas

Agora é exibida uma tela (wizard) para nos auxiliar na preparação do script de carga das tabelas do banco de dados (Figura.5). Basta selecionar uma das tabelas do banco de dados e clicar no botão OK que automaticamente será criado o script de carga para a tabela selecionada.

Observe que na Figura.5 o checkbox Carga Anterior marcando este checkbox antes da instrução de select será adicionado um LOAD com a lista dos campos da tabela, isso é bastante útil para iniciarmos a customização dos nomes dos campos, inclusive eliminando campos desnecessários ao negócio, campos que sejam só de controle interno do sistema, e não serão utilizados para nenhuma análise poderão ser suprimidos ao excluirmos estes do LOAD.

Figura 5 - Wizard para criação do Select

Figura 5 - Wizard para criação do Select

Claro que isso também poderia ser feito no próprio select, no entanto o QlikView não gera automaticamente select com o nome dos campos e teríamos que colocar todos na mão, logo é mais rápido e prático excluir os que não queremos do que adicionar todos os que precisamos.

Então se você selecionou a sua tabela e clicou em OK suponho que terá um script parecido com o que demonstro abaixo (Figura.6), no meu caso acima do comando LOAD adicionei o nome da tabela “[Alunos]:”, também utilizei o “as” para dar um “apelido” mais amigável aos campos, e apliquei algumas funções de data ao campo [Data de Nascimento do Aluno] para extrair algumas informações que serão bastante úteis no momento de aplicar filtros.

Figura 6 - Script de carga da tabela aluno

Figura 6 - Script de carga da tabela aluno

Agora seguindo o mesmo procedimento utilizado para gerar o script de carga para a tabela aluno, iremos carregar a tabela “Raça”, que possui uma relação com a tabela “Alunos”, onde cada aluno pode ter pelo menos uma raça vinculada a ele, este script ser algo como apresentado na Figura.7.

Figura 7 - Script de carga da tabela Raça

Figura 7 - Script de carga da tabela Raça

Feito isso podemos realizar uma carga dos dados, clicando no botão recarregar . Após o processo de carga teremos algo como mostrado na Figura.8.

Não vou entrar em detalhes de criação de objetos aqui, mas nesse momento os campos mostrados nas tabelas da Figura.8 estão todos disponíveis para a criação da objetos, sejam eles tabelas, gráficos, etc. Tanto como agrupadores quanto em expressões.

Figura 8 - Tabelas carregadas

Figura 8 - Tabelas carregadas

A Figura.8 mostra também uma relação entre as duas tabelas, Alunos e Raça, isso se deve ao fato de em ambas as tabelas existirem dois campos de nome [Código da Raça], o QlikView associa os dois campos criando uma relação, sendo assim, selecionando um aluno na tabela [Alunos], nós saberemos qual a raça dele, assim como selecionando um raça na tabela [Raça], saberemos quais alunos pertencem aquela raça.

Um das coisas que mais impressionam no QlikView é essa facilidade de relacionar dados, para quem conhece banco de dados, sabe que para criarmos uma relação entre tabelas é necessário um trabalho bem mais árduo, e se torna mais complexo ainda quando existe a necessidade de mudar o relacionamento, no QlikView mudamos os nomes dos campos no script (utilizando “as” se for o caso) recarregamos os dados e pronto.

Agora vamos demonstrar como carregar dados de uma planilha do Excel, também relacionaremos os dados desta planilha aos dados carregados do banco de dados.

A primeira coisa a fazer é criar uma planilha no Excel (Figura.9), nesta planilha relacionei as raças carregadas do banco de dados, e acrescentei uma coluna para definir as cotas para cada raça, agora iremos carregar esta planilha, e vincular a descrição da raça na planilha, com a da nossa tabela [Raça] que foi extraída do banco de dados. Logo teremos como saber a cota de cada aluno, alunos que tem direito a certa cota, entre outras análises.

Figura 9 - Dados do Excel

Figura 9 - Dados do Excel

Criada a planilha, voltamos ao editor de script (Figura.1), na parte inferior desta tela encontraremos o botão “Arquivos de Tabela”. Ao clicar nele surgirá uma tela onde deveremos indicar a localização da nossa planilha. Devemos observar que o QlikView permite carregar além de arquivos do Excel, outros como txt, HTML, XML, entre outros.

Localizado o arquivo da nossa planilha teremos a tela apresentada na Figura.10, não vou entrar em detalhes sobre essa tela, mas aqui podemos definir o nome da cada coluna, se o nome das colunas (rótulos) estão implícitos ou não, entre outros diversos recursos como transformação dos dados, os quais não são foco deste artigo, mas estão bem detalhados nas documentações do QlikView.

Figura 10 - Manipulação de arquivos

Figura 10 - Manipulação de arquivos

No nosso caso vamos clicar no botão “Finish” simplesmente, isso irá gerar um script como o demonstrado na Figura.11.

Figura 11 - Script de carga da planilha

Figura 11 - Script de carga da planilha

Agora vamos recarregar os dados novamente, e após o término do processo teremos a seguinte relação de tabelas (Figura.12), aqui o simples fato das duas tabelas terem o campo Raça, faz com seja criada uma relação entre elas. A Figura.13 demonstra a relação raça x cota.

Figura 12 - Mapa das Tabelas

Figura 12 - Tabelas carregadas

O QlikView é muito poderoso e dinâmico, quando se trata de relacionar dados impressiona ainda mais, isso quer dizer que uma empresa que possua mais de um ERP ou vários sistemas trabalhando, além de sistemas legados, podemos relacionar os dados desses diversos sistemas com facilidade, na pior das hipóteses com o auxilio de uma tabela “De Para”,realizar cruzamentos de dados entre outras análises, enfim, o céu é o limite.

Figura 13 - Filtro aplicado a lista

Figura 13 - Filtro aplicado a lista

O objetivo deste artigo foi introduzir a respeito de um primeiro passo para que esta iniciando, espero que eu tenha atingido o objetivo de fornecer uma porta de entrada para o QlikView, e que novos horizontes se abram a partir de agora.

QlikView: Registro da tabela em um variável

setembro 16, 2008 by

Questionaram-me dia desses como carregar um valor vindo de um “select”, que retornaria sempre um único valor para uma variável.
Bom, não há como retornar o valor de um select diretamente para uma variável.

Até mesmo porque por mais que o seu select deva retornar sempre um único valor do BD na prática não há nada que garanta isso, basta um valor lançado errado em sua base de dados ou mesmo um erro de estrutura da tabela e esse select poderia retornar mais de um valor, e nesse caso o que o QlikView faria? Ficaria com o último valor? Ficaria com o primeiro? Depende? Já da pra ver que daria confusão.

No entanto, se você precisa de um valor vindo de um select em uma variável então mais uma vez a função Peek() pode ajudar.

Primeiro o select deverá gerar uma tabela, depois com a função Peek(), nós pegamos o valor carregado na tabela, poderíamos inclusive adicionar verificação para garantir se o valor na tabela (vindo do select) esta mesmo correto, e só depois adicioná-lo a variável.

De forma geral, sempre que precisar acessar o valor de uma tabela pode usar a função Peek(), através dela nós podemos pegar qualquer valor dentro de uma tabela de maneira bem simples.

Imagine o seguinte código:


[Escola]:
LOAD * INLINE [
Código, Escola
1, ESCOLA MATEUS DE LIMA
2, ESCOLA JEAN PIAGET
3, ESCOLA SETE DE SETEMBRO
];

O exemplo que dei, tratava-se de uma tabela que em teoria seria gerada sempre com um único valor, no entanto esse exemplo teremos 3 valores, o que nos permitirá explorar melhor alguns parâmetros da função Peek() (como se já não tivéssemos feitos bastante isso nos últimos posts).

Registros da Tabela

Registros da Tabela

A função Peek() pode receber até 3 parâmetros, sendo que somente o primeiro é obrigatório. O primeiro parâmetro deverá ser sempre o nome do campo de onde queremos extrair o valor, o segundo parâmetro informa a linha da tabela de onde “pegaremos” o valor, onde 0 (zero) indica a primeira linha, e assim consecutivamente. Informando valores negativos para este parâmetro a ordem é inversa, ou seja, começamos então do último registro da tabela, onde, -1 indica o último registro da tabela, caso nenhum valor seja informado como padrão será assumido como valor -1. E o último parâmetro é o nome da tabela, que só tem utilidade caso o campo pesquisado seja um campo chave.

Logo, se pegarmos a tabela acima como exemplo, teremos:

let vNomeDaEscola = peek('Escola',0);
retorna ESCOLA MATEUS DE LIMA
let vNomeDaEscola = peek('Escola',-1);
retorna ESCOLA SETE DE SETEMBRO
let vNomeDaEscola = peek('Escola');
retorna ESCOLA SETE DE SETEMBRO

Mais uma vez a função Peek() mostra seu poder nos scripts, espero que tenha sido útil a todos, até a próxima.

QlikView: Gerando arquivo de licença – LEF

setembro 15, 2008 by

A QlikTech disponibilizou um serviço para geração do LEF. Como postado em artigo anterior, não é comum que devido a firewall e proxys o QlikView não consiga se comunicar com o servidor de licenças da QlikTech, e consequentemente não consiga gerar automaticamente o LEF.

Gerar LEF

Gerar LEF

Através do novo serviço basta acessar a pagina de suporte da QlikTech, informado os dados solicitados que o LEF é gerado na hora, se a necessidade de aguardar resposta do suporte. Lembrando que é necessário estar logado no QlikCommunity para poder acessar a página.

Confesso que não sei desde quando esse serviço esta no ar, no entanto é um serviço muito bem vindo.

QlikView: Peek() Gerando Saldos

agosto 21, 2008 by

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

QlikView: Funções de Script – Peek()

agosto 18, 2008 by

Neste artigo vamos falar sobre uma função de script. Nem sempre podemos ou é adequado resolver os problemas do negócio diretamente nos objetos. Isso porque em muitos casos irá causar perca de desempenho, além do que, regra de negócio deve ser centralizada para permitir o máximo de reutilização, sendo assim o melhor caminho é manter a resolução de problemas relacionados à regra de negócios no script.

Para falar a respeito da função Peek() vou relatar uma situação ocorrida em um projeto em que participei.

Tratava-se de um sistema de controle de estoque onde o saldo do estoque era atualizado somente na data em que havia algum movimento (figura.1), se em uma data não houvesse movimento nada seria gravado saldo na tabela, no entanto, se e o saldo fosse consultado na data em que não houve movimentação deveria constar ali o saldo do último movimento.

figura.1

figura.1

Como eu disse em artigo anterior, o QlikView oferece muitas funções para resolver os mais variados tipos de problemas, o caso é saber qual a função adequada, e neste caso como utilizá-la. Como era um dos primeiros projetos que eu participava, e também o meu companheiro de projeto não tinha muita experiência, tivemos uma grande dor de cabeça para resolver essa situação.

Primeiros sabíamos que a função adequada ao caso era a função Peek(), o caso é que não estava funcionando da maneira como gostaríamos, e ai entrou o detalhe, não basta apenas saber qual recurso utilizar, e sim como utilizá-lo.

A função Peek() retorna o valor do nome do campo informado como primeiro parâmetro a função, este é o único parâmetro obrigatório. Como segundo parâmetro poderá ser informado o número da linha da qual se deseja obter um valor de um dado campo, onde -1 indica “último valor lido” e será assumido quando nenhum valor for informado, por último podemos também informar uma tabela onde a função deverá buscar o valor, se nenhum valor for informado a função irá considerar a tabela atual.

Na primeira situação (listagem.1), a função Peek() encontrará o valor imediatamente anterior do campo Quant, no entanto quando houver uma seqüência maior que duas linhas sem valor a segunda linha após o último valor não retornará valor algum (figura.2), isso porque a função esta lendo a estrutura demonstrada na figura.1. Na data 02/07/2008 consta a quantidade 88, quando a função esta na linha da data 03/07/2008 a função busca o valor anterior (02/07/2008), o mesmo não ocorre quando chegamos à linha da data 04/07/2008, isso porque a função irá ler o valor do campo Quant na data 03/07/2008 e como podemos observar na figura.1 nesta data não há valor algum. Além disso, para que funcione dessa forma é obrigatório que o campo buscado pela função Peek() esteja presente no Load, como podemos observar na listagem.1 apenas o campo Quant consta na lista, isso faz com que o valor anterior para o campo Val não seja retornado nunca, nem na linha imediatamente abaixo a linha com valor, esta situação também pode ser observada na figura.2.

listagem.1

listagem.1

 

 

figura.2

figura.2

O fato é que só fui compreender esse comportamento da função Peek() depois que conseguimos resolver o problema, e conseguimos com a ajuda do fórum da QlikTech (link do post). Então a solução é garantir que haja sempre um valor na linha anterior para que a função Peek() possa ler, e isso indica que o campo “físico” não é a solução, e sim o campo criado a partir do resultado da expressão, ele sim terá sempre o valor lido anteriormente, então vamos focar nele.

Com uma simples alteração no código (listagem.2) conseguimos obter a solução para o nosso problema, e o resultado pode ser observado na figura.3.

listagem.2

listagem.2


figura.3

figura.3

Agora a função Peek() irá pegar sempre o valor do campo Quantidade, e não mais do campo físico Quant, dessa forma teremos sempre acesso a um valor, ao menos é claro que a primeira data não tenha valor algum.

Nesse exemplo estou utilizando sempre um único produto, no caso de haver mais de um (e essa é a situação no mundo real) será necessário adicionar mais um cláusula a função if.

if(CodProduto = Peek(Produto) and IsNull(Quant),
Peek(Quantidade),Quant) AS Quantidade

Isso fará com que o saldo de um produto não seja lido para outro. No entanto é muito importante em situações como esta não esquecer de definir a cláusula Order By, pois se ela não estiver correta o resultado poderá não sair como esperado.

Como podemos ver, resolver essa situação diretamento no script nos traz irá facilitar e muito a construção dos objetos, além de permitir a reutilização desta tabela em outras partes do script para agilizar e facilitar o nosso trabalho.

Agradecimentos: Rogério Backes pela sugestão do artigo, e por me fornecer o material para este artigo, pois não me lembrava mais qual era exatamente a situação. E também ao Júnior Ibagy que buscou junto ao forum da QlikTech a solução do problema.

QlikView: Aplicando a Licença

agosto 14, 2008 by

Tem se mostrado comum existir problemas ao aplicar a licença do QlikView. Por isso resolvi fazer esse breve post explicando o que é o LEF, problemas que podem ocorrer e quais procedimentos tomar.

Após aplicar o número da licença e o número de controle o QlikView irá acessar o servidor da QlikTech para fazer o download do LEF (Licence Enabler File). Trata-se de um arquivo texto contendo informações relativas à licença instalada e que é necessária para a ativação da licença.

Em circunstâncias normais esse procedimento nem chega a ser percebido. No entanto em casos onde existem um Proxy ou Firewall que impeça a transferência de arquivos, ou até mesmo em um computador que não tenha acesso a internet, o QlikView não conseguirá realizar o download do LEF, e quando isso ocorrer será exibida uma tela informando Falha na Licença.

No caso do Proxy será necessário configurar o Proxy através das Opções de Internet, senha caso houver.

O Firewall além de permitir a transferência de arquivos deverá também permitir acesso as seguintes URLs:

http://www.qliktech.com/LEFURL
http://www.qliktech.com/LEFUpdate

Mas se nada disso for possível a solução é enviar um email ao suporte da QlikTech solicitando que lhe envie o LEF, para isso basta informar seu número de licença.

Caso ainda exista alguma dúvida, este vídeo da QlikTech explica o procedimento de aplicação do LEF.

Os Transformers existem de verdade?

agosto 12, 2008 by

Bom, foi o que meu filho me perguntou na ocasião do lançamento do filme Transformers, se eles existiam mesmo. Disse que não, que eram feitos por computador. No entanto se ele ver que os chineses criaram um transforme de verdade, eu vou ter problema pra me explicar.

E o pior é que esse Transformer foi lançado a quase um ano! @lberto!

Transformes X2 baseado no Citroen C2

Transformes X2 baseado no Citroen C2

Três amigos chineses de Nanjing construiram em 3 meses o Transformes X2 de 4,5 metros de altura baseado no Citoen C2.

Transformer X2

Transformer X2

A habilidade dos chineses para construir coisas se mostra impressionante, dia desses vi um vídeo que diziam tratar-se de um elicóptore “caseiro” construido por um chinês, tinha também o vídeo de um suposto avião “caseiro”, e vi na TV um que construiu um submarino.

Fico na dúvida se o que eles mais tem é criatividade ou coragem!

Fonte: techchee.com


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.