Läsa in data från en tidigare inläst tabell

Det finns två sätt att ladda och omvandla data från en tabellen som redan har laddats.

  • Resident LOAD – där du använder predikatet Resident i en efterföljande LOAD-sats för att ladda en ny tabell.
  • Föregående load – där du laddar från föregående LOAD- eller SELECT-sats utan att ange någon källa.

Resident eller föregående LOAD?

I de flesta fall går det att uppnå samma resultat genom att använda någon av metoderna. A föregående LOAD är vanligtvis det snabbare alternativet, men det finns en del fall där du behöver använda en Resident LOAD i stället:

  • Om du vill använda Order_by-satsen för att sortera posterna innan LOAD-satsen behandlas.
  • Om du vill använda något av följande prefix stöds inte föregående LOAD:
    • Crosstable
    • Join
    • Intervalmatch

Resident LOAD

Du kan använda Resident-predikatet i en LOAD-sats för att läsa in data från en tidigare inläst tabell. Detta är användbart när du vill utföra beräkningar för data som har lästs in med en SELECT-sats där du inte har möjlighet att använda Qlik Sense-funktioner, exempelvis datum eller numerisk värdehantering.

Example:  

I det här exemplet utförs datatolkningen i Resident-inläsningen eftersom den inte kan utföras i den inledande Crosstable LOAD.

PreBudget: Crosstable (Month, Amount, 1) LOAD Account, Jan, Feb, Mar, … From Budget; Budget: Noconcatenate LOAD Account, Month(Date#(Month,’MMM’)) as Month, Amount Resident PreBudget; Drop Table PreBudget;
Tips: Ett vanligt skäl för att använda Resident är att du vill använda en tillfällig tabell för beräkningar eller filtrering. När du har uppnått syftet med den tillfälliga tabellen ska den avlägsnas med satsen Drop table.

Föregående Load

Du kan använda funktionen föregående load för att ladda en tabell i ett pass, men fortfarande definiera flera övergångar i följd. I grunden är det en LOAD-sats som laddas från LOAD- eller SELECT-satsen nedan, utan att ange en källkvalificerare som From eller Resident som man normalt skulle göra. Du kan stapla valfritt antal LOAD-satser på det här sättet. Satsen nederst kommer att utvärderas först, och sedan satsen ovan, och så vidare tills det översta satsen har utvärderats.

Du kan uppnå samma resultat genom att använda Resident, men i de flesta fall är en föregående LOAD snabbare.

En annan fördel med föregående inläsning är att du kan behålla en beräkning på en plats och återanvända den i LOAD-satser placerade ovan.

Example 1: Omvandla data som lästs in med en SELECT-sats

Om du laddar data från en databas med en SELECT-sats kan du inte använda -för Qlik Sense-funktioner att tolka data i SELECT-satsen. Lösningen är att lägga till en LOAD-sats där du utför dataomvandling, ovanför SELECT-satsen.

I det här exemplet tolkar vi data som har sparats som en sträng med hjälp av Qlik Sensefunktionen Date# i en LOAD-sats med föregående SELECT-sats som källa.

LOAD Date#(OrderDate,’YYYYMMDD’) as OrderDate;
SQL SELECT OrderDate FROM … ;

Example 2: Förenkla ditt skript genom att återanvända beräkningar

I det här exemplet använder vi en beräkning mer än en gång i skriptet:

LOAD Age(FromDate + IterNo() – 1, BirthDate ) as Age, Date(FromDate + IterNo() – 1 ) as ReferenceDate Resident Policies While IterNo() <= ToDate - FromDate + 1 ;

Genom att introducera beräkningen i ett första pass kan vi återanvända den i Age-funktionen i en föregående LOAD:

LOAD ReferenceDate, Age(ReferenceDate, BirthDate ) as Age; LOAD *, Date(FromDate + IterNo() – 1 ) as ReferenceDate Resident Policies While IterNo() <= ToDate - FromDate + 1 ;

Begränsningar för föregående laddningar

  • Följande prefix kan inte användas i samband med föregående LOAD: Join, Crosstable och Intervalmatch.
  • Om du använder distinct för att ladda unika poster måste du placera distinct i den första load-satsen, eftersom distinct bara inverkar på destinationstabellen.

See also: