Gå till huvudinnehåll

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:

  1. Öppna Skriptredigeraren i appen Scripting Tutorial.
  2. Klicka på fliken Dates.
  3. Klicka på Ladda data.
  4. Utifrån det laddningsskript du har skrivit hittills laddar Qlik Sense 628 rader från datafilen Dates.xlsx till Table2.

    Fönster som visar dataladdningens förlopp
    Data load progress window

  5. 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.
  6. 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:

    Laddningsskript på fliken Dates
    Load script in Dates tab.

  7. Klicka på Ladda data.
  8. 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.

    Fönster som visar laddningsprocessen för konkatenering av data
     Concatenation in data load progress window.

  9. Öppna datamodellvyn.
  10. Klicka på Visa förhandsgranskning.
  11. Endast Table2 skapades. Välj Table2. Tabellen har 256 rader.

    Datamodellvy som visar Table2
    Data model viewer showing Table2.

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:

  1. Redigera LOAD-satsen för Table2a genom att lägga till Concatenate och utkommentera Week.
  2. 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.

  3. Klicka på Ladda data.
  4. Öppna datamodellvyn.
  5. Nu kan du se att Table2a inte har skapats.

  6. Klicka på Table2 i datamodellvyn och klicka sedan på Förhandsgranska.
  7. Tabellen innehåller fälten Date, Month, Quarter, Week och Year. Fältet Week visas fortfarande eftersom det laddades från Table2.

  8. 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.

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:

  1. 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.
  2. 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); 

  3. Klicka på Ladda data.
  4. Öppna datamodellvyn.
  5. Nu kan du se att de två tabellerna är helt åtskilda.

    Datamodellvy som visar Table2 och Table 2a
    Data model viewer showing Table2 and Table 2a.

  6. 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.