Gå till huvudinnehåll Gå till ytterligare innehåll

Kombinera tabeller med Join och Keep

En operation som slår samman två tabeller till en. Posterna i den skapade tabellen är kombinationer av posterna i de ursprungliga tabellerna, vanligtvis på så sätt att de två poster som bidrar till någon given kombination i den skapade tabellen har ett gemensamt värde för ett eller flera gemensamma fält – en så kallad natural join. I QlikView kan joins göras i skriptet. Resultatet blir en logisk tabell.

QlikView-logiken ser då inte de separata tabellerna, utan bara den interna tabell som länkningen resulterat i. Ibland kan detta vara nödvändigt, men det finns nackdelar:

  • De inlästa tabellerna blir ofta större och QlikView arbetar långsammare.
  • En del information kan gå förlorad; det går ofta inte längre att få frekvensuppgifter (antal poster) om den ursprungliga tabellen.

Keep-funktionaliteten, som reducerar den ena tabellen eller båda tabellerna till det gemensamma snittet av datamängden innan tabellerna lagras i QlikView, har utvecklats för att minska antalet fall där man måste använda funktionen explicit join.

Anteckning om informationI denna dokumentation används vanligen termen join för att beteckna länkningar som gjordes innan de interna tabellerna skapades. Associationen, som görs efter att de interna tabellerna har skapats, är emellertid i allt väsentligt också en länkning.

Join

En länkning skapas enklast med hjälp av Join-prefixet i skriptet, som länkar samman den interna tabellen med en annan namngiven tabell eller med den senast skapade tabellen. Länkningen blir en outer joinn, som skapar alla möjliga kombinationer av värden från två tabeller.

Exempel:  

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Den interna tabell som blir resultatet får fälten a, b, c och d. Antalet poster varierar beroende på fältvärdena i de två tabellerna.

Anteckning om informationFälten som länkar tabellerna måste ha identiska namn. Hur många fält man använder för länkningen spelar ingen roll. Vanligen ska tabellerna ha ett eller flera fält gemensamt. Om det inte finns något gemensamt fält kommer länkningen att resultera i den kartesiska produkten av tabellerna. Det är också möjligt att länka tabeller där alla fält är gemensamma, men det finns oftast ingen mening med det. Join-prefixet använder sig av den senast skapade interna tabellen såvida inte namnet på en tidigare inläst tabell har angetts i Join-satsen. Ordningen på de två satserna är således inte godtycklig.

Keep

En av finesserna med QlikView är just att programmet gör associationer mellan tabeller istället för att skapa länkningar, vilket minskar utrymmet i minnet, ökar hastigheten och ger större flexibilitet. Keep-funktionaliteten har utvecklats för att minska antalet fall där man måste använda explicit länkning.

Genom att använda prefixet Keep mellan två LOAD- eller SELECT-satser reducerar man den ena tabellen eller båda tabellerna innan de lagras i QlikView. Reduceringen baseras på snittet av datamängden i tabellerna. Prefixet Keep måste alltid inledas med något av följande nyckelord: Inner, Left eller Right. Urvalet av poster från tabellerna görs på samma sätt som i en motsvarande koppling. Skillnaden är att tabellerna inte länkas utan lagras i QlikView som två tabeller med olika namn.

Inner

Prefixen Join och Keep i QlikView-skriptspråket kan föregås av prefixet Inner.

Om det används framför Join, anger det att länkningen mellan de båda tabellerna ska vara en inre länkning (inner join). Den tabell som blir resultatet innehåller enbart kombination mellan de två tabellerna med en fullständig datauppsättning från båda sidor.

Om de används framför Keep, anger det att tabellerna ska reduceras till det gemensamma snittet av deras datamängder innan de lagras i QlikView.

Exempel:  

I de här exemplen använder vi källtabellerna Table1 och Table2:

Inner example tables, with one record appearing in both tables
Inner – källtabeller för exempel

Först utför vi en Inner Join på tabellerna. Det resulterar i att VTable bara innehåller en rad, den enda posten som förekommer i båda tabellerna, med kombinerade data från båda tabellerna.

VTable:

SELECT * från Table1;

inner join SELECT * från Table2;

Inner Join example table, with the one record that appeared in both tables
Inner Join – exempel

Om vi i stället gör en Inner Keep har vi fortfarande två tabeller. De två tabellerna associeras givetvis via fältet A.

VTab1:

SELECT * från Table1;

VTab2:

inner keep SELECT * från Table2;

Inner Keep example tables, both tables reduced to the one record that appeared in both tables
Inner Keep – exempel

Left

Prefixen Join och Keep i QlikView-skriptspråket kan föregås av prefixet left.

Om det används framför Join, anger det att länkningen mellan de båda tabellerna ska vara vänsterriktad (left join). En sådan länkning resulterar i en tabell som endast innehåller kombinationer där datauppsättningen från den första tabellen är fullständig.

Om det används framför Keep, anger det att den andra tabellen ska reduceras till det gemensamma snittet med den första tabellen innan den lagras i QlikView.

Exempel:  

I de här exemplen använder vi källtabellerna Table1 och Table2:

Left example tables, with one record that appears in both tables
Left – källtabeller för exempel

Först utför vi en Left Join på tabellerna. Resultatet blir att VTable innehåller alla rader från Table1, kombinerade med fält från matchande rader i Table2.

VTable:

SELECT * från Table1;

left join SELECT * från Table2;

Left Join example table, with all records from the first table and the one record that appeared in both tables added from the second table
Left Join – exempel

Om vi i stället gör en Left Keep har vi fortfarande två tabeller. De två tabellerna associeras givetvis via fältet A.

VTab1:

SELECT * från Table1;

VTab2:

left keep SELECT * från Table2;

Left Keep example tables, with the first table unchanged and the second table containing only the one record that appeared in both tables
Left Keep – exempel

Right

Prefixen Join och Keep i QlikView-skriptspråket kan föregås av prefixet right.

Om det används framför Join, anger det att länkningen mellan de båda tabellerna ska vara högerriktad (right join). En sådan länkning resulterar i en tabell som endast innehåller kombinationer där datamängden från den andra tabellen är fullständig.

Om det används framför Keep, anger det att den första tabellen ska reduceras till det gemensamma snittet med den andra tabellen innan den lagras i QlikView.

Exempel:  

I de här exemplen använder vi källtabellerna Table1 och Table2:

Right example tables, with one record that appears in both tables
Right – källtabeller för exempel

Först utför vi en Right Join på tabellerna. Resultatet blir att VTable innehåller alla rader från Table2, kombinerade med fält från matchande rader i Table1.

VTable:

SELECT * från Table1;

right join SELECT * från Table2;

Right Join example table, with all records from the second table and the one record that appeared in both tables added from the first table
Right Join – exempel

Om vi i stället gör en Right Keep har vi fortfarande två tabeller. De två tabellerna associeras givetvis via fältet A.

VTab1:

SELECT * från Table1;

VTab2:

right keep SELECT * från Table2;

Right Keep example tables, with the second table unchanged and the first table containing only the one record that appeared in both tables
Right Keep – exempel

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!

Gå med i programmet Analytics Modernization

Remove banner from view

Modernisera utan att kompromissa med dina värdefulla QlikView-appar med programmet för analysmodernisering. Klicka här för mer information eller ta kontakt: ampquestions@qlik.com