Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Relacionamento entre Tabelas

Boa Tarde,

Estou tentando fazer algo no QlikView há algum tempo e estou tendo dificuldade. Tenho a 'Tabela 1' onde preciso descobrir a coluna estado de cada linha utilizando a tabela 2.

Só que quero que ela pegue o estado onde a coluna 'Número' da Tabela 1 é igual a 'Numero' da tabela 2 e que ele pegue a maior Data da tabela 2 que é menor que a da Tabela 1.

Algo como  max(Data Inicio(2))  Where Data Inicio(2)<Data Inicio(1).

Segue um exemplo:

Tabela 1:

Numero     Data Inicio(1)

1               16/08/2016    

1               21/08/2016

1               26/08/2016

2               07/08/2016

2               22/08/2016

3               07/08/2016

3               09/08/2016

Tabela 2:

Numero     Data Inicio(2)         Estado

1              10/08/2016             A

1              14/08/2016             B

1              20/08/2016             D

1              28/08/2016             B

2              05/08/2016             C

2              10/08/2016             C

2              20/08/2016             B

3              04/08/2016             A

3              06/08/2016             A

3              14/08/2016             B

3              28/08/2016             C

Tabela Final:

Numero     Data Inicio          Estado

1               16/08/2016          B

1               21/08/2016          D

1               26/08/2016          D

2               07/08/2016          C

2               22/08/2016          B

3               07/08/2016          A

3               09/08/2016          A

Obrigado,

Vinicius.

1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

segue script...

Tabela:

LOAD * INLINE [

Numero,     DataInicio1

1     ,     16/08/2016   

1     ,     21/08/2016

1     ,     26/08/2016

2     ,     07/08/2016

2     ,     22/08/2016

3     ,     07/08/2016

3     ,     09/08/2016

];

join (Tabela)

LOAD * INLINE [

Numero ,DataInicio2,Estado

1      ,10/08/2016 , A

1      ,14/08/2016 , B

1      ,20/08/2016 , D

1      ,28/08/2016 , B

2      ,05/08/2016 , C

2      ,10/08/2016 , C

2      ,20/08/2016 , B

3      ,04/08/2016 , A

3      ,06/08/2016 , A

3      ,14/08/2016 , B

3      ,28/08/2016 , C

];

left join (Tabela)

LOAD

   Numero,

   DataInicio1,

   max(DataInicio2)       as MaiorData

Resident Tabela

Where DataInicio2 < DataInicio1

Group by Numero, DataInicio1;

TabelaFinal:

NoConcatenate

LOAD

   Numero,

   DataInicio1,

   DataInicio2,

   Estado

Resident Tabela Where MaiorData = DataInicio2;

//

DROP Table Tabela;

furtado@farolbi.com.br

View solution in original post

4 Replies
Anonymous
Not applicable
Author

eu faria algo tipo assim (talvez a etapa "tab3" e "tab_final" de pra fazer no mesmo load, mas como não tenho certeza, deixei separado... e na hora do max() fique atento ao formato de data que vai sair o resultado, pro left join seguinte dar certo as datas precisam estar no mesmo formato) :

tab1:

load

Numero,

Data_1

from [ tab 1 ];

left joint (tab1)

load

Numero,

Data_2

from [ tab 2 ];

tab3:

Noconcatenate

load

Numero,

Data_1,

Data_2

resident tab1 where Data_1 > Data_2 ;


drop table tab1;

tab_final:

load

Numero

Data_1

max(Data_2) as Data_tmp

resident tab3 group by Numero, Data_1;


drop table tab3;


left join (tab_final)

load

Numero,

Data_2 as Data_tmp,

Estado

from [ tab 2 ];

drop field Data_tmp;



afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Vinicius,

segue modelo...

2016-09-20_15h54_48.png

furtado@farolbi.com.br
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

segue script...

Tabela:

LOAD * INLINE [

Numero,     DataInicio1

1     ,     16/08/2016   

1     ,     21/08/2016

1     ,     26/08/2016

2     ,     07/08/2016

2     ,     22/08/2016

3     ,     07/08/2016

3     ,     09/08/2016

];

join (Tabela)

LOAD * INLINE [

Numero ,DataInicio2,Estado

1      ,10/08/2016 , A

1      ,14/08/2016 , B

1      ,20/08/2016 , D

1      ,28/08/2016 , B

2      ,05/08/2016 , C

2      ,10/08/2016 , C

2      ,20/08/2016 , B

3      ,04/08/2016 , A

3      ,06/08/2016 , A

3      ,14/08/2016 , B

3      ,28/08/2016 , C

];

left join (Tabela)

LOAD

   Numero,

   DataInicio1,

   max(DataInicio2)       as MaiorData

Resident Tabela

Where DataInicio2 < DataInicio1

Group by Numero, DataInicio1;

TabelaFinal:

NoConcatenate

LOAD

   Numero,

   DataInicio1,

   DataInicio2,

   Estado

Resident Tabela Where MaiorData = DataInicio2;

//

DROP Table Tabela;

furtado@farolbi.com.br
Not applicable
Author

Muito obrigado, atendeu perfeitamente!