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%.
Snitt
Det finns ibland ytterligare ett förslag på hur uttrycket ska skrivas. Nämligen snittet av rabatt-% per rad:
avg(Rabattbelopp/Bruttobelopp)
Det här uttrycket fungerar förvisso för en enskild rad, men det kommer inte att räkna korrekt över flera rader. Om vi ser tillbaka på de order vi hade ovan och tittar på order 10002 och 10003.
Order 10002 har en rabatt på 40% och order 10003 har en rabatt på 50%. Snittet av dessa skulle alltså vara (40+50)/2 = 45%. Dock är detta värde inte viktat - större rader har en större inverkan på resultatet.
Det korrekta värdet fås, som vi tidigare konstaterat, genom att dela delsummor: (100+20)/(250+40) = 41%.

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