Gå till huvudinnehåll

Nästlade aggregeringar

Ett fältnamn 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.

Tips: Använd Aggr()-funktionen i beräknade dimensioner om du vill skapa kapslade diagramaggregeringar på flera nivåer.

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:

  1. Välj den tillgängliga tabellen Aggr() function.
    Egenskapspanelen öppnas.
  2. Klicka på Lägg till kolumn och välj Mått.
  3. Klicka på symbolen 3.
    Uttrycksredigeraren öppnas.
  4. Ange följande: Sum(Sales)/Count([Order Number])
  5. Klicka på Tillämpa.

Tabell som visar genomsnittligt ordervärde per region.

Table showing average order value per region.

Tips: Du bör alltid försäkra dig om att dina data är formaterade på rätt sätt. I det här fallet ska vi i varje kolumn ändra Etikett så att den representerar beräkningen. I kolumnerna som innehåller ekonomiska värden ändrar vi Talformat till Valuta och Formatmönster till $ #,##0;-$ #,##0.

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:

Virtuell tabell av Aggr()-funktionen som visar genomsnittligt ordervärde för varje region, per chef.

table with AGGR function showing average order value for each region, per manager.

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:

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på symbolen 3.
    Uttrycksredigeraren öppnas.
  3. Ange följande: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Klicka på Tillämpa.

Tabell som visar region, genomsnittligt ordervärde och största genomsnittliga ordervärde för varje region, per chef.

Table showing region, average order value, and largest average order value for each region, per manager.

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))

Tips: En liten detalj i uttrycket är mycket viktig: minustecknet före Aggr()-uttrycket. I en FirstSortedValue()-funktion kan du ange sorteringsordningen för datamatrisen. Här anger minustecknet att Qlik Sense ska sortera från största till minsta.

Gör följande:

  1. Klicka på Lägg till kolumn och välj Mått.
  2. Klicka på Expression -symbolen.
    Uttrycksredigeraren öppnas.
  3. Ange följande: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Klicka på Tillämpa.

Tabell som visar region, genomsnittligt ordervärde, största genomsnittliga ordervärde för varje region och chefen som är ansvarig för det ordervärdet.

Table showing region, average order value, largest average order value for each region, and manager responsible for that order value.

Mer information finns i Aggr.

Mer information finns i FirstSortedValue.