Accéder au contenu principal

Agrégations imbriquées

Tout nom de champ figurant dans une expression de graphique doit être inclus dans une et une seule fonction d'agrégation. Pour imbriquer des agrégations, utilisez Aggr() pour ajouter un deuxième niveau d'agrégation. Aggr() contient une fonction d'agrégation en tant qu'argument.

Toujours un niveau d'agrégation dans une fonction

Une application type peut contenir :

  • un million d'enregistrements dans les données ;
  • une centaine de lignes dans un tableau croisé dynamique ;
  • une seule valeur KPI dans une jauge ou une zone de texte.

Même si leur magnitude est différente, l'ensemble des trois nombres peuvent tout de même représenter toutes les données. Les nombres sont simplement des niveaux d'agrégation différents.

Les fonctions d'agrégation utilisent les valeurs de nombreux enregistrements en entrée et les réduisent en une seule valeur qui peut être considérée comme une synthèse de l'ensemble des enregistrements. Il existe une seule restriction : vous ne pouvez pas utiliser de fonction d'agrégation à l'intérieur d'une autre fonction d'agrégation. Il faut généralement que chaque référence de champ soit intégrée dans une et une seule fonction d'agrégation.

Les expressions suivantes fonctionnent correctement :

  • Sum(Sales)
  • Sum(Sales)/Count(Order Number)

L'expression suivante ne fonctionne pas correctement, car il s'agit d'une agrégation imbriquée :

  • Count(Sum(Sales))

Pour résoudre le problème, il faut une fonction Aggr(). Contrairement à ce que son nom indique, il ne s'agit pas d'une fonction d'agrégation. Il s'agit d'une fonction « plusieurs à plusieurs », semblable à une matrice en mathématiques. Elle convertit un tableau contenant N enregistrements en un tableau contenant M enregistrements. Elle renvoie un tableau de valeurs. Elle peut également être considérée comme un tableau simple virtuel avec une mesure et une ou plusieurs dimensions.

Conseil: Si vous souhaitez créer des agrégations de graphiques imbriqués à plusieurs niveaux, utilisez la fonction Aggr() dans des dimensions calculées.

Utilisation de Aggr() pour les agrégations imbriquées

Aggr() renvoie un tableau de valeurs pour l'expression, calculées au moyen de la ou des dimensions définies. Par exemple, la valeur maximale de ventes, par client et par région. Dans les agrégations avancées, la fonction Aggr() est imbriquée dans une autre fonction d'agrégation, en utilisant un tableau de résultats provenant de la fonction Aggr() comme entrée pour l'agrégation dans laquelle elle est imbriquée.

En cas d'utilisation, l'instruction Aggr() produit un tableau virtuel avec une expression regroupée par une ou plusieurs dimensions. Le résultat de ce tableau virtuel peut ensuite être encore agrégé par une fonction d'agrégation externe.

Calcul de la valeur de commande moyenne la plus élevée

Utilisons une instruction Aggr() simple dans une expression de graphique.

Nous voulons afficher nos métriques générales au niveau régional, tout en affichant deux ou davantage d'expressions complexes :

  • Valeur de commande moyenne la plus élevée par manager dans chaque région.
  • Manager chargé de la valeur de commande moyenne la plus élevée.

Nous pouvons facilement calculer la valeur de commande moyenne pour chaque région à l'aide d'une expression standard Sum(Sales)/Count([Order Number]).

Dans l'application, sur la feuille Nested Aggregations, vous trouverez une table intitulée Aggr() function.

Procédez comme suit :

  1. Sélectionnez la table Aggr() function disponible.
    Le panneau des propriétés s'affiche.
  2. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  3. Cliquez sur le symbole 3.
    L'éditeur d'expression s'ouvre.
  4. Saisissez les éléments suivants : Sum(Sales)/Count([Order Number])
  5. Cliquez sur Appliquer.

Tableau indiquant la valeur de commande moyenne par région.

Table showing average order value per region.

Conseil: Comme meilleure pratique, assurez-vous que vos données sont formatées correctement. Dans ce cas, dans chaque colonne, nous allons modifier l'Étiquette pour qu'elle représente le calcul. Dans les colonnes contenant des valeurs monétaires, nous allons définir le Format des nombres sur Devise, et le Modèle de format sur $ #,##0;-$ #,##0.

Notre objectif est d'obtenir la valeur de commande moyenne la plus élevée pour chaque région. Nous devons utiliser Aggr() pour indiquer à Qlik Sense que nous souhaitons obtenir la valeur de commande moyenne pour chaque région, par manager, puis afficher la plus grande d'entre elles. Pour obtenir la valeur de commande moyenne pour chaque région, par manager, nous devons inclure ces dimensions dans notre instruction Aggr() :

Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)

Cette expression amène Qlik Sense à produire un tableau virtuel qui ressemble à ceci :

Tableau virtuel de la fonction Aggr() affichant la valeur de commande moyenne pour chaque région, par manager.

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

Lorsque Qlik Sense calcule les valeurs de commande moyennes individuelles pour chaque région, par manager, nous devons trouver la plus grande de ces valeurs. Pour ce faire, nous enveloppons la fonction Aggr() avec Max() :

Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))

Procédez comme suit :

  1. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  2. Cliquez sur le symbole 3.
    L'éditeur d'expression s'ouvre.
  3. Saisissez les éléments suivants : Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Cliquez sur Appliquer.

Tableau affichant la région, la valeur de commande moyenne et la valeur de commande moyenne la plus élevée pour chaque région, par manager.

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

Vous pouvez voir la valeur de commande moyenne la plus élevée pour tous les managers au niveau régional. Il s'agit de la première de nos deux expressions complexes ! Ensuite, nous devons pouvoir afficher le nom du manager chargé de ces valeurs de commandes moyennes élevées à côté des valeurs en question.

Pour ce faire, nous utilisons la même fonction Aggr() que précédemment, mais, cette fois-ci, avec la fonction FirstSortedValue(). La fonction FirstSortedValue() indique à Qlik Sense de nous fournir le manager pour la dimension spécifique indiquée dans la deuxième portion de la fonction :

FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))

Conseil: Il existe une partie petite, mais très importante, de l'expression : un symbole moins devant l'expression Aggr(). Dans une fonction FirstSortedValue(), vous pouvez spécifier l'ordre de tri du tableau de données. Dans ce cas, le symbole moins indique à Qlik Sense de trier les valeurs de la plus grande à la plus petite.

Procédez comme suit :

  1. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  2. Cliquez sur le symbole Expression .
    L'éditeur d'expression s'ouvre.
  3. Saisissez les éléments suivants : FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
  4. Cliquez sur Appliquer.

Tableau affichant la région, la valeur de commande moyenne, la valeur de commande moyenne la plus élevée pour chaque région et le manager chargé de cette valeur de commande.

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

Pour plus d'informations, voir Aggr.

Pour plus d'informations, voir FirstSortedValue.