TUTORIEL · QLIK SENSE

Comprendre Aggr()

Agrégations imbriquées, table virtuelle, granularité, Set Analysis, pièges et performances : Aggr() expliqué étape par étape.

Sources et attribution

La documentation Qlik et l’article de Henric Cronström (HIC) sont indiqués comme références techniques. Les formulations, jeux de données et exemples SOSQLIK ont été rédigés indépendamment et ne constituent pas une traduction de ces sources.

BIENVENUE

Comprendre Aggr()

Fondamentaux
Le principe en une expression
Deux niveauxMax(Aggr(Sum(Montant), Commande))1. total par commande → 2. plus grande commande
À quoi ça sert ?

Aggr() sert à effectuer une agrégation en deux étapes. Qlik calcule d’abord une mesure pour chaque valeur d’une ou plusieurs dimensions, puis une agrégation externe travaille sur le tableau de résultats obtenu.

La meilleure image mentale est celle d’une petite table virtuelle temporaire : Aggr() construit les lignes intermédiaires, puis Max(), Avg(), Sum(), Count() ou une autre fonction exploite ces lignes.

✓ Avantages

  • Résout de vrais calculs imbriqués
  • Permet de raisonner à un grain différent de celui du graphique

△ Points de vigilance

  • Plus complexe à lire et à déboguer
  • Peut coûter davantage en calcul sur de gros volumes
1 / 18

CHAPITRE 1

Visualiser la table virtuelle

Essentiel
Exemple Qlik Sense
CommandeSum(Montant)
C001450 €
C0021 250 €
C003780 €
À quoi ça sert ?

Aggr() renvoie un tableau de valeurs. Avec Aggr(Sum(Montant), Commande), Qlik produit conceptuellement une ligne par commande avec son montant total.

Cette table n’est pas visible dans l’application. Pour déboguer une expression difficile, il est souvent très efficace de recréer temporairement cette table dans un tableau Qlik avec les mêmes dimensions et la même mesure.
DonnéesCommande · Montant
Aggr()CMD-001 → 120 €CMD-002 → 80 €CMD-003 → 200 €
Avg()133,33 €agrégation externe

✓ Avantages

  • Excellent modèle mental
  • Facilite énormément le débogage

△ Points de vigilance

  • La table intermédiaire n’est pas directement visible
2 / 18

CHAPITRE 2

Trouver la plus grosse commande

Débutant
Exemple Qlik Sense
ExpressionMax(Aggr(Sum(Montant), Commande))Sum() calcule chaque commande ; Max() sélectionne la plus élevée
À quoi ça sert ?

Une commande peut contenir plusieurs lignes. Il faut donc d’abord additionner les lignes par commande, puis chercher le maximum parmi les totaux obtenus.

C’est le cas d’école parfait pour Aggr() : deux grains successifs et deux agrégations distinctes.

✓ Avantages

  • Expression fidèle au besoin métier
  • Structure facile à expliquer

△ Points de vigilance

  • Inutile si le modèle contient déjà le montant total de chaque commande
3 / 18

CHAPITRE 3

Moyenne des commandes

Débutant
Exemple Qlik Sense
Avec Aggr()Avg(Aggr(Sum(Montant), Commande))À comparer, selon le modèle, avec Sum(Montant) / Count(DISTINCT Commande)
À quoi ça sert ?

Pour calculer la moyenne des montants de commande, on peut moyenner la liste des totaux calculés par commande.

Mais HIC rappelle un point important : si le calcul peut être réécrit plus simplement sous forme de ratio, la version sans Aggr() est souvent plus lisible et plus rapide.

✓ Avantages

  • Très pédagogique pour comprendre le calcul en deux étapes

△ Points de vigilance

  • Peut être inutilement coûteux pour une moyenne exprimable par un ratio
4 / 18

CHAPITRE 4

Aggr() avec plusieurs dimensions

Intermédiaire
Exemple Qlik Sense
ExpressionAvg(Aggr(Sum(Montant), Produit, Mois))moyenne des ventes calculées au grain Produit × Mois
À quoi ça sert ?

La table virtuelle peut être construite sur plusieurs dimensions. Qlik produit alors une valeur par combinaison distincte des dimensions indiquées.

Par exemple, Aggr(Sum(Montant), Produit, Mois) crée conceptuellement une ligne par couple Produit–Mois.

✓ Avantages

  • Permet des grains analytiques très précis
  • Utile pour des moyennes ou extrema de sous-totaux

△ Points de vigilance

  • Le nombre de combinaisons peut devenir important
5 / 18

CHAPITRE 5

Le piège du grain

Important
Exemple Qlik Sense
CorrectGraphique : Année · Aggr : MoisAggr() est au même grain ou à un grain plus fin
À quoi ça sert ?

Dans un graphique, il faut comparer le grain des dimensions du graphique avec celui des dimensions utilisées dans Aggr(). Le grain d’Aggr() doit être identique ou plus fin que celui du graphique.

Un Aggr() au niveau Mois peut alimenter un graphique au niveau Année si Mois porte bien l’année et le mois. L’inverse — Aggr() par Année dans un graphique par Mois — peut produire des NULL ou affecter la valeur à un seul mois.

✓ Avantages

  • Évite une grande famille d’erreurs Aggr()

△ Points de vigilance

  • Demande de bien connaître la granularité réelle des champs
6 / 18

CHAPITRE 6

Agrégation interne et externe

Essentiel
Exemple Qlik Sense
Bonne structureAvg(Aggr(Sum(Montant), Client))Sum() = interne · Avg() = externe
À quoi ça sert ?

Le premier paramètre d’Aggr() doit être une mesure agrégée. Ensuite, lorsque le tableau virtuel contient plusieurs valeurs, une agrégation externe est normalement nécessaire pour obtenir le résultat final.

Omettre l’un de ces niveaux peut conduire Qlik à utiliser implicitement Only(), avec des NULL inattendus.

✓ Avantages

  • Structure claire et robuste

△ Points de vigilance

  • Les omissions peuvent produire des NULL difficiles à comprendre
7 / 18

CHAPITRE 7

Aggr() et Set Analysis

Avancé
Exemple Qlik Sense
ExempleMax({<Annee={2026}>} Aggr(Sum({<Annee={2026}>} Montant), Commande))le contexte est explicitement maîtrisé aux deux niveaux
À quoi ça sert ?

Avec Aggr(), le Set Analysis peut agir sur l’étape interne, sur l’étape externe ou sur le contexte de l’Aggr(). La bonne position dépend de l’étape à laquelle la condition doit réellement s’appliquer.

Une bonne règle de départ est de tester la condition aux deux niveaux lorsque le même ensemble doit gouverner tout le calcul, puis de vérifier le résultat. Pour les cas complexes, raisonnez étape 1 / étape 2 plutôt que de recopier mécaniquement le même Set.

✓ Avantages

  • Permet des calculs métier très fins

△ Points de vigilance

  • C’est l’une des combinaisons les plus délicates de Qlik
8 / 18

CHAPITRE 8

Où placer le Set ?

Expert
Exemple Qlik Sense
RéflexeCondition sur les données → interneCondition sur le tableau virtuel / résultat → externe
À quoi ça sert ?

Supposons que la valeur d’une commande ne doive compter que les produits « Chaussures ». Ce filtre doit intervenir pendant le calcul de la commande : il appartient donc à l’étape interne.

À l’inverse, si l’étape interne doit volontairement calculer un classement sur tous les produits et que vous ne voulez sélectionner qu’ensuite une catégorie, la condition appartient à l’étape externe.

✓ Avantages

  • Évite les Set Analysis qui semblent fonctionner mais calculent le mauvais périmètre

△ Points de vigilance

  • Nécessite de vérifier les résultats sur un jeu de données connu
9 / 18

CHAPITRE 9

Quand TOTAL suffit

Optimisation
Exemple Qlik Sense
Plus simpleSum(Montant) / Sum(TOTAL Montant)pas d’Aggr() pour un simple pourcentage du total
À quoi ça sert ?

Aggr() n’est pas nécessaire pour tous les calculs qui changent de périmètre. Pour un sous-total dans le même graphique, le qualificateur TOTAL est souvent la solution directe.

Par exemple, un pourcentage du total peut généralement être calculé avec Sum(Montant) / Sum(TOTAL Montant), sans construire de table virtuelle.

✓ Avantages

  • Expression plus courte
  • Meilleures performances potentielles

△ Points de vigilance

  • TOTAL ne remplace pas les vrais calculs à deux grains
10 / 18

CHAPITRE 10

Quand calculer dans le script

Architecture
Exemple Qlik Sense
StatiqueLOAD Client, Sum(Montant) ... GROUP BY Clientpré-calculer lorsque la valeur n’a pas besoin d’être dynamique
À quoi ça sert ?

Si une classification agrégée doit rester statique quelle que soit la sélection, elle est souvent mieux calculée dans le script de chargement avec Group By puis stockée comme attribut.

Exemple : classer définitivement les clients selon leur chiffre d’affaires annuel de référence. Si cette classe ne doit pas varier avec les sélections, inutile de la recalculer dynamiquement avec Aggr().

✓ Avantages

  • Réduit le coût de calcul côté interface
  • Simplifie parfois les expressions

△ Points de vigilance

  • Le résultat ne réagit plus dynamiquement aux sélections
11 / 18

CHAPITRE 11

DISTINCT et NODISTINCT

Avancé
Exemple Qlik Sense
SyntaxeAggr(NODISTINCT Sum(Montant), Client)ne pas utiliser NODISTINCT « pour essayer » : comprendre d’abord le grain attendu
À quoi ça sert ?

Par défaut, Aggr() travaille sur les combinaisons distinctes de dimensions. Le qualificateur NODISTINCT peut produire plusieurs valeurs pour une même combinaison selon la structure des données.

Avec une seule dimension, NODISTINCT peut renvoyer autant d’éléments que de lignes source. C’est puissant, mais à réserver aux cas où ce comportement est réellement voulu.

✓ Avantages

  • Permet certains calculs dépendant des lignes source

△ Points de vigilance

  • Peut multiplier fortement le tableau virtuel
  • Résultats plus difficiles à interpréter
12 / 18

CHAPITRE 12

Le tri dans Aggr()

Avancé
Exemple Qlik Sense
Plus forte progression annuelleMax(Aggr(Sum(CA) - Above(Sum(CA)), (Annee,(NUMERIC,ASCENDING))))résultat : 60, entre 2025 et 2026
À quoi ça sert ?

Certaines fonctions dépendantes de l’ordre nécessitent un tri explicite de la dimension dans le paramètre structuré d’Aggr(). Qlik permet d’indiquer un type de tri et un ordre.

Supposons les chiffres d’affaires annuels suivants : 2023 = 100, 2024 = 135, 2025 = 120 et 2026 = 180. Une fois les années triées dans l’ordre numérique croissant, les évolutions sont +35, -15 et +60.

✓ Avantages

  • Résultats déterministes pour les calculs sensibles à l’ordre

△ Points de vigilance

  • Syntaxe plus technique
  • Un mauvais champ de tri produit un résultat trompeur
13 / 18

CHAPITRE 13

Aggr() et Only() dans un tableau sans mesure

Avancé
Exemple Qlik Sense
Dimension calculéeAggr(Only({<Statut={'Ouvert'}>} Dossier), Dossier)résultat visible : 101 et 103
À quoi ça sert ?

Dans un tableau contenant uniquement des dimensions, une dimension calculée peut utiliser Aggr() et Only() pour ne conserver que les valeurs répondant à un critère.

Jeu de contrôle : dossier 101 ouvert, dossier 102 fermé et dossier 103 ouvert. L’expression est utilisée comme dimension calculée et l’option d’affichage des valeurs nulles doit être désactivée.

✓ Avantages

  • Permet un filtrage dynamique sans ajouter de mesure

△ Points de vigilance

  • Plus complexe qu’un champ préparé dans le script
  • Nécessite de masquer les valeurs nulles
14 / 18

CHAPITRE 14

Aggr() comme dimension calculée

Avancé
Exemple Qlik Sense
IdéeAggr(Count(DISTINCT Commande), Client)créer dynamiquement des groupes de clients selon leur activité
À quoi ça sert ?

Aggr() peut également servir à produire une dimension calculée issue d’une agrégation, par exemple pour regrouper les clients selon leur nombre de commandes.

C’est utile lorsque la catégorie doit rester dynamique et dépendre des sélections. Si elle est statique, préférez plutôt un champ calculé dans le script.

✓ Avantages

  • Classification dynamique selon les sélections

△ Points de vigilance

  • Coût CPU potentiellement important
  • Maintenance plus délicate qu’un champ du modèle
15 / 18

CHAPITRE 15

Performances : utiliser Aggr() à bon escient

Bonnes pratiques
Exemple Qlik Sense
RéflexeSimple d’abord → Aggr() si nécessairemesurer les performances avec des volumes réalistes
À quoi ça sert ?

Aggr() est puissant mais construit un résultat intermédiaire. Plus le nombre de combinaisons dimensionnelles est élevé et plus l’expression interne est complexe, plus le calcul peut devenir coûteux.

Évitez Aggr() pour une simple Sum(), Count(), un sous-total gérable avec TOTAL ou un calcul statique qui pourrait être préparé dans le script.

✓ Avantages

  • Aggr() reste irremplaçable pour certains besoins

△ Points de vigilance

  • Surcoût CPU possible sur des tableaux virtuels volumineux
16 / 18

CHAPITRE 16

Méthode de débogage

Pratique
Exemple Qlik Sense
Étapes1. dimensions → 2. mesure interne → 3. Set → 4. agrégation externevalider chaque niveau séparément
À quoi ça sert ?

Quand une expression Aggr() ne donne pas le résultat attendu, ne tentez pas de tout corriger en une seule fois. Matérialisez mentalement — ou réellement dans un tableau temporaire — l’étape interne.

Ajoutez les dimensions de l’Aggr() dans un tableau, affichez la mesure interne, contrôlez les sélections et le Set Analysis, puis seulement ensuite vérifiez l’agrégation externe.

✓ Avantages

  • Diagnostic beaucoup plus rapide
  • Permet de vérifier les chiffres métier

△ Points de vigilance

  • Demande parfois de créer un objet temporaire de contrôle
17 / 18

CHAPITRE 17

La checklist SOSQLIK

À retenir
Exemple Qlik Sense
Formule mentaleBesoin → Grain → Interne → Externe → Set → PerformanceAggr() devient alors une méthode, pas une formule magique
À quoi ça sert ?

Avant de valider un Aggr(), posez-vous six questions : ai-je vraiment deux niveaux d’agrégation ? Quel est le grain intermédiaire ? Mon agrégation interne est-elle correcte ? Quelle agrégation externe veux-je ? Où le Set doit-il agir ? Puis-je faire plus simple ?

Si ces six réponses sont claires, votre expression a de fortes chances d’être à la fois juste, compréhensible et maintenable.

✓ Avantages

  • Approche réutilisable sur presque tous les cas Aggr()

△ Points de vigilance

  • Aucun raccourci ne remplace la vérification du résultat
18 / 18