Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
qlikconsultant
Creator III
Creator III

Load different files and join. Difference betwean concatenate and not?

Hi i have the following code:

Table_1:

LOAD

Attribute_A,

Attribute_B

FROM X.qvd (qvd);

left join Table_2:

Load

Attribute_B,

Attribute_C

FROM Y1.qvd (qvd);

Load

Attribute_B,

Attribute_C

FROM Y2.qvd (qvd);

Load

Attribute_B,

Attribute_C

FROM Y3.qvd (qvd);

If I use this code i have a Table_2 in the Data_Structure. If I use Concatenate:

Table_1:

LOAD

Attribute_A,

Attribute_B

FROM X.qvd (qvd);

left join Table_2:

Load

Attribute_B,

Attribute_C

FROM Y1.qvd (qvd);

Concatenate

Load

Attribute_B,

Attribute_C

FROM Y2.qvd (qvd);

Concatenate

Load

Attribute_B,

Attribute_C

FROM Y3.qvd (qvd);

I don't have Table_2 is not in the Data_Structure.

I thought both codes should deliver the same result. Is it because of the join that QlikView uses the joins after the first tables and ignore the other 2 tables?

1 Solution

Accepted Solutions
Gysbert_Wassenaar

// The first case:


Table_1: 
LOAD  Attribute_A,  Attribute_B  FROM X.qvd (qvd); 
 

// table Table_1 is created


left join 


// the data from next load statement will be joined to Table_1


// Table_2 will not be created since it will be joined into Table_1

Table_2:                                   
Load   Attribute_B,   Attribute_C  FROM Y1.qvd (qvd); 

 

// Only Table_1 exists and it contains the data from X.qvd and Y1.qvd

// The next load statement will create a new table. Since you don't specify a table name it will get the name from the table stored in the qvd

Load   Attribute_B,  Attribute_C  FROM Y2.qvd (qvd); 

// There are now two tables.


// This load retrieves the same fields as the load from Y2.qvd. Therefore the data will be appened to that table
Load   Attribute_B,   Attribute_C  FROM Y3.qvd (qvd); 

// There are still two tables: Table_1 with data from X.qvd and Y1.qvd and another table with data from Y2.qvd and Y3.qvd.

// Second case:

//Because you now concatenate the data from Y2.qvd and Y3.qvd all the data ends up in Table_1.

// Third case:

// First load all the data from Y1.qvd, Y2.qvd and Y3.qvd into one table

Table_1:

LOAD  Attribute_B,   Attribute_C  FROM Y*.qvd (qvd); 


JOIN (Table_1)


// Then join to that table the data from X.qvd

LOAD Attribute_A,  Attribute_B  FROM X.qvd (qvd);

// This will probably give you the result you want.


talk is cheap, supply exceeds demand

View solution in original post

9 Replies
Chanty4u
MVP
MVP

Kushal_Chawda

I am not sure what you are trying to do but correct way here is

Table_2: 

Load  

Attribute_B,  

Attribute_C 

FROM Y1.qvd (qvd); 

Concatenate 

Load  

Attribute_B, 

Attribute_C 

FROM Y2.qvd (qvd); 

Concatenate  

Load  

Attribute_B,  

Attribute_C 

FROM Y3.qvd (qvd); 

right join (Table_2)

LOAD 

Attribute_A, 

Attribute_B 

FROM X.qvd (qvd); 

sunny_talwar

May be you want to do this:

Table_1: 

LOAD 

Attribute_A, 

Attribute_B 

FROM X.qvd (qvd); 

 

Table_2: 

Load  

Attribute_B,  

Attribute_C 

FROM Y1.qvd (qvd);

 

Concatenate (Table_2)

Load  

Attribute_B, 

Attribute_C 

FROM Y2.qvd (qvd);

Concatenate (Table_2)  

Load  

Attribute_B,  

Attribute_C 

FROM Y3.qvd (qvd);

Left Join (Table_1)

LOAD *

Resident Table_2;

DROP Table Table_2;

qlikconsultant
Creator III
Creator III
Author

I try to join both tables but table_1 is filled with a loop.

neha_shirsath
Specialist
Specialist

Hi,

What exactly you are trying to do?

You want difference between Concatenate & join?

you can refer below discussion-

Re: What is difference between concatenate & join?

Regards,

Neha

Kushal_Chawda

So have you tried what I have suggested?

Colin-Albert

If your tables only have two columns, consider using ApplyMap rather than join as the results will be more consistent and faster.

These blogs should help

http://www.quickintelligence.co.uk/applymap-is-it-so-wrong/

Don't join - use Applymap instead

Colin-Albert

Try this


BC_Map:

Mapping Load

     Attribute_B,  

     Attribute_C 

FROM Y*.qvd (qvd); 


Table_1: 

LOAD 

     Attribute_A, 

     Attribute_B .

     ApplyMap('BC_Map', Attribute_B) as Attribute_C

FROM X.qvd (qvd); 

Gysbert_Wassenaar

// The first case:


Table_1: 
LOAD  Attribute_A,  Attribute_B  FROM X.qvd (qvd); 
 

// table Table_1 is created


left join 


// the data from next load statement will be joined to Table_1


// Table_2 will not be created since it will be joined into Table_1

Table_2:                                   
Load   Attribute_B,   Attribute_C  FROM Y1.qvd (qvd); 

 

// Only Table_1 exists and it contains the data from X.qvd and Y1.qvd

// The next load statement will create a new table. Since you don't specify a table name it will get the name from the table stored in the qvd

Load   Attribute_B,  Attribute_C  FROM Y2.qvd (qvd); 

// There are now two tables.


// This load retrieves the same fields as the load from Y2.qvd. Therefore the data will be appened to that table
Load   Attribute_B,   Attribute_C  FROM Y3.qvd (qvd); 

// There are still two tables: Table_1 with data from X.qvd and Y1.qvd and another table with data from Y2.qvd and Y3.qvd.

// Second case:

//Because you now concatenate the data from Y2.qvd and Y3.qvd all the data ends up in Table_1.

// Third case:

// First load all the data from Y1.qvd, Y2.qvd and Y3.qvd into one table

Table_1:

LOAD  Attribute_B,   Attribute_C  FROM Y*.qvd (qvd); 


JOIN (Table_1)


// Then join to that table the data from X.qvd

LOAD Attribute_A,  Attribute_B  FROM X.qvd (qvd);

// This will probably give you the result you want.


talk is cheap, supply exceeds demand