Snödjup - en enkel Qlik Sense-app

I det här inlägget ska vi visa hur enkelt man kan bygga en enklare Qlik Sense-applikation från två Excel-filer. Appen ska visa antalet dagar med mer än 5cm snödjup under dec-feb per årtionde. Var det vitare vintrar förr?



Syftet med appen är att svara på frågan som uppkommer varje år vid fikabordet på jobbet - var det bättre vintrar med mer snö när vi var små? Så för att svara på detta ska vi läsa in information om snödjupet per dag för ett antal år bakåt. Vi tittar sedan på snittsnödjupet per dag under december-februari per år och årtionde.


Källan till data är SMHI. Om man vill komma åt väderdata löpande är det bästa att sätta upp en anslutning till SMHIs API:r, men i detta fall ska vi göra en engångsanalys och väljer därför att ladda ner data istället.


Gå till följande sida och välj en mätstation på kartan. När du klickar på mätstationen kan du se information om den samt länkar för nedladdning. Tänk på att det blir en intressantare mätning om stationen har en lång historik med data.



Ladda ner data för historik (första länken) och ladda även ner data för de senaste fyra månaderna (andra länken). Eftersom historiken sträcker sig fram till för tre månader sedan och det nya data har fyra månader historik kommer mängderna att överlappa varandra. Vi måste hantera detta sedan när vi läser in data så att vi inte för dubbla rader för en månad.


I mitt exempel väljer jag att hämta data från Malmslätt i utkanten av Linköping. Stationen kom i drift 1944 och är fortfarande aktiv. Det kommer att ge oss en lång historik att följa. Filen från den första länken sparar jag som SnödjupHistorik.csv och filen från den andra länken döper jag till SnödjupNy.csv.


I nästa steg ska vi lägga filerna någonstans där Qlik Sense kan läsa in dem. Beroende på om du använder Sense i Cloud eller i en lokal installation kan detta göras på olika sätt. I exemplet här kommer vi använda Qlik Cloud. Om du inte redan har tillgång till Qlik Cloud kan du utan kostnad sätta upp en miljö under en utvärderingsperiod. Klicka här för mer information.


Öppna Qlik Cloud och välj att skapa en ny applikation. Alternativet finns bara om du har en Professional-licens, vilket krävs för att kunna utveckla.



Ge appen ett lämpligt namn och välj sedan att gå in i skriptredigeraren.



Välj nu att läsa data från connectorn DataFiles. DataFiles används för filer som du antingen laddar upp själv eller sparar från skript. Ladda upp de två CSV-filerna till rutan som öppnas genom att dra och släppa en i taget till rutan. Markera sedan filen SnödjupNy.csv i fönstret och klicka på knappen Välj.



I det nya fönstret som visas klickar vi ur alla kolumner utöver Datum och Snödjup. Klicka på knappen "Infoga skript" och repetera sedan proceduren för nästa fil.



Nu ska du ha ett skript som ser ut så här:


Skriptet är en del av Qlik Sense som hanterar hur data läses in och transformeras. Filer kan också läsas in via Data Manager som är ett enklare gränssnitt. I detta fall använder vi skriptet eftersom vi behöver hantera att utesluta de överlappande datumen.


Lägg till en rad innan det sista semikolonet för den sista inläsningen - rad 31 i exemplet ovan. Raden ska filtrera informationen från SnödjupHistory.csv så att vi endast läser in datum som vi inte redan läst in från SnödjupNy.csv. Detta görs enklast med filtret "where not exists(Datum)".


Nu ska skriptet se hur så här (var noga med det sista semikolonets placering):


Eftersom vi vill mäta snödjupet under vintern ska vi nu välja att bara läsa ut data för månaderna december, januari och februari. Om du bor någonstans i Sverige där ni har snö under fler månader kan du förstås utöka villkoren i din applikation. Villkoret för månader bygger på att vi använder funktionen Month() som hämtar månadsvärdet från ett datum. Vi kan jämföra månaden med en lista på månader med funktionen match(). Enklast är du att jämföra månadsnumret som vi får genom att köra num() runt Month. Månadsnumret börjar på 1 för januari.


Lägg till följande kod i where-satser för att ta med december, januari och februari: match(num(month),12,1,2)


Nu ska vi ha denna kod i scriptet:



Klicka nu på knappen "Ladda om" så läses data in från csv-filerna till Sense. Klicka sedan på Analysera - Ark för att gå till layouten där vi kan bygga grafer etc.



Skapa en linjegraf och lägg till Datum som dimension och välj Snödjup med funktionen Avg som mått avg(Snödjup). Avg räknar snittet om det finns flera datarader bakom en punkt i grafen. Grafen som visas är inte den snyggaste, men du ska se en linje för ett antal dagar som får plats i grafen.



Problemet med grafen är att det är svårt att se en trend över tid. Datum-dimensionen är för detaljerad och vi behöver aggregera värden på en högre nivå. Låt oss prova med År! År kan räknas ut från ett datum med funktionen year(Datum). Många gånger lägger vi till ett nytt fält i scriptet och räknar ut året där eftersom det då är klart när det ska användas i en graf, men i detta fall håller vi det enkelt och räknar ut året i grafen. Detta kan vi göra med en uträknad dimension som börjar med ett "=". Formeln =year(Datum) kommer att ge oss året.


Nu ska grafen se ut så här:



Nu ser det bättre ut, men det är fortfarande svårt att se en trend i kurvan. Nästa steg blir att aggregera upp värdena till årtionde för att se om det säger mer. Årtionde kan räknas ut på flera sätt, men vi kan till exempel ta de första tre sifforna från ett år, multiplicera med 10 och lägga till texten "-talet".


Exempel: 2019

Tre första sifforna: 201

Multiplicera med 10: 201*10 = 2010

Lägg till texten "-talet": 2010-talet


Vi gör detta med formeln: =left(year(Datum),3)*10 & '-talet'

Observera att '-talet' måste stå inom enkla citationstecken.




Nu börjar det likna något! Vi kan förfina grafen lite genom att lägga till en rubrik, en etikett på måttet, visa datapunkter, multiplicera måttet med 100 för att få cm och lägga på en linjär trendlinje. Nu ser grafen ut så här:



Så om du är född på 80-talet eller tidigare och har växt upp i Linköping är sannolikheten stor för att du hade mer snö på vintern när du var barn.


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