Summera om

Något som är mycket vanligt när vi skapar uttryck är att utföra någon form av aggregering av data, men endast på vissa rader. Till exempel vi vill summera försäljningen i år på en dashboard eller räkna antalet kunder som varit aktiva i år.



Uttryck kan ofta skrivas på fler än ett sätt. När vi började med Qlik för mer än 15 år sedan fick man skriva en if-sats inne i aggregeringsuttrycket:


sum(if(Year=year(today()),SalesAmount,0))


Det här uttrycket kommer att gå igenom alla rader i tabellen där SalesAmount finns och kolla om fältet Year är samma som innevarande år. Om de åren är lika läggs SalesAmount till summan och annars 0.


För att förbättra detta kom en del smarta tekniker. I scriptet kunde vi i kalendertabellen till exempel lägga till ett fält som innehöll 1 för alla datum i innevarande år och 0 för alla andra datum. Det gjorde att vi kunde skriva om uttrycket som:


sum(SalesAmount*FlagYTD)


Vi kallar ofta fält som innehåller 1 för saker som ska vara med och 0 för saker som inte ska vara med för flaggor. Uttrycket multiplicerar nu flaggan med SalesAmount vilket gör att värdet för SalesAmount tas med när flaggan är 1 och värdet blir 0 när flaggan är 0.


Dock hade dessa två exempel på uttryck ett gemensamt stort problem - alla rader av data måste beaktas. Tänk dig att du har en stor tabell med tio års historik av försäljningsdata. Det innevarande årets rader utgör en mindre del av datamängden, men beräkningen måste ändå gå igenom alla rader. För de flesta raderna returneras 0, men även detta tar lite tid och minne.


Med QlikView 8 kom en ny funktion som är en av de viktigaste tilläggen i Qliks plattform - set analysis. Med set analysis får vi möjlighet att applicera ett urval på datamängden som uttrycket ska hantera. Nu kunde vi säga till uttrycket i exemplet att först göra ett urval på innevarande år och sedan summera SalesAmount för de rader som återstår:


sum({$<FlagYTD={1}>} SalesAmount)


Syntaxen är lite krånglig, men när man väl lärt sig den är den smidig att hantera. Uttrycket gör först ett urval på värdet 1 i FlagYTD i en kalendertabell och då filtreras automatiskt raderna i försäljningstabellen med de associerade datumen - de som finns i innevarande år.


Beräkningen går nu mycket snabbare och då den behöver ta hänsyn till en mindre datamängd minskar också mängden använt minne.


Set analysis innehåller många smarta delar och vi ska återvända till dessa i fler inlägg.

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