Kombinera tabeller med Join och Keep | Qlik CloudHjälp
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 Qlik Sense kan joins göras i skriptet. Resultatet blir en logisk tabell.

Det är möjligt att länka tabeller redan i skriptet. Qlik Sense-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 Qlik Sense 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-funktionen, som reducerar den ena tabellen eller båda tabellerna till det gemensamma snittet av tabelldata innan tabellerna sparas i Qlik Sense, 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 när de interna tabellerna har skapats, är emellertid i allt väsentligt också en länkning (join).

Joins i en SQL SELECT-sats

Med vissa ODBC-drivrutiner är det möjligt att göra en join i SELECT-satsen. Detta är nästan likvärdigt med att göra en join med prefixet Join.

De flesta ODBC-drivrutiner kan dock inte göra en fullständig (dubbelriktad) yttre join. De kan bara göra en vänster eller höger yttre join. En vänster (höger) yttre join inkluderar endast kombinationer där kopplingsnyckeln finns i den vänstra (högra) tabellen. En fullständig yttre join inkluderar alla kombinationer. Qlik Sense gör automatiskt en fullständig yttre join.

Dessutom är det mycket mer komplicerat att göra joins i SELECT-satser än att göra joins i Qlik Sense.

SELECT DISTINCTROW

[Order Details].ProductID, [Order Details].

UnitPrice, Orders.OrderID, Orders.OrderDate, Orders.CustomerID

FROM Orders

RIGHT JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID;

Denna SELECT-sats kopplar en tabell som innehåller order till ett fiktivt företag, med en tabell som innehåller orderdetaljer. Det är en höger yttre join, vilket innebär att alla poster i OrderDetails inkluderas, även de med ett OrderID som inte finns i tabellen Orders. Order som finns i Orders men inte i OrderDetails inkluderas dock inte.

Join

Det enklaste sättet att göra en join är med prefixet Join i skriptet, vilket kopplar den interna tabellen med en annan namngiven tabell eller med den senast skapade tabellen. Kopplingen blir en yttre join, som skapar alla möjliga kombinationer av värden från de två tabellerna.

LOAD a, b, c from table1.csv;

join LOAD a, d from table2.csv;

Den resulterande interna tabellen har fälten a, b, c och d. Antalet poster varierar beroende på fältvärdena i de två tabellerna.

Anteckning om informationNamnen på de fält som ska kopplas måste vara exakt desamma. Antalet fält som ska kopplas är godtyckligt. Vanligtvis bör tabellerna ha ett eller några fält gemensamt. Inga gemensamma fält ger den kartesiska produkten av tabellerna. Alla fält gemensamma är också möjligt, men är oftast meningslöst. Om inte ett tabellnamn för en tidigare laddad tabell anges i Join-satsen använder Join-prefixet den senast skapade tabellen. Ordningen på de två satserna är alltså inte godtycklig.

Mer information finns i Join.

Keep

Det explicita Join-prefixet i dataladdningsskriptet utför en fullständig join av de två tabellerna. Resultatet blir en tabell. I många fall resulterar sådana joins i mycket stora tabeller. En av de viktigaste funktionerna i Qlik Sense är dess förmåga att göra associationer mellan tabeller i stället för att koppla ihop dem, vilket minskar utrymmet i minnet, ökar hastigheten och ger enorm flexibilitet. Keep-funktionen har utformats för att minska antalet fall där explicita joins behöver användas.

Keep-prefixet mellan två LOAD- eller SELECT-satser har effekten att en eller båda av de två tabellerna reduceras till snittet av tabelldata innan de lagras i Qlik Sense. Keep-prefixet måste alltid föregås av ett av nyckelorden Inner, Left eller Right. Urvalet av poster från tabellerna görs på samma sätt som i en motsvarande join. De två tabellerna kopplas dock inte ihop och kommer att lagras i Qlik Sense som två separat namngivna tabeller.

Mer information finns i Keep.

Inner

Prefixen Join och Keep i dataladdningsskriptet kan föregås av prefixet Inner.

Om det används före Join anger det att kopplingen mellan de två tabellerna ska vara en inre join. Den resulterande tabellen innehåller endast kombinationer mellan de två tabellerna med en fullständig datauppsättning från båda sidor.

Om det används före Keep anger det att de två tabellerna ska reduceras till deras gemensamma snitt innan de lagras i Qlik Sense.

I dessa exempel använder vi källtabellerna Table1 och Table2:

Table 1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Inner Join

Först utför vi en Inner Join på tabellerna, vilket resulterar i VTable, som endast innehåller en rad, den enda posten som finns i båda tabellerna, med data kombinerade från båda tabellerna.

VTable:

SELECT * from Table1;

inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Om vi i stället utför en Inner Keep har du fortfarande två tabeller. De två tabellerna är associerade via det gemensamma fältet A.

VTab1:

SELECT * from Table1;

VTab2:

inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Mer information finns i Inner.

Left

Prefixen Join och Keep i dataladdningsskriptet kan föregås av prefixet left.

Om det används före Join anger det att kopplingen mellan de två tabellerna ska vara en vänster join. Den resulterande tabellen innehåller endast kombinationer mellan de två tabellerna med en fullständig datauppsättning från den första tabellen.

Om det används före Keep anger det att den andra tabellen ska reduceras till dess gemensamma snitt med den första tabellen innan den lagras i Qlik Sense.

I dessa exempel använder vi källtabellerna Table1 och Table2:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

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

VTable:

SELECT * from Table1;

left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

Om vi i stället utför en Left Keep har du fortfarande två tabeller. De två tabellerna är associerade via det gemensamma fältet A.

VTab1:

SELECT * from Table1;

VTab2:

left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Mer information finns i Left.

Right

Prefixen Join och Keep i dataladdningsskriptet kan föregås av prefixet right.

Om det används före Join anger det att kopplingen mellan de två tabellerna ska vara en höger join. Den resulterande tabellen innehåller endast kombinationer mellan de två tabellerna med en fullständig datauppsättning från den andra tabellen.

Om det används före Keep anger det att den första tabellen ska reduceras till dess gemensamma snitt med den andra tabellen innan den lagras i Qlik Sense.

I dessa exempel använder vi källtabellerna Table1 och Table2:

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

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

VTable:

SELECT * from Table1;

right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Om vi i stället utför en Right Keep har du fortfarande två tabeller. De två tabellerna är associerade via det gemensamma fältet A.

VTab1:

SELECT * from Table1;

VTab2:

right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Mer information finns i Right.

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

Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!