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.
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 :
- Sélectionnez la table Aggr() function disponible.
Le panneau des propriétés s'affiche. - Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : Sum(Sales)/Count([Order Number])
- Cliquez sur Appliquer.
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 :
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 :
- Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Cliquez sur Appliquer.
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))
Procédez comme suit :
- Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Cliquez sur Appliquer.
Pour plus d'informations, voir Aggr.
Pour plus d'informations, voir FirstSortedValue.