Tratamento de Valores Nulos (NULL)

De Qknow
Ir para: navegação, pesquisa

This document is available in English. Click on flag at side.

EnglishFlag.jpg

Introdução

Valores nulos são aqueles definidos pelo atributo NULL em um banco de dados ou NULOS dentro de um arquivo Excel. Tipicamente, arquivos textuais não são capazes de hospedar valores nulos pois sempre são interpretados (por padrão) como vazios. Vazios e nulos são tecnicamente diferentes, pois enquanto vazio (" = aspas simples juntas) é caracterizado pela inexistência do dado, nulo é compreendido como a impossibilidade de afirmar se o dado existe (NULL).

Geralmente os valores nulos quando comparados a outros valores (nulos ou não nulos) resultam em operações nulas. Ou seja, a afirmação de NULL = NULL resulta em NULL e não em Verdadeiro. O mesmo ocorre para comparações entre NULL e " (vazio). Ou seja, o resultado comparado a um nulo é sempre nulo. Estes conteúdos em campos podem ser oriundos de conexões ODBC, carga de arquivos no formato Excel ou forçados via comando LOAD INLINE. O tratamento que se deseja dar aos valores nulos pode ser definido pelo que se conhece como Three Value Logic. No QlikView os valores nulos também podem se originar na junção entre tabelas. Este artigo demonstra as diversas opções para tratamento de valores nulos.

A apresentação de valores Nulos oriundos de bases ODBC resulta em um traço na maioria dos componentes como tabelas, listas e gráficos. Em uma tabela, por exemplo, selecionar um valor nulo não permite o QlikView a selecionar os demais valores também nulos. Por isso, as técnicas apresentadas neste artigo podem auxiliar no tratamento destes valores.

Nota:  Conceitualmente NULL não é um valor. Portanto, afirmar que um campo tem um valor nulo é contraditório. No entanto,
       esta é uma prática comum.

Observe que no QlikView o tratamento de nulos é realizado pelo modelo Kleenean de 3 valores e não por boleanos de dois resultados. Ou seja, a avaliação no QlikView resulta em TRUE, FALSE ou MAYBE (pode ser), derivando três opções conforme a ilustração a seguir.

Kleenean 1.PNG

Substituindo Nulos em Conexões ODBC

Null Values 1.PNG

Uma variável de ambiente pode ser utilizada para instruir o QlikView a trocar o valor nulo oriundo de um banco de dados por um valor atribuído pelo script de carga. Ao utilizar NullDisplay um valor qualquer pode ser atribuído a nulos que venham a ser obtidos das tabelas. Considerando a carga de dados ao lado, note o comportamento do QlikView em um objeto do tipo tabela que contém valores nulos no campo Estado. Ao tentar selecionar todas as linhas onde há valores nulos, o QlikView é incapaz de percorrer o modelo em busca de um resultado inexistente (nulo).

Pare alterar este comportamento sem ter que atribuir manualmente um valor a cada campo por meio de uma condição, é possível incluir a variável de ambiente NullDisplay para atribuir um conteúdo diferente sempre que um NULL for carregado. O valor a ser atribuído pode ser numérico, textual ou mesmo vazio. Por exemplo, o texto '<vazio>' pode ser atribuído a variável, ou mesmo aspas simples juntas que delimitam o conteúdo em branco (" = aspas simples sem espaço). A variável terá efeito a partir de onde for definida no script, por isso recomenda-se incluí-la nas primeiras linhas.

SET NullDisplay='<Nulos>';

No exemplo, sempre que um valor NULL for identificado em algum campo, o conteúdo será substituído pelo texto <Nulos>. Desta maneira o texto permitirá que seleções possam ser feitas. Outros atributos válidos para a variável NullDisplay são:

SET NullDisplay="; // Configura valores nulos para vazios. 
SET NullDisplay=;  // Retorna as configurações padrão onde nulos são carregados como tal.

O tratamento de nulos é importante porque a plataforma QlikView trata estes conteúdos com os seguintes critérios:

  • NULL não podem ser selecionados. Logo, não propagam a seleção feita pelo usuário.
  • NULL não são exibidos como valores a não ser que tenham sido modificados com o procedimento acima.
  • NULL não podem ligar tabelas e por isso não participam de chaves.
  • NULL não possui um formato em banco de dados e, no QlikView, não possuem uma representação numérica ou textual.
  • Operações com NULL no QlikView geralmente resultam em valores nulos como resultado do cálculo das expressões (geralmente, mas nem sempre).

Interpretando Nulos em Arquivos de Dados

Arquivos textuais ou em formato Excel, além de cargas do tipo IN LINE, podem conter caracteres com representação indesejada que devem ser tratados como nulos. É importante lembrar que a string vazia (" aspas simples sem espaço) representam um valor real não nulo. O mesmo ocorre para o caractere branco (' ' aspas simples com um espaço) que responde por uma ocorrência não nula. Há ainda outros caracteres não nulos que são invisíveis e por vezes tratados como iguais, embora o resultado seja diferente.

  • Aspas simples conectadas sem espaço, são valores reconhecidos como vazios, não nulos.
  • Aspas simples com um espaço é um valor reconhecido como branco simples. Ou seja, Chr(32) não nulo.
  • Brancos podem ser ainda do tipo Hard Blanks. Ou seja, Chr(160) é um caractere branco não nulo.
  • Tabulações também são vistas como brancos, mas o caractere correspondente é o Chr(09), não nulo.

Para todos os brancos não nulos diferentes de Chr(32), a função Trim (que remove espaços em branco) não removerá os caracteres, pois esta função atua especificamente sobre o Chr(32), também chamado de soft blank. Valores nulos jamais estarão presentes em arquivos textuais, embora a leitura destes arquivos possa gerar resultados nulos a partir de ligações (JOINS e CONCATENATE) com tabelas que não possuem todos os valores correspondentes.

Quando os dados forem obtidos de um arquivo texto é possível que algum caractere (ou mesmo valores em branco como os mencionados acima) por algum motivo precise ser interpretado como nulo. Para isso, o QlikView possibilita substituir estes caracteres pelo nulo por meio da variável de ambiente NullInterpret.

SET NullInterpret = ;  // Interpreta campos vazios como nulos a partir de um arquivo texto.

A função NullInterpret do exemplo acima irá interpretar nulos quando o arquivo carregado for textual, mas não o fará se o arquivo for um Excel com células vazias. Para o Excel, a variável NullInterpret deve ser atribuída a string vazia (" aspas simples juntas e sem espaço), tal como na instrução abaixo.

SET NullInterpret = ";  // Aspas simples sem espaço para interpretar células vazias no Excel como nulos.

É possível instruir o processo de carga a considerar nulos valores indesejáveis em arquivos textuais ou na plataforma Excel. Por exemplo, assuma que uma coluna contenha um caractere exportado por alguma plataforma externa que prejudica ou altera o processo de carga. Informar a sequencia de caracteres na variável NullInterpret auxilia na retirada do valor durante o processo de carga, simplificando o código.

SET NullInterpret = texto;  // Interpreta qualquer registro de campo com o texto especificado como nulo.

Substituindo Nulos por Valores Específicos

É possível que em alguns casos se deseja substituir seletivamente os valores nulos de alguns campos por strings ou números que possam ser utilizados dentro do dashboard. Como visto, a instrução NullDisplay troca o conteúdo de todos os campos carregados de bases conectadas por OLEDB ou ODBC. Para substituir seletivamente os nulos por valores válidos, é possível informar ao QlikView quais serão os campos afetados. Utiliza-se então a instrução NullAsValue.

NULLASVALUE Estado;
set NullValue='Indisponível';
Null Values 2.PNG

O comando NullAsValue instrui o QlikView a realizar a substituição de valores nulos no campo Estado pelo conteúdo determinado pela variável NullValue. Neste caso, o conteúdo a ser apresentado será o texto Indisponível. Outros campos que eventualmente tenham nulos, como o Fax permanecerão com seus conteúdos originais sem modificação.

  • O comando NullAsValue pode ser utilizado em diversos pontos do script.
  • A variável NullValue pode ser redefinida duranta a execução do script.
  • Para aplicar a condição a todos os campos, pode-se utilizar o asterisco (*) no comando NullAsValue.
  • Na figura ao lado apenas o campo Estado foi alterado, enquanto o campo Fax permaneceu com valores nulos.
  • Valores nulos podem ser resultados de expressões como o IF(condição, verdadeiro) sem o resultado falso.
  • Se o condicional de um IF for nulo, a parte false da função será executada.

Outras possibilidades de tratamento e resultados nulos envolvem as seguintes instruções:

  • NULL()
  • IsNULL()
  • IF(condição, verdadeiro) // Se a condição for falsa, o resultado será nulo.
  • JOIN // Quando o produto da junção não encontra todos os registros na tabela ligada.
  • CONCATENATE // Quando o resultado da concatenação não encontra todos os registros de ligação.


Envelope01.jpg
Procurando Algo? Fale Conosco!

Voltar | Página Principal