Summan av procent

Ett lätt fel att göra och ett av de vanligaste under våra utvecklarkurser är att summera ett procentvärde istället för att beräkna procenten av två summeringar.


Det är mycket vanligt att vi ska beräkna ett procentvärde från två summeringar i datamodellen. Föreställ dig att vi vill räkna ut rabatten i kronor delat i bruttopriset (pris innan rabatt dragen) för att se hur mycket rabatt i procent vi gett olika kunder. Så hur ska vi skriva ett sådant uttryck? Eftersom vi i princip alltid har flera datarader som ska summeras upp totalt eller per värde i en dimension ska vi använda en aggregeringsfunktion, i detta fall sum(). Vi har då två alternativ till hur vi ska skriva uttrycket:


sum(Rabattbelopp/Bruttobelopp)


eller:


sum(Rabattbelopp)/sum(Bruttobelopp)


För att förstå vilket uttryck vi ska använda och hur de beräknas måste vi först förstå hur aggregeringar fungerar.


Aggreringar

En aggregering är en funktion som tar in många datarader och returnerar ett svar på den nivå som styrs av dimensioner eller totalt i avsaknad av dimensioner. Tänk som så att de unika värdena för dimensionen blir som rader i en tabell, och alla matchande detaljrader aggregeras upp på dimensionsvärdenivån. Vi behöver nästan alltid göra detta då data är mer detaljerat än dimensionen.


Det finns många aggregeringsfunktioner, men de vanligaste är sum(), avg(), median(), max() och min().


Inom parenteserna i aggregeringsfunktionen står uttryck som Qlik försöker utföra på varje rad i data. Till exempel sum(FörsäljningsbeloppOrdervaluta*Kurs_SEK) beräknar först allt inom parentesen på varje rad i data och först därefter summeras de valutaomvandlade värdena upp.


Rätt uttryck

Således innebär sum(Försäljningsbelopp/Budgetbelopp) per ÅrMånad att först beräknas Försäljningsbelopp/Budgetbelopp på respektive rad i data och därefter summeras de uträknade värdena.


Om man jämför detta med Excel kan man tänka att en ny kolumn läggs till och beräknas för varje rad. Sum() beräknar summan av en av kolumnerna - antingen de ursprungliga eller den nya beräknade.


I det första fallet beräknas rabatten först per rad och summeras sedan upp. Detta blir tokiga siffror och ofta över 100% rabatt. Uttryck: sum(Rabattbelopp/Bruttobelopp)



I det andra fallet beräknas först summan av rabattbelopp, sedan summan av Bruttobelopp och till slut görs en division mellan värdena. Detta ger rätt svar!


sum(Rabattbelopp)/sum(Bruttobelopp)


Rabatten ovan ska vara 250/1060 = 23.6%.