Combinando tabelas com Join e Keep
A junção é uma operação que usa duas tabelas para combiná-las em uma. Os registros da tabela resultante são combinações dos registros das tabelas originais, de forma que, geralmente, os dois registros que contribuem para qualquer combinação na tabela resultante tenham um valor comum para um ou vários campos comuns, a assim chamada junção natural. No Qlik Sense, as junções podem ser feitas no script, produzindo tabelas lógicas.
É possível unir tabelas que já estão no script. Assim, a lógica do Qlik Sense não verá as tabelas separadas, e sim o resultado da junção, que é uma única tabela interna. Em algumas situações isso é necessário, mas existem desvantagens:
- Normalmente, as tabelas carregadas ficam maiores e o Qlik Sense trabalha mais lentamente.
- Algumas informações podem ser perdidas: a frequência (número de registros) na tabela original pode não mais estar disponível.
A funcionalidade Keep, que tem o efeito de reduzir uma ou ambas as tabelas à interseção dos dados da tabela antes de serem armazenadas no Qlik Sense, foi projetada para reduzir o número de casos que exigem o uso de junções explícitas.
Join
A forma mais simples de fazer uma junção é usar o prefixo Join no script, que une a tabela interna a outra tabela nomeada ou à última tabela criada anteriormente. A junção será externa, criando todas as combinações possíveis de valores das duas tabelas.
Exemplo:
A tabela interna resultante tem os campos a, b, c e d. O número de registros é diferente dependendo dos valores de campo das duas tabelas.
Para obter mais informações, consulte Join.
Usando Join
O prefixo Join explícito na linguagem de script do Qlik Sense executa uma junção completa das duas tabelas. O resultado é uma tabela. Tais uniões geralmente podem resultar em tabelas muito grandes.
Faça o seguinte:
- Abra o aplicativo Tutorial de uso de scripts avançado.
- Adicione uma nova seção de script no Editor de carregamento de dados.
- Nomeie a seção como Transactions.
-
Em DataFiles no menu direito, clique em Selecionar dados.
- Carregue e, em seguida, selecione Transactions.csv.
- Na janela Selecionar dados de, clique em Inserir script.
- Carregue e, em seguida, selecione Salesman.xlsx.
- Na janela Selecionar dados de, clique em Inserir script.
- Clique em Carregar dados.
- Abra o Visualizador do modelo de dados. O modelo de dados tem a seguinte aparência:
Seu script deve ter a seguinte aparência:
No entanto, ter as tabelas Transactions e Salesman separadas pode não ser o resultado necessário. Pode ser melhor juntar as duas tabelas.
Faça o seguinte:
- Para definir um nome para a tabela unida, adicione a seguinte linha acima do primeiro comando LOAD:
- Para unir as tabelas Transactions e Salesman, adicione a seguinte linha acima do segundo comando LOAD:
- Clique em Carregar dados.
- Abra o Visualizador do modelo de dados. O modelo de dados tem a seguinte aparência:
Transactions:
Join(Transactions)
Seu script deve ter a seguinte aparência:
Transactions:
LOAD
"Transaction ID",
"Salesman ID",
Product,
"Serial No",
"ID Customer",
"List Price",
"Gross Margin"
FROM [lib://DataFiles/Transactions.csv]
(txt, codepage is 28591, embedded labels, delimiter is ',', msq);
Join(Transactions)
LOAD
"Salesman ID",
Salesman,
"Distributor ID"
FROM [lib://DataFiles/Salesman.xlsx]
(ooxml, embedded labels, table is Salesman);
Todos os campos das tabelas Transactions e Salesman agora estão combinados em uma única tabela Transactions.
Keep
Uma das principais características do Qlik Sense é sua capacidade de fazer associações entre as tabelas, em vez de uni-las, reduzindo bastante o espaço usado na memória, aumentando a velocidade e oferecendo enorme flexibilidade. A funcionalidade Keep foi projetada para reduzir o número de casos em que as junções explícitas precisam ser usadas.
O prefixo Keep entre dois comandos LOAD ou SELECT reduz uma ou ambas as tabelas à interseção dos dados dos dados da tabela antes de serem armazenados no Qlik Sense. O prefixo Keep sempre deve ser precedido de uma das palavras-chave Inner, Left ou Right. A seleção de registros das tabelas é feita da mesma maneira que em uma junção correspondente. Entretanto, as duas tabelas não são unidas e serão armazenadas no Qlik Sense como duas tabelas nomeadas separadas.
Para obter mais informações, consulte Keep.
Inner
Os prefixos Join e Keep no script de carregamento de dados podem ser precedidos pelo prefixo Inner.
Se for usado antes de Join, especificará que a junção das duas tabelas deve ser interna. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo de ambos os lados.
Se usado antes de Keep, especificará que as duas tabelas deverão ser reduzidas à sua interseção comum antes de serem armazenadas no Qlik Sense.
Exemplo:
Nestes exemplos, usamos as tabelas de origem Table1 e Table2.
Observe que esses são apenas exemplos. Não há exercícios a serem concluídos no Qlik Sense.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Inner Join
Primeiro, realizamos um Inner Join nas tabelas, resultando em um VTable, contendo apenas uma linha, o único registro existente em ambas as tabelas, com dados combinados de ambas as tabelas.
A | B | C |
---|---|---|
1 | aa | xx |
Inner Keep
Se realizarmos um Inner Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
Para obter mais informações, consulte Inner.
Left
Os prefixos Join e Keep no script de carga de dados podem ser precedidos pelo prefixo left.
Se for usado antes de Join, ele especificará que a junção das duas tabelas deve ser à esquerda. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da primeira tabela.
Se usado antes de Keep, especificará que a segunda tabela deverá ser reduzida à sua interseção comum com a primeira tabela antes de ser armazenada no Qlik Sense.
Exemplo:
Nestes exemplos, usamos as tabelas de origem Table1 e Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Primeiro, um Left Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da Table1, combinadas com os campos das linhas correspondentes na Table2.
A | B | C |
---|---|---|
1 | aa | xx |
2 | cc | - |
3 | ee | - |
Se realizarmos um Left Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
Para obter mais informações, consulte Left.
Right
Os prefixos Join e Keep na linguagem de script do Qlik Sense podem ser precedidos pelo prefixo right.
Se for usado antes de Join, ele especificará que a junção das duas tabelas deve ser à direita. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da segunda tabela.
Se usado antes de Keep, especificará que a primeira tabela deverá ser reduzida à sua interseção comum com a segunda tabela antes de ser armazenada no Qlik Sense.
Exemplo:
Nestes exemplos, usamos as tabelas de origem Table1 e Table2.
A | B |
---|---|
1 | aa |
2 | cc |
3 | ee |
A | C |
---|---|
1 | xx |
4 | yy |
Primeiro, um Right Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da Table2, combinadas com os campos das linhas correspondentes na Table1.
A | B | C |
---|---|---|
1 | aa | xx |
4 | - | yy |
Se realizarmos um Right Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.
A | B |
---|---|
1 | aa |
A | C |
---|---|
1 | xx |
4 | yy |
Para obter mais informações, consulte Right.