11 de setembro de 2012  //  9 Comentários  //  Categorias: QlikView, Tutoriais

Entendendo Join, Keep e Concatenate no QlikView



Faz um bom tempo que eu querida fazer este post, mas como há ótimos materiais em inglês sobre o assunto, sempre optava por algo inédito.

Introdução

Preparar uma nuvem para QlikView sem utilizar as funções Join, Keep e Concatenate é uma tarefa impossível para base de dados complexas. Utilizamos estas funções para formatar e moldar a nuvem, afim de que ela fique padronizada e bem estruturada. Porém, para isso precisamos entender muito bem a diferença entre elas.

Neste post iremos utilizar duas tabelas de exemplo. Note que ambas serão “lincadas” pelo campo Chave, que a Tabela1 possuí a Chave=3 que não esta presente na Tabela2 e que a Tabela2 possuí a Chave=4 que não esta presente na Tabela1:

Tabela 1

Chave A
1 A1
2 A2
3 A3

Tabela 1

Chave C
1 C1
2 C2
4 C3

Join

Vamos utilizar o comando Join para transferir campos específicos da Tabela2 para Tabela1. O primeiro campo deve ser sempre o que irá relacionar as duas tabelas.

Outer Join

  • Outer irá retornar as linhas que coincidirem/não coincidirem com a outra tabela.

Tabela 1

Chave A C
1 A1 C1
2 A2 C2
3 A3
4 C3

Left Join

  • Left irá retornar as linhas da tabela da esquerda e os campos da tabela da direita.

Tabela 1

Chave A C
1 A1 C1
2 A2 C2
3 A3

Right Join

  • Right irá retornar as linhas da tabela da direita e os campos da tabela da esquerda.

Tabela 1

Chave A C
1 A1 C1
2 A2 C2
4 C3

Inner Join

  • Inner irá retornar SOMENTE as linhas que coincidirem em AMBAS as tabelas.

Tabela 1

Chave A C
1 A1 C1
2 A2 C2

Keep

O comando Keep entre dois Load ou Select, diferente do Join, tem o efeito de reduzir os dados de uma ou de outra baseado na intersecção dos dados da tabela. O Keep deve ser precedido de um prefixo Left, right ou Inner.

Todavia, as duas tabelas não serão agrupadas, mas serão salvas no QlikView como duas tabelas diferentes.

Left Keep

Tabela 1 Keep

Chave A
1 A1
2 A2
3 A3

Tabela 2 Keep

Chave C
1 C1
2 C2

Right Keep

Tabela 1 Keep

Chave A
1 A1
2 A2

Tabela 2 Keep

Chave C
1 C1
2 C2
4 C3

Inner Keep

Tabela 1 Keep

Chave A
1 A1
2 A2

Tabela 2 Keep

Chave C
1 C1
2 C2

Concatenate

Agora veremos o comando Concatenate. Este comando apenas adiciona as linhas de uma tabela da outra, ou seja, ele nunca unirá qualquer linha. Veja um exemplo dos dados após o Concatenate:

Tabela 1 Concatenate

Chave A C
1 A1
1 C1
2 A2
2 C2
3 A3
4 C3

Dúvidas?

Espero ter ajudado. ^^
Qualquer dúvida é só comentar. =)
Até!

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>11 de setembro de 2012</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/2012/09/entendendo-join-keep-e-concatenate-do-qlikview/" title="Entendendo Join, Keep e Concatenate no QlikView">Entendendo Join, Keep e Concatenate 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.
  • Marcus Augusto

    Otimo post

  • Ruytter

    Como faço um join de três tabelas? Da primeira com a segunda é ok, mas e da resultante 1 e 2 com a 3?

  • Faz ele novamente com o resultado da 1 e da 2 =P

  • Leandro Melo

    Preciso fazer uma operação de uma coluna que está em excel com outra coluna que está em fonte de dados diferente (Oracle). Pensei neste comando mas retornou erro: (Tem alguma sugestão)

    LOAD

    SLD_RE_VALOR / (Select recliq.SLD_RE_VALOR from qlikv.qlv_vw_con_receitaliquida_ac recliq where recliq.ORG_IN_CODIGO = 27) AS META_INDICADOR,

    SLD_RE_ACUM / (Select recliq.SLD_RE_ACUM from qlikv.qlv_vw_con_receitaliquida_ac recliq where recliq.ORG_IN_CODIGO = 27) AS META_INDICADOR_AC

    FROM
    C:Projetos_QlikViewDadosIndicadores_Testeteste.xlsx (ooxml, embedded labels, table is Plan1)
    where INDICADOR = ‘Meu Teste’;

  • Wasley Santos

    Pedro, consegue me da um exemplo, imaginei que seria assim mas não consegui fazer.

  • Breno

    Bacana o post, Parabéns!

  • That insight solves the prlmeob. Thanks!

  • Adailton

    Olá!
    Estou realizando alguns testes e precisei utilizar subselect mas retorna um erro e não consegui avançar, veja o exemplo abaixo, eu preciso de um somatorio (VORIG) de uma segunda (SN3010) tabela.

    load N1_CBASE,
    N1_DESCRIC,
    VORIG;

    SELECT N1_CBASE, N1_DESCRIC,
    (Select SUM(N3_VORIG1) as VORIG
    FROM SN3010
    WHERE N1_CBASE = N3_CBASE
    GROUP BY N3_CBASE)
    FROM SN1010 with(nolock)
    WHERE SN1010.D_E_L_E_T_ ‘*’
    AND N1_CBASE = ‘0000000001’

  • Rafael

    Muito bom!

    Parabéns pelo artigo. Muito didático e pratico.