5 Replies Latest reply: Aug 29, 2011 5:45 AM by Jason Michaelides RSS

    Amusing Qlikview

      Hello,

       

      I found this a bit amusing (see attachment picture)

       

       

      Anyone  can explain this?

       

       

      Basicly I load 2 tables, like this. Why it creates syn table? :S

       

      FIX:

      LOAD COMPANY

      1 as T

      RESIDENT FIX;

      INNER JOIN

      LOAD

      COMPANY

      RESIDENT T_MAP;

       

      FIX:

      LOAD COMPANY

      2 as T

      RESIDENT FIX;

      INNER JOIN

      LOAD

      COMPANY

      RESIDENT T_MAP;

        • Amusing Qlikview
          Jason Michaelides

          Your 2 tables have a same name and the same fields. QV won't let the names be the same so it has named one of them FIX-1. The syn table is because all the fields are the same and the associate technology of QV will link on all matching fields. Synthetic keys are created when there is more than one matching field; they are effectively a combination of all the similar fields to create just one link.

           

          You need to review your data model.

           

          Hope this helps,

           

          Jason

            • Re: Amusing Qlikview

              But.. Normally when table has same columns, Q merges to one table. I am excpecting same behavior. You can try this with two inline tables. I think inner join is cousing some problems, and Q doesnt execute/skip than process.

                • Re: Amusing Qlikview
                  Jason Michaelides

                  kristaps.ozols wrote:

                   

                  But.. Normally when table has same columns, Q merges to one table. I am excpecting same behavior. You can try this with two inline tables. I think inner join is cousing some problems, and Q doesnt execute/skip than process.

                   

                  If you want a standard join between the two tables you mustn't name the second table.  Try this:

                   

                   

                  FIX:
                  LOAD
                       COMPANY,
                       1 as T
                  RESIDENT FIX;
                  
                  INNER JOIN (FIX)
                  
                  LOAD
                       COMPANY
                  RESIDENT T_MAP;
                  
                  JOIN (FIX)
                  
                  LOAD
                       COMPANY,
                       2 as T
                  RESIDENT FIX;
                  
                  INNER JOIN (FIX)
                  
                  LOAD
                       COMPANY
                  RESIDENT T_MAP;
                  
                  

                   

                  However, note that this is 4 steps all consecutively acting on the table FIX. As cmaneglia says, you may want to build the tables separately first:

                   

                  FIX:                    //this is the main table
                  LOAD
                       COMPANY,
                       1 as T
                  RESIDENT FIX;
                  
                  INNER JOIN (FIX)     //inner join to main table
                  
                  LOAD
                       COMPANY
                  RESIDENT T_MAP;
                  
                  FIX_temp:     //create a temp table
                  NoConcatenate     //this is necessary to prevent an automatic join as the fields will be the same
                  LOAD
                       COMPANY,
                       2 as T
                  RESIDENT FIX;
                  
                  INNER JOIN (FIX_temp)     //inner join to the temp table
                  
                  LOAD
                       COMPANY
                  RESIDENT T_MAP;
                  
                  JOIN (FIX)     //define the table to join to
                  
                  LOAD
                       *
                  RESIDENT FIX_temp;     //join temp table to main one
                  
                  DROP TABLE FIX_temp;     //to prevent syn keys as the temp table is no longer needed.
                  
                  

                   

                  Remember to be sure you are using the correct JOIN type.  Read about the difference in the F1 help.

                   

                  Jason

                   

                  PS - just looking through the field names I wonder if any of this is the right option for you.  What are you trying to do here?

              • Re: Amusing Qlikview

                Hi.

                If Qlik find two tables with the same fields usually performs a concatenate.

                 

                Probably, in your case, the two join Qlik require to keep separate the two structures upto join them.

                 

                 

                In your case you should use two temporary tables in memory, make the explicit concatenate and destroy the temporary tables.