måndag 14 september 2009

QlikView AGGR() vs SUM(TOTAL)

När man i QlikView vill ta fram andelar av en total brutet på en eller flera dimensioner så använder man ofta ett tillägg i en funktion som heter TOTAL. Detta tillägg fungerar inte i de fall man vill använda aggr() som en kalkylerad dimension. Nedan ska jag illustrera ett exempel på detta och vad man bör tänka på vid användandet av AGGR() och SUM(TOTAL).

I diagrammet nedan har vi två dimensioner: År och kundnummer.
Uttrycken i diagrammet visar följande:
  1. sum(pris): en vanlig summering av pris på de varor som varje kund har köpt år 2001.
  2. AGGR(NODISTINCT sum(pris),År): Summerar pris på de varor som alla 5 kunder har köpt år 2001.
  3. sum(total <År> Pris): Summerar pris på de varor som alla 5 kunder har köpt år 2001, d.v.s samma som uttryck 2.
Vill man ha andelar så kan man således använda följande formel:
sum(pris)/sum(total <År> Pris)



Antag nu att man vill byta ut dimensionen kund i diagrammet ovan mot ett rankingnummer på varje kund istället för kundnummer. Dimensionen kund byts ut mot en kalkylerad dimension som beräknar varje kunds rank:
Aggr(rank(sum(pris)),År,kund): summera pris per år och kund och sätt ett rankingnummer.
I diagrammet nedan behåller vi uttryck 2 och 3 på samma sätt som i det tidigare diagrammet. Nu kan vi se att uttryck 3 sum(total <År> Pris) inte stämmer trots att vi har en rad för varje kund och år.




Slutsats: Om aggr() används som kalkylerad dimension använd aggr() i uttryck för postöverskridande beräkningar.

Inga kommentarer: