Sätt att optimera QlikView-filer

Nedan har jag samlat några tips på hur en med enkla grep förbättra sina QlikView-filers prestanda utan att uppgradera hårdvaran.

 

Använd én transaktionstabell

I QlikView kan användas för att analysera datamodeller uppbyggd på olika sätt med transaktionstabeller, linktabeller och dimensioner. En struktur med én transaktionstabell direkt kopplat till dimensionstabeller är att föredra ut minnesanvändningssynpunkt.

Ett sätt att bygga bort flera transaktionstabeller är att slå de sammans till en.

I exemplet nedan har vi två transaktionstabeller med med tillhörande dimensionstabeller. För att koppla ihop de i QlikView har jag användt mig av en länktabell som sätter relationen mellan tabellerna.

Tabellvy som visar hur flera transaktionstabeller kan användas i QlikView

Ett sätt förbättra prestanda i det här fallet är att slå ihop de två tabellerna till en. Skapa första transaktionstabellen (a.Transactions) som vanligt, men under laddningen av den andra använd Concatenate Load.

concatenate (Transactions)
LOAD
    Dig, %Dim3_ID %Dim4_ID, Expression1, Expression2, Expression3
FROM / RESIDENT
    din_källa;
Tabellschema med en transaktionstabell

Undvik syntetiska nycklar

 

Syntetisk nyckel i QlikView

QlikView kopplar ihop dataset genom att jamnföra namnsättningen av fältnamn, tabeller kopplas samman med sina gemensamma fältnamn. Försök att ha endast ett gemensamt fältnamn som kopplar två tabeller samman. Har flera gemensamma fält skapas syntetiska nycklar. Syntetiska nycklar har namsättningen $Syn <siffra> Table, e.g. ”$Syn 1 Table” i bilden ovan. Syntetiska nycklar genererar inga fel och applikationer med sådana kommer att fungera korrekt, men konsumera mycket minne. Med en syntetisk nyckel kommer QlikView skapa alla möjliga kombination av de gemensamma fälten in i den syntetiska nyckeltabellen.Det går att undvika syntetiska nycklar genom att sätta ihop alla fält som ingår i den syntetiska nyckeln till ett nytt nyckelfält. Med utgångspunkt i bilden ovan sätter jag ihop Num och Alpha till ett nytt nyckelfält, NumAlpha.

Num & '|' & Alpha AS NumAlpha

QlikView datamodell utan syntetisk nyckel

Resultatet blir en datamodell utan syntetisk nyckel och ett gemensamt fältnamn som associerar ihop tabellerna med varann.

 

Undvik tunga IF och WHERE-satser applikationen

Det kan finns ofta stora prestandaförbättringar i att undvika komplexa beräkningar i slutapplikationen.

I stora dataset kan beräknade dimensioner och uttryck som använder sig av if- och where-satser betraktas som tunga. Jämförelser mot text är dessutom mer resurskrävande än mot siffror, exempelvis så är a = 1 bättre att använda än a = ‘1’. I många fall är det möjligt att ta hänsyn till detta i skriptet för att underlätta belastningen i applikationen.

Säg att du är intresserad av dina elektroniska kundtjänstkontakter. Du får idag ut korrekt värde i applikationen med följande uttryck:

IF(mixmatch(Kontakttyp,'E-post','Twitter','Facebook','Hemsida'), sum([Antal kontakter]), null() )

 

Genom att förbereda i scriptet med flaggan _DigitalaKontakter kan du förbättra uttrycket.

LOAD
  ...,
  IF(mixmatch(Kontakttyp,'E-post','Twitter','Facebook','Hemsida'), 1, 0) as _DigitalaKontakter
RESIDENT
  ...;

 

I uttrycket i tabellen kan du nu skriva följande för att få bort jämförelse mot text:

IF( _DigitalaKontakter = 1, sum([Antal kontakter]), null() )

För att få bort kan man även föränkla uttrycket ytterligare genom att dra nyttja av att flaggan är 1 eller 0.

sum([Antal kontakter] * _DigitalaKontakter

 

Nyttja att SUM() är snabbare än COUNT()

För att visa antalet unika träffar av ett fält i sin applikation kan man använda sig av

count(distinct fältnamn).

Om en ser till att fältnamnet ligger utbrutet i en dimension och inte i transaktionstabellen finns det ett betydligt snabbare sätt att göra beräkningen.

Se till att ha med en räknare i dimesionstabellen

LOAD
  *,
  1 as #Agenträknare

Med en dimensionräknare är det nu möjligt att använda sum(#Agenträknare) för att få samma resultat som ovan fast med en effektivare kod.

 

Reducera antal distinkta fältvärden

QlikView spar endast distinkta värden en gång, det gör att det finns utrymme att optimera applikationen genom att göra justeringar i det data som sparas.

Exempel

  • Runda av flyttal
  • Splitta strukturerad text.
    • Exempelvis kan E-postadress splittras på Namn och Domän:

E-postadress (7 x 18 = 126 byte)
vegar@dittbolag.se
jenny@mittbolag.se
vegar@ertbolag1.se
jenny@mittbolag.se
maria@dittbolag.se
maria@ertbolag1.se
vegar@mittbolag.se

Namn (3 x 5 = 15 byte)
vegar
jenny
maria

Domän (3 x 13 =39 byte)
@dittbolag.se
@mittbolag.se
@ertbolag1.se

  • Runda av tidsstämplar till den lägstanivå du önskar använda.
    • Dagsnivå: floor(Tidstämpel)
    • Veckonivå: WeekName(Tidstämpel)
    • Månadsnivå: MonthName(Tidstämpel)
  • Rensa fält som inte används

 

Share on LinkedInTweet about this on TwitterShare on Google+Share on FacebookEmail this to someone

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *