Konkatenering
Konkatenering är en operation som slår samman två tabeller och kombinerar dem i en tabell.
De två tabellerna läggs ihop med varandra genom att stapla den ena på den andra, med en kolumn för varje distinkt kolumnnamn. Data ändras inte och tabellen som skapas innehåller samma antal poster som de två ursprungliga tabellerna tillsammans. Det går att utföra flera konkateneringar i rad, så att tabellen som skapas blir en konkatenering av fler än två tabeller.
Automatisk konkatenering
Om två eller flera inlästa tabeller har exakt samma fältnamn och exakt samma antal fält, kommer Qlik Sense automatiskt att konkatenera innehållet i de olika satserna till en tabell.
Antalet fält och namnen på dessa måste vara identiska för att automatisk konkatenering ska ske. Ordningsföljden för de två LOAD-satserna är godtycklig, men tabellen ges namnet på den tabell som laddas först.
Gör följande:
- Öppna Skriptredigeraren i appen Scripting Tutorial.
- Klicka på fliken Dates.
- Klicka på Ladda data.
- På en ny rad i skriptavsnittet Dates, kopiera och klistra in LOAD-satsen för Table2. Detta gör att data laddas två gånger. Ge den andra tabellen namnet Table2a.
- Klicka på Ladda data.
- Öppna datamodellvyn.
- Klicka på Visa förhandsgranskning.
Utifrån det laddningsskript du har skrivit hittills laddar Qlik Sense 628 rader från datafilen Dates.xlsx till Table2.
Alternativt kan du ta bort det befintliga skriptet och istället kopiera och klistra in följande:
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Ditt skript bör se ut så här:
Qlik Sense laddar inte först Table2 och sedan Table2a. Programmet ser istället att Table2a innehåller samma fältnamn och lika många fält som Table2. Alla data från Table2a läggs till i Table2 och tabellen Table2a tas bort. Därför har Table2 nu 1 256 rader.
Endast Table2 skapades. Välj Table2. Tabellen har 256 rader.
Tvingad konkatenering
Det går att tvinga Qlik Sense till konkatenering även om två eller fler tabeller inte har exakt samma uppsättning fält. Detta görs med Concatenate-prefixet i skriptet, som konkatenerar en tabell med en annan namngiven tabell eller den senast skapade tabellen.
Gör följande:
- Redigera LOAD-satsen för Table2a genom att lägga till Concatenate och utkommentera Week.
- Klicka på Ladda data.
- Öppna datamodellvyn.
- Klicka på Table2 i datamodellvyn och klicka sedan på Förhandsgranska.
- Klicka på Week i Table2. Förhandsgranskningen visar att fältet har 628 icke-null-värden. Men om du klickar på något av de andra fälten ser du att antalet icke-null-värden är 1256. Week laddades bara en gång, från Table2. Antalet värden (poster) är summan av antalet poster i Table2 och Table2a.
Nu ska ditt skript se ut så här:
Table2a:
Concatenate LOAD
"Date",
Month (Date) as "Month",
Quarter,
// "Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Genom att utkommentera Week kan vi se till att tabellerna inte är identiska.
Nu kan du se att Table2a inte har skapats.
Tabellen innehåller fälten Date, Month, Quarter, Week och Year. Fältet Week visas fortfarande eftersom det laddades från Table2.
Förebygga konkatenering
Om två eller flera inlästa tabeller har exakt samma fältnamn och exakt samma antal fält, kommer Qlik Sense automatiskt att konkatenera innehållet i de olika satserna till en tabell. Detta kan förebyggas med satsen NoConcatenate. Den tabell som har laddats med den associerade LOAD- eller SELECT-satsen konkateneras då inte med den befintliga tabellen.
Gör följande:
- För att helt kunna skilja på innehållet i de två tabellerna, lägger du till NoConcatenate i LOAD-satsen i Table2a och ger fälten nya namn, så att inte Qlik Sense skapar en syntetisk nyckel utifrån de matchande fälten. Utkommentera Week i Table2 så att båda tabellerna har samma fält.
- Klicka på Ladda data.
- Öppna datamodellvyn.
- Nu när vi har slutat demonstrera konkatenering behöver vi inte längre Table2a. Ta bort alla raderna i LOAD-satsen för Table2a och klicka sedan på Ladda data.
Nu ska ditt skript se ut så här:
Table2:
LOAD
"Date",
Month (Date) as "Month",
Quarter,
"Week",
"Year"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Table2a:
NoConcatenate LOAD
"Date" as "Date2",
Month (Date) as "Month2",
Quarter as "Quarter2",
"Week" as "Week2",
"Year" as "Year2"
FROM [lib://DataFiles/Dates.xlsx]
(ooxml, embedded labels, table is Dates);
Nu kan du se att de två tabellerna är helt åtskilda.