Aggregatiefuncties
De functiegroep met zogeheten aggregatiefuncties bestaat uit functies die meerdere veldwaarden als invoer aannemen en een enkel resultaat per groep retourneren, waarbij de groepering wordt gedefinieerd door een diagramdimensie of een group by-clausule in de scriptopdracht.
Aggregatiefuncties zijn onder meer Sum(), Count(), Min(), Max() en nog veel meer.
De meeste aggregatiefuncties kunnen zowel worden gebruikt in het script voor het laden van gegevens als in diagramuitdrukkingen, maar de syntaxis verschilt.
Aggregatiefuncties gebruiken in het script voor het laden van gegevens
Aggregatiefuncties kunnen alleen worden gebruikt binnen de opdrachten LOAD en SELECT.
Aggregatiefuncties gebruiken in diagramuitdrukkingen
De parameter van de aggregatiefunctie mag geen andere aggregatiefuncties bevatten, tenzij deze ingesloten aggregaties de kwalificatie TOTAL bevatten. Gebruik voor meer geavanceerde geneste aggregaties de geavanceerde functie Aggr, in combinatie met een opgegeven dimensie.
Een aggregatiefunctie aggregeren over de set mogelijke records die wordt gedefinieerd door de selectie. Maar er kan een alternatieve set records worden gedefinieerd door gebruik te maken van een set-uitdrukking bij set-analyse.
Zie: Set-analyse
Hoe aggregaties worden berekend
Een aggregatie doorloopt de records van een specifieke tabel en aggregeert de records in die tabel. Zo wordt bijvoorbeeld met Aantal(<Field>) het aantal records geteld in de tabel waar <Field> voorkomt. Als u alleen de unieke veldwaarden wilt aggregeren, moet u de distinct-clausule gebruiken, zoals Aantal(distinct <Field>).
Als de aggregatiefunctie velden uit verschillende tabellen bevat, doorloopt de aggregatiefunctie de records van het vectorproduct van de velden. Dit zorgt voor prestatieverlies, en om die reden moet u zulke aggregaties vermijden, met name als u grote aantallen gegevens gebruikt.
Aggregatie van sleutelvelden
Door de manier waarop aggregaties worden berekend, kunt u geen sleutelvelden aggregeren omdat daarbij niet duidelijk is welke tabel voor de aggregatie moet worden gebruikt. Als bijvoorbeeld het veld <Key> twee tabellen aan elkaar koppelt, is niet duidelijk of Aantal(<Key>) het aantal records van de eerste of tweede tabel moet retourneren.
Maar als u het component afzonderlijk gebruikt, is de aggregatie op de juiste manier gedefinieerd en kan deze vervolgens worden berekend.
Dus als u een sleutelveld in een aggregatiefunctie gebruikt zonder het component afzonderlijk retourneert Qlik Sense een aantal waar u mogelijk niets aan hebt. De oplossing is in dit geval om het component afzonderlijk of een kopie van de sleutel te gebruiken – een kopie die alleen in één tabel voorkomt.
In de volgende tabellen is ProductID bijvoorbeeld de sleutel tussen de tabellen.
Count(ProductID) kan zowel geteld worden in de tabel Products (die maar één record per product heeft – ProductID is de primaire sleutel) of het kan in de Details-tabel geteld worden (die waarschijnlijk meerdere records per product heeft). Als u het aantal verschillende producten wilt tellen, moet u Count(distinct ProductID) gebruiken. Als u het aantal rijen in een specifieke tabel wilt tellen, moet u de sleutel niet gebruiken.