5 de dezembro de 2011  //  2 Comentários  //  Categorias: QlikView, Tutoriais

Join Null retornando valor padrão no QlikView



Quando trabalhamos com QlikView constantemente precisamos mesclar tabelas para uma determinada extração. Neste post mostrarei como definir um valor padrão para as relações nulas de um Join entre tabelas.

Extração

Assim como você deve esta acostumado a utilizar em banco de dados relacional, o QlikView também disponibiliza comandos Joins para mesclar informações entre as tabelas. A diferença é que no BD estamos relacionando os resultados de um SELECT (os registros) e no QlikView nós relacionamos as colunas da tabela.

Para este nosso exemplo, utilizaremos o Left Join, que concatena a partir de um determinado campo, adiciona uma ou mais colunas da Tabela2 na Tabela1. Veja a seguinte estrutura:

Left Join

Vamos agora fazer um Left Join pelo campo CHAVE, levando a coluna COLUNA2 presente na Tabela2 para a Tabela1. Verificando os valores contido nas tabelas, é fácil identificar que a CHAVE='c' não possuí correspondente na Tabela2, portanto a COLUNA2 para a CHAVE='c' ficará nula.

Após carregar ambas as tabelas, fazemos nosso Left Join carregando o conteúdo da Tabela2 através do comando Resident.

Join Nulls

Vamos agora tratar nosso Left Join para atribuir um valor padrão as relações nulas entre a Tabela2 e Tabela1. Neste caso criamos uma terceira tabela que percorrerá todos os registros da Tabela1 e fara a substituição dos valores nulos pelo valor determinado, no nosso caso AAA.

Optimizando

Obviamente carregamos muitas tabelas na memória para nosso exemplo, e, está não a forma adequada de se fazer – apenas a mais didática. De forma mais eficiente – usando apenas duas tabelas – nosso script ficaria assim:

Conclusão

É relativamente simples preparar uma nuvem utilizando os recursos que o QlikView disponibiliza. Se você está começando agora, recomendo que pesquise sobre os diferentes tipos de Join que ele suporta. ^^

Até a próxima!


Tags: bi, join, qlikview

Quer copiar esse post no seu site? Você pode!

Segundo a licença da Creative Commons 3.0 (CC BY SA 3.0) você pode copiar e distribuir esse conteúdo desde que faça menção ao autor original, para isso é só copiar esse código no final do artigo quando for publicá-lo em seu site:

<p>Artigo originalmente publicado em <em>5 de dezembro de 2011</em> por <strong><a href="http://pedroelsner.com/" title="Pedro Elsner, Profissional de TI - São Paulo">Pedro Elsner</a></strong>: <a href="http://pedroelsner.com/2011/12/join-null-retornando-valor-padrao-no-qlikview/" title="Join Null retornando valor padrão no QlikView">Join Null retornando valor padrão no QlikView</a></p>
A não menção ao autor original da obra implicará em cópia e/ou distribuição ilegal de propriedade intelectual, o que é crime segundo a Lei n.º 9.610.
  • Marlon Miranda

    Olá estava tendo dificuldade em renomear valores nulos que corriqueiramente são causados por Left Join utilizando seu post consegui fácil … Muito obrigado segue solução :

    HP:
    LOAD [CI Name],
    [Ams Label],
    [Asset Tag] AS Name,
    Istatus
    FROM
    [C:UsersMarlonDesktopDados extraidosHP.qvd]
    (qvd);

    AD:
    LOAD Name,
    Disabled,
    Last,
    Domain

    FROM
    [C:UsersMarlonDesktopDados extraidosAD.qvd]
    (qvd);

    Left Join(HP)
    Load Name,
    Disabled,
    Last,
    Domain

    Resident AD;

    DROP Table AD;

    Results:
    NoConcatenate
    Load
    //HP
    [CI Name],
    [Ams Label],
    Name,
    Istatus,

    // AD
    IF(IsNull(Disabled),’Não Consta no AD’,Disabled) As Disabled,
    IF(IsNull(Last),’Não Consta no AD’,Last) As Last,
    IF(IsNull(Domain),’Não Consta no AD’,Domain) as Domain

    // Calculos
    // [Status de logon] = if(Now()- Last > 60, ‘Não loga a mais de 60 dias’,’Logou dentro de 60 dias’

    Resident HP;

    DROP Table HP;

  • Anderson Reis

    Olá Pedro, tenho uma dúvida, tenho uma tabela no banco que pode se correlacionar com dois itens em outra tabela porque sempre um dos dois sera nulo e para isso no select eu uso o left join assim “ON (LP.id_tab1=NVL(id_tab1_avista, id_tab1_aprazo))”, tem como reproduzir isto no Qlikview?