Metoder för kalender-skript

Det finns många metoder att hantera kalendrar i QlikView och Sense. I det här inlägget går jag igenom de vanligaste enkla fallen. Mer avancerade fall kommer i egna inlägg senare.


Kalender-skript går generellt ut på att skapa upp kalendervärden från ett datum. Om vi i vår datamodell till exempel har ett Fakturadatum och vill grafer och användare ska kunna arbeta med till exempel År, Månad, Vecka osv behöver vi skapa upp dessa fält.


En annan viktig del i ett kalender-skript är att alla möjliga värden skapas upp. Om vi haft servicejobb vecka 43 och 45 vill vi kunna se vecka 43, 44 och 45 i en graf. Normalt blir detta ett problem eftersom vi inte har några värden associerade med vecka 44.


Anta att vi har följande faktatabell:



Den äldsta metoden

Den äldsta metoden handlar om att generera fälten i den tabell där datumet finns. Värdena tas från från datumfältet och läggs som nya fält. Detta kan göras i den load-sats som läser in data från källan.

Load
    FakturaNr,
    KundNr,
    Fakturadatum,
    Fakturabelopp,
    year(Fakturadatum) as År,
    'Q' & ceil(month(Fakturadatum)/3) as Kvartal,
    month(Fakturadatum) as Månad,
    week(Fakturadatum) as Vecka,
    year(Fakturadatum) & num(month(Fakturadatum),'00') as ÅrMånad,
    weekyear(Fakturadatum) & num(month(Fakturadatum),'00') as ÅrVecka
from Fakturor.qvd (qvd);

Från Fakturadatum beräknas flera kalenderfält:



Nackdelen med denna metod är dels att vi inte genererar upp värden för mellanliggande dagar. I exemplet ovan har vi inte haft någon försäljning i 2019 november och då kommer vi heller inte ha värdet 201911 i ÅrMånad-fältet.


En annan nackdel är att eftersom fälten finns i faktatabellen kommer kalendervärdena behöva refereras på många rader. Anta till exempel att vi har tio års data med 52 veckor per år. Då finns 520 unika ÅrVecka-värden. Qliks motor hanterar de unika värdena separat och skapar i faktatabellen en pekare till dessa. För att unikt peka ut 520 unika värden behövs 10 bitar (2^9 = 512, 2^10 = 1024). Om tabellen innehåller 100 miljoner rader kommer vi behöva 100 miljoner pekare om 10 bitar vardera = 1 miljard bitar = 119MB data.


För små applikationer där det inte är viktigt att fylla ut värden mellan datum går denna metod bra.


Qliks kalender-skript

Vid något tillfälle släppte Qlik ett mer eller mindre standardskript för att generera upp en kalender. Skriptet blev snabbt populärt och spred sig i Qlik-världen. Skriptet går ut på att hitta det första och sista datumet i datumfältet och sedan generera alla dagar där mellan samt dess kalendervärden. Kalendervärdena lagras i en separat tabell, vilket effektiviserar om man har en stor faktatabell.


Här följer en kortare version av Qliks kalender-skript:

// Ladda in faktatabellen
Fakturor:
Load
    FakturaNr,
    KundNr,
    Fakturadatum,
    Fakturabelopp
from Fakturor