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.
Beperkingen:
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.
Bij het toewijzen van een naam aan een entiteit moet u niet dezelfde naam geven aan meer dan één veld, variabele of meting. Er geldt een strikte volgorde van prioriteit voor het oplossen van conflicten tussen entiteiten met identieke namen. Deze volgorde wordt weerspiegeld in objecten of contexten waarin deze entiteiten worden gebruikt. Deze volgorde van prioriteit is als volgt:
-
Binnen een aggregatiefunctie krijgt een veld voorrang op een variabele. Metinglabels zijn niet relevant in aggregaties en krijgen geen prioriteit.
-
Buiten een aggregatiefunctie krijgt een metinglabel voorrang op een variabele, die weer voorrang krijgt op een veld.
-
Daarnaast kan een meting buiten een aggregatie opnieuw gebruikt geworden door te verwijzen naar het label, tenzij het label is berekend. In die situatie krijgt de meting minder prioriteit om het risico te voorkomen dat de uitdrukking naar zichzelf verwijst, en in dit geval wordt de naam altijd eerst geïnterpreteerd als een metinglabel, vervolgens als een veldnaam en daarna als een variabelenaam.
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 Count(<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 Count(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 Count(<Key>) het aantal records van de eerste of tweede tabel moet retourneren.
Maar als u het component distinct 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 distinct retourneert Qlik Sense een aantal waar u mogelijk niets aan hebt. De oplossing is in dit geval om het component distinct 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.