Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
mxell
Contributor III
Contributor III

Como verificar se valor existe em outra tabela e aplicar?

Tenho 2 tabelas, preciso verificar na coluna lista na tabela 2, se existe o mesmo valor de item e lista para a tabela 1

Exemplo

Tenho as seguintes tabelas:

 

Tabela 1
Item Lista 1 Lista 2
A 10 15
B 20 25
C 30 35
D 40 45
E 50 55

 

 

Tabela 2
Item Lista Valor
A 10 1
B 20 2
B 30 2.5
C 33 3
C 35 3.5
D 33 4
E 55 5

 

 

Fato
Item Lista Encontrada Valor
A 10 1
B 20 2
C 35 3.5
D - 0
E 55 5

 

 

Como faço?

 

 

mxell_0-1698274314823.png

 

Labels (1)
1 Solution

Accepted Solutions
rodrigo_martins
Partner - Creator
Partner - Creator

Alguns pontos da solução podem mudar dependendo da maneira como a leitura desses dados é feita. Mas a ideia geral é criar uma coluna na Tabela 2 onde você fará um mapping com a chave Item + Lista a partir da Tabela 1. Como a Tabela 1 tem duas colunas de listas, você pode fazer a leitura dela duas vezes (concatenando a leitura do Item e Lista1 com Item e Lista 2) ou pode usar o comando Crosstable, que é o mais indicado pois só será necessário ler o QVD uma única vez.

O resultado desse ApplyMap irá dizer se a chave Item + Lista da Tabela 2 existe na Tabela 1. O próximo passo é fazer uma leitura residente da Tabela 2 desconsiderando as linhas onde o ApplyMap não encontrou resultado. A tabela 2 pode ser removida do modelo (a tabela criada para o ApplyMap é removida automaticamente ao término da execução do script).

Na visualização desses dados, nesse exemplo, a fato não terá valores associados ao Item "D". Para que ele apareça seria necessária a existência de uma dimensão "Item" associada a essa fato, além da opção "Incluir valores nulos" marcada nessa coluna da tabela.

Anexei um script que simula esse cenário e implementa a solução que descrevi. 

View solution in original post

4 Replies
rodrigo_martins
Partner - Creator
Partner - Creator

Alguns pontos da solução podem mudar dependendo da maneira como a leitura desses dados é feita. Mas a ideia geral é criar uma coluna na Tabela 2 onde você fará um mapping com a chave Item + Lista a partir da Tabela 1. Como a Tabela 1 tem duas colunas de listas, você pode fazer a leitura dela duas vezes (concatenando a leitura do Item e Lista1 com Item e Lista 2) ou pode usar o comando Crosstable, que é o mais indicado pois só será necessário ler o QVD uma única vez.

O resultado desse ApplyMap irá dizer se a chave Item + Lista da Tabela 2 existe na Tabela 1. O próximo passo é fazer uma leitura residente da Tabela 2 desconsiderando as linhas onde o ApplyMap não encontrou resultado. A tabela 2 pode ser removida do modelo (a tabela criada para o ApplyMap é removida automaticamente ao término da execução do script).

Na visualização desses dados, nesse exemplo, a fato não terá valores associados ao Item "D". Para que ele apareça seria necessária a existência de uma dimensão "Item" associada a essa fato, além da opção "Incluir valores nulos" marcada nessa coluna da tabela.

Anexei um script que simula esse cenário e implementa a solução que descrevi. 

mxell
Contributor III
Contributor III
Author

rodrigo_martins, 

Obrigado pela resposta.

Fiz o teste aqui, mas quando aplico numa tabela está retornando a soma total para cada item e não o valor daquele item para ele

mxell_0-1698315906976.png

 

rodrigo_martins
Partner - Creator
Partner - Creator

@mxell enquanto estava montando o script que enviei passei por uma situação parecida. Resolvi excluindo a Tabela 2 antes de criar a fato.

tmpFato:
load
	Item,
	Lista,	
	Num(Valor) * Num(ApplyMap('mapTabela1', Item & '|' & Lista, 0)) + 0 as _valor
resident tabela2;

drop table tabela1;
drop table tabela2;

fato:
load
	Item,
	Lista,
	_valor as Valor
Resident tmpFato 
where _valor > 0;

Precisei fazer isso porque a fato e a Tabela2 tinham exatamente a mesma estrutura, e quando isso acontece o Qlik automaticamente concatena o conteúdo dos loads seguintes na primeira tabela (não criando a seguinte separadamente na memória). Quando observei os valores na tabela na tela, as linhas com _valor = 0 não haviam sido removidas.

Caso isso ainda não resolva seu problema, passe mais informações (como os dados de origem e o script ou o .qvf que você está usando) pra que eu ou outra pessoa aqui da comunidade possa te ajudar.

mxell
Contributor III
Contributor III
Author

Deu certo.

Muito obrigado!!