Kvartal

I Qlik skapar vi ofta en kalendertabell kopplad till ett datum i vår modell. Kalendertabellen innehåller fält som år, månad, vecka, veckodag och kvartal. Till de allra flesta kalenderfälten finns en motsvarande funktion - till exempel "year(Datum) as År" räknar ut vilket år ett Datum hör till och lägger det värdet i ett nytt fält År. Kvartal saknar dock en motsvarande funktion.


Det finns många sätt att räkna ut ett kvartal från ett datum och i detta inlägg ska vi gå igenom några olika alternativ. Målet är ett fält med värdena Q1, Q2, Q3 och Q4.


QuarterName()

En funktion som Qlik har är QuarterName(). Funktionen tar in ett datumfält som parameter och returnerar ett värde som "Jan-Mar 2020". Värdet är av typen dual - det har alltså både ett strängvärde och ett numeriskt tal bakom sig. Det numeriska talet i detta fall är det första datumet i kvartalet. "Jan-Mar 2020" har med andra ord det numeriska värdet 43831 som motsvarar 2020-01-01.


Eftersom funktionen inte returnerar Q1-Q4 motsvarar det inte vad vi är ute efter. Istället för vi hitta en egen lösning.


Länkad tabell

Ett förslag som brukar komma på våra utvecklarkurser är att skapa en tabell som länkas till kalendertabellen med på månad. Ett kreativt och bra förslag! Lösningen är enkel och fungerar jättebra om man inte har djupare kunskaper i scriptfunktioner. Tabellen skapas exempelvis med fasta värden i en så kallad Inline-tabell:


Quarter:

Load * INLINE [

Month, Quarter

1, Q1

2, Q1

3, Q1

4, Q2

5, Q2

6, Q2

7, Q3

8, Q3

9, Q3

10, Q4

11, Q4

12, Q4

];


Ett annat alternativ hade varit att läsa in samma data från en Excel-fil. I vår datamodell kan vi nu se den nya kvartalstabellen kopplad till kalendertabellen.



Denna enkla metod har ingen större nackdel utöver att det är några extra rader att skriva.


If-satser

När jag hjälper kunder som utvecklar själva ser jag ibland en lösning med if-satser av olika slag. Även denna metod är enkel och eftersom kalendertabeller oftast är små spelar det ingen roll att många operationer behöver utföras.


if(Month=1, 'Q1',

if(Month=2, 'Q1',

if(Month=3, 'Q1',

if(Month=4, 'Q2',

if(Month=5, 'Q2',

if(Month=6, 'Q2',

if(Month=7, 'Q3',

if(Month=8, 'Q3',

if(Month=9, 'Q3',

if(Month=10, 'Q4',

if(Month=11, 'Q4',

if(Month=12, 'Q4',

'NA'

)

)

)

)

)

)

)

)

)

)

) as Quarter


Åter är nackdelen med metoden att det är mycket kod att skriva även om den kan kopieras från lösning till lösning.


Att beräkna kvartal

Den smidigast metoden är att beräkna kvartalsvärdet från månadsvärdet direkt i kalendertabellen. Detta kan enkelt göras med beräkningen:


'Q' & ceil(month(Date)/3) as Quarter


Detta kräver bara en rad kod och är där med den mest kompakta lösningen av de vi nu sett. ceil()-funktionen returnerar närmsta övre heltal från ett decimaltal. För exempelvis augusti blir beräkningen:


month(Date): augusti (månad 8)

8/3 = 2.33333

ceil(2.3333) = 3

'Q' & 3 = Q3


Skriven av: Morgan Kejerhag

Morgan Kejerhag har arbetat med Qlik-plattformen sedan 2005 och är en av Sveriges mest erfarna konsulter. Under åren har Morgan arbetat med flertalet multinationella bolag där han lett arbetet i att bygga upp stora Qlik-miljöer såväl som små kunder. LinkedIn Kontaktuppgifter

Vill du har mer information?

Kontakta oss via informationen på vår kontakt-sida.

DrakeStone AB
Teknikringen 10

583 30 Linköping

Org: 556986-6956

© 2020 Drake Analytics