Nästlade aggregeringar
Ett namn på ett fält som används i ett diagramuttryck ska omslutas av exakt en aggregeringsfunktion. Om du behöver nästla aggregeringar kan du lägga till en andra aggregeringsnivå med Aggr(). Aggr() innehåller en aggregeringsfunktion som ett argument.
En funktion ska alltid ha en aggregeringsnivå
En typisk app kan innehålla:
- en miljon dataposter
- hundra rader i en pivottabell
- en enda KPI, i en mätare eller textruta
Trots att omfattningen är så olika kan alla tre talen representera alla data. Talen är bara olika aggregeringsnivåer.
Aggregeringsfunktioner använder värden från många poster som indata och döljer dessa så att ett enda värde visas, en sammanfattning av alla poster. Det finns en begränsning: du kan inte använda en aggregeringsfunktion inuti en annan aggregeringsfunktion. Normalt måste varje fältreferens vara omsluten av exakt en aggregeringsfunktion.
Det här uttrycket kommer att fungera:
- Sum(Sales)
- Sum(Sales)/Count(Order Number)
Följande uttryck fungerar inte eftersom det är en nästlad aggregering:
- Count(Sum(Sales))
Detta kan lösas med en Aggr()-funktion. Trots namnet är det inte en aggregeringsfunktion. Det är en ”många-till-många”-funktion, som en matris inom matematiken. Funktionen omvandlar en tabell med N poster till en tabell med M poster. Den returnerar en matris med värden. Den kan även ses som en virtuell enkel tabell med ett mått och en eller flera dimensioner.
Använda Aggr() i nästlade aggregeringar
Aggr() returnerar en uppsättning värden för uttrycket, beräknade över den angivna dimensionen eller de angivna dimensionerna. Exempelvis det maximala värdet av försäljningen, per kund, per region. I avancerade aggregeringar omsluts Aggr()-funktionen av en annan aggregeringsfunktion, och matrisen med resultat från Aggr()-funktionen används som indata till den aggregering som den är nästlad i.
När den används ger Aggr()-satsen en virtuell tabell med ett uttryck som är grupperat efter en eller flera dimensioner. Den virtuella tabellens resultat kan sedan aggregeras vidare med en yttre aggregeringsfunktion.
Beräkna största genomsnittliga ordervärde
Låt oss använda en enkel Aggr()-sats i ett diagramuttryck.
Vi vill visa våra övergripande siffror på regionnivå, men vi vill också visa två mer komplexa uttryck:
- Största genomsnittliga ordervärde per chef inom varje region.
- Chefen som är ansvarig för det största genomsnittliga ordervärdet.
Vi kan enkelt beräkna det genomsnittliga ordervärdet för varje region med hjälp av ett standarduttryck: Sum(Sales)/Count([Order Number]).
Inne i appen, på arket Nested Aggregations, finns en tabell med namnet Aggr() function.
Gör följande:
- Välj den tillgängliga tabellen Aggr() function.
Egenskapspanelen öppnas. - Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: Sum(Sales)/Count([Order Number])
- Klicka på Tillämpa.
Målet är att ta fram det största genomsnittliga ordervärdet för varje region. Vi måste använda Aggr() för att tala om för Qlik Sense att vi vill hämta det genomsnittliga ordervärdet för varje region per chef, och sedan visa det största av dessa. För att vi ska få fram det genomsnittliga ordervärdet för varje region per chef, måste de här dimensionerna ingå i Aggr()-satsen:
Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)
Med det här uttrycket producerar Qlik Sense en virtuell tabell som ser ut så här:
När Qlik Sense beräknar det individuella genomsnittliga ordervärdet för varje region per chef, måste vi hitta det största av dessa värden. Det gör vi genom att innesluta funktionen Aggr() i Max():
Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))
Gör följande:
- Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klicka på Tillämpa.
Du kan se det största genomsnittliga ordervärdet för alla chefer på regionnivå. Det här är det första av våra två komplexa uttryck! Nästa krav är att namnet på cheferna som är ansvariga för dessa stora genomsnittliga ordervärden ska visas intill värdena.
Det uppnår vi genom att använda samma Aggr()-funktion som tidigare, men den här gången tillsammans med FirstSortedValue()-funktionen. Funktionen FirstSortedValue() talar om för Qlik Sense att vi vill ha chefen för den specifika dimensionen som anges i funktionens andra del:
FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))
Gör följande:
- Klicka på Lägg till kolumn och välj Mått.
- Klicka på symbolen .
Uttrycksredigeraren öppnas. - Ange följande: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klicka på Tillämpa.
Mer information finns i Aggr.
Mer information finns i FirstSortedValue.