Count eller Count distinct?

Qlik har en aggregeringsfunktion, count(), som ofta används för att räkna saker i scriptet eller i grafer. Ibland använder man count och ibland count distinct och i detta inlägg ska vi gå igenom skillnaderna.



Count()

Funktionen count(Fältnamn) används för att räkna antalet rader med värden i ett fält. Till exempel kan vi räkna antalet rader i tabellen Product genom att använda funktionen count(ProductName) som med nedan rader skulle ge svaret 5.



Det kan skilja sig från antalet rader i den tabell som fältet finns i då fältet på vissa rader kan vara NULL - det vill säga att fältet inte har något värde för de raderna. Dessa räknas inte av funktionen och värdet för funktionen count(ProductName) nedan skulle bli 3.



Observera också att om samma värde finns med flera gånger i tabellen som fältet finns i räknas värdera också flera gånger. Värdet för count(Model) i exemplet nedan skulle bli 5, trots att det är samma värde på fyra av de fem raderna



Count distinct

Om man i stället vill räkna antalet olika värden i ett fält kan man använda count med en modifierare distinct. Detta säger helt enkelt till Qlik att endast räkna unika värden. NULL anses fortfarande inte vara ett värde och kommer inte att räknas.


Med count(distinct Model) i exemplet nedan kommer vi nu att få svaret 2.



Att räkna på nycklar

Nycklar är fält som finns i mer än en tabell och därmed kopplar samman de tabeller där fältet ingår. Eftersom fältet finns i fler än en tabell behöver man fundera på var beräkningen kommer att utföras. Anta till exempel att vi har en faktatabell (orderrader) och en dimensionstabell (produktinformation). Om vi räknar antalet produkter som count(ProductID) - vad är det då vi räknar? Är det antalet rader i produkttabellen? Antalet rader i orderradstabellen? Eller en kombination?


Svaret är en kombination där de rader som blir gemensamma mellan de två tabellerna endast räknas en gång. I följande exempel har vi två tabeller, TableA och TableB. Tabellerna har ett gemensamt fält Dim som därmed utgör en nyckel mellan tabellerna.



Som vi ser på den undre figuren finns vissa Dim-värden endast i TableA och andra endast i TableB. Om vi nu skulle räkna count(Dim) skulle vi få värdet 8. Värdet kommer från att det i Dim-fältet finns åtta rader även om antalet rader i de två tabellerna är 6+4=10. De gemensamma raderna räknas inte dubbelt. 3 rader från Table A, 2 rader från Table B och 3 gemensamma rader: 3+2+3 = 8.


Oftast vill man räkna rader i en av tabellerna. Då kan man antingen räkna på ett annat fält än en nyckel. Saknas ett sådant fält kan man enkelt skapa ett.


Hur många produkter har vi sålt?

En fråga som en användare skulle kunna ställa sig är hur många olika produkter som man sålt en under en viss period. Data består ofta av order, orderrader och artikelinformation. Med hjälp av orderdatum på ordern kan perioden tas fram och på orderraderna och artikelinformationen finns vilka artiklar som sålts. Om ett urval görs på period eller period ingår som dimension i en graf kommer data i order reduceras, vilket i sin tur reducerar orderrader och till sist produktinformation. Detta gör att vi inte får problem med att det är flera inblandade tabeller.


Sak vi använda count(ProductID) eller count(distinct ProductID)? I detta fall vill vi veta hur många olika produkter vi sålt vilket motsvarar att räkna antalet unika produkter. Således ska vi använda count(distinct ProductID).



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