Geneste aggregaties
Elke veldnaam in een diagramuitdrukking moet worden omsloten door precies één aggregatiefunctie. Als u aggregaties moet nesten, kunt u Aggr() gebruiken om een tweede aggregatieniveau toe te voegen. Aggr() bevat een aggregatiefunctie als een argument.
Een functie heeft altijd één aggregatieniveau
Een standaard app kan het volgende bevatten:
- één miljoen records in de gegevens
- honderd rijen in een draaitabel
- één KPI, in een meter of tekstvak
Al zijn ze verschillend in omvang, toch vertegenwoordigen deze drie aantallen wellicht alle gegevens. De aantallen vormen slechts verschillende aggregatieniveaus.
Aggregatiefuncties maken gebruik van de waarden van vele records als invoer en vatten deze samen tot een enkele waarde, die als samenvatting van alle records gezien kan worden. Er is een beperking: u kunt geen aggregatiefunctie binnen een andere aggregatiefunctie gebruiken. Normaal gesproken moet elke veldreferentie door precies één aggregatiefunctie worden omsloten.
De volgende uitdrukkingen werken wel:
- Sum(Sales)
- Sum(Sales)/Count(Order Number)
De volgende uitdrukking werkt niet omdat het een geneste aggregatie betreft:
- Count(Sum(Sales))
De oplossing hiervoor is de Aggr()-functie. Ondanks de naam is dit geen aggregatiefunctie. Dit is een 'veel-op-veel'-functie, zoals een matrix in de wiskunde. Hij zet een tabel met N-records om naar een tabel met M-records. De functie retourneert een reeks waarden. Je kunt hem ook bekijken als een virtuele strakke tabel met één meting, en een of meer dimensies.
Aggr() voor geneste aggregaties gebruiken
Aggr() retourneert een reeks van waarden voor de uitdrukking die is berekend via de opgegeven dimensie of dimensies. Bijvoorbeeld de maximale waarden van verkopen, per klant, per regio. Voor geavanceerde aggregaties wordt de functie Aggr() ingesloten in een andere aggregatiefunctie met behulp van de reeks resultaten van de functie Aggr() als invoer voor de aggregatie waarin de functie is genest.
Als hij wordt gebruikt, produceert de Aggr()-instructie een virtuele tabel, waarbij een uitdrukking is ingedeeld bij een of meer dimensies. Het resultaat van deze virtuele tabel kan dan verder geaggregeerd worden door middel van een aggregatiefunctie van buitenaf.
De grootste gemiddelde bestelwaarde berekenen
Laten we een eenvoudige Aggr()-instructie in een diagramuitdrukking gebruiken.
We willen onze totalen op regionaal niveau bekijken, maar ook twee complexere uitdrukkingen tonen:
- Grootste gemiddelde bestelwaarde per manager binnen elke regio.
- Manager verantwoordelijk voor de grootste gemiddelde bestelwaarde.
We kunnen de gemiddelde bestelwaarde voor elke regio gemakkelijk berekenen met behulp van een standaard uitdrukking Sum(Sales)/Count([Order Number]).
In de app, op het werkblad Nested Aggregations vindt u een tabel met de naam Aggr() function.
Doe het volgende:
- Selecteer de beschikbare Aggr() function-tabel.
Het eigenschappenvenster wordt geopend. - Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: Sum(Sales)/Count([Order Number])
- Klik op Toepassen.
Ons doel is om de hoogste gemiddelde bestelwaarde van elke regio te bepalen. We moeten Aggr() gebruiken, om Qlik Sense te vertellen dat we de gemiddelde bestelwaarde van elke regio, per manager willen vinden, en dat we daar dan de grootste van willen laten weergeven. Om de gemiddelde bestelwaarde van elke regio, uitgesplitst naar manager, te bepalen, moeten we deze dimensies in onze Aggr()-instructie opnemen:
Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)
Deze uitdrukking zorgt ervoor dat Qlik Sense een virtuele tabel die er als volgt uitziet:
Als Qlik Sense de afzonderlijke gemiddelde bestelwaarde voor elke regio, per manager berekent, moeten we de grootste van deze waarden vinden. We doen dit door de Aggr()-functie te verpakken met Max():
Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))
Doe het volgende:
- Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klik op Toepassen.
U kunt nu zien wat de grootse gemiddelde bestelwaarde was voor alle managers op regionaal niveau. Dit is de eerste van onze twee complexe uitdrukkingen! De volgende opdracht is, dat we de naam van de manager, verantwoordelijk voor deze grote gemiddelde bestelwaarden, naast de waarden zelf willen laten weergeven.
We gebruiken hiervoor dezelfde functie Aggr() die we eerder hebben gebruikt, maar dit keer in combinatie met de functie FirstSortedValue(). De FirstSortedValue()-functie vertelt Qlik Sense om ons de manager te leveren, behorend bij de specifieke dimensie, die in het tweede deel van de functie wordt aangegeven:
FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))
Doe het volgende:
- Klik op Kolom toevoegen en selecteer Meting.
- Klik op het symbool .
De uitdrukkingseditor opent. - Voer het volgende in: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klik op Toepassen.
Raadpleeg voor meer informatie Aggr
Raadpleeg voor meer informatie FirstSortedValue