TUTORIEL · QLIK SENSE

Comprendre le Set Analysis

34 exemples progressifs, du premier filtre aux recherches avancées, historique de sélection, ensembles naturels et syntaxe externe.

Introduction

Avant de filtrer un ensemble, partons de l’agrégation classique : Qlik additionne Montant dans le contexte des sélections courantes.

Exemple · Expression Qlik
Sum(Montant)

Le résultat dépend uniquement des sélections actives de l’utilisateur.

Sélection couranteAnnee = 2026 · Region = PACA
CalculSum(Montant)
RepèreSans Set Analysis, le contexte courant décide du périmètre.

Filtrer sur une valeur

Le modificateur impose Annee = 2026. Les autres sélections de l’utilisateur restent actives.

Exemple · Expression Qlik
Sum({<Annee={2026}>} Montant)

Cette expression calcule la somme des Montants uniquement pour l’année 2026, même si l’utilisateur a sélectionné d’autres années dans son application.

Sélection imposéeAnnee = 2026
Autres sélectionsConservées
EffetLa somme ne porte que sur 2026.

Filtrer sur plusieurs valeurs

La liste entre accolades sélectionne plusieurs valeurs possibles du même champ.

Exemple · Expression Qlik
Sum({<Annee={2025,2026}>} Montant)

La somme porte sur les lignes appartenant à 2025 ou 2026, tout en conservant les autres sélections actives.

Valeurs retenues2025 et 2026
Logique2025 OU 2026
EffetLes deux années participent au même calcul.

Exclure une valeur

L’opérateur -= retire une valeur de l’ensemble au lieu de la sélectionner.

Exemple · Expression Qlik
Sum({<Region-={'Sud'}>} Montant)

Le calcul retire Sud des valeurs de Region présentes dans l’ensemble de départ. Les autres sélections restent prises en compte.

ContexteToutes les régions possibles
Valeur retiréeSud
EffetLe Sud est exclu du calcul.

Ignorer une sélection

Un champ suivi de = sans valeur efface la sélection de ce champ dans le calcul.

Exemple · Expression Qlik
Sum({<Annee=>} Montant)

Le calcul ignore toute sélection faite sur Annee, mais continue de respecter les sélections sur les autres champs.

Sélection utilisateurAnnee = 2024
Champ neutraliséAnnee
EffetLe calcul devient indépendant de la sélection Annee.

Ignorer toutes les sélections

L’identifiant d’ensemble 1 représente l’ensemble complet des données, indépendamment de la sélection courante.

Exemple · Expression Qlik
Sum({1} Montant)

La somme est calculée sur toutes les données disponibles dans le modèle, sans tenir compte des sélections utilisateur.

Sélections activesIgnorées
Identifiant1
EffetLe calcul porte sur l’ensemble complet des données.

Recherche et comparaison

Une chaîne de recherche permet d’utiliser des opérateurs de comparaison dans le modificateur.

Exemple · Expression Qlik
Sum({<Montant={">=1000"}>} Montant)

Seuls les enregistrements dont Montant est supérieur ou égal à 1000 participent à la somme.

ConditionMontant >= 1 000
Exemples inclus1 250 · 2 310
EffetLes montants inférieurs à 1 000 sont écartés.

Valeur numérique : écrire un littéral sans quotes

Pour désigner une année précise, Annee={2026} utilise une valeur littérale non entourée de quotes. Ce choix est lisible pour un champ Année, mais les quotes ne constituent pas à elles seules une déclaration de type dans Qlik.

Exemple · Expression Qlik
Sum({<Annee={2026}>} Montant)

Qlik recherche une valeur dans le champ Annee. Le type effectif dépend du modèle de données, pas uniquement de la présence ou de l’absence de quotes dans le Set.

ChampAnnee
Valeur explicite2026 sans quotes
RepèreVérifier le contenu du champ ; les quotes ne fixent pas son type.

Littéral texte : utiliser les simples quotes

Sud est ici une valeur textuelle précise : un littéral. La bonne habitude consiste à l’entourer de simples quotes. Même lorsqu’un texte ne contient ni espace, ni accent, ni caractère spécial, les simples quotes rendent immédiatement visible qu’il s’agit d’une valeur texte exacte.

Exemple · Expression Qlik
Sum({<Region={'Sud'}>} Montant)

Règle SOSBI : pour un littéral texte, écrivez les simples quotes systématiquement. Cette convention évite les ambiguïtés, améliore la lecture des expressions et suit la distinction pédagogique mise en avant par HIC entre littéraux et recherches.

Nature du champRegion textuel
Valeur exacte'Sud'
RepèreUn littéral texte s’écrit avec des simples quotes, même sans espace ni accent.

2026 et '2026' : deux écritures à distinguer

Un code composé de chiffres peut être stocké comme texte, comme nombre ou comme valeur duale dans Qlik. Les simples quotes indiquent ici une correspondance littérale exacte et sensible à la casse, pas une conversion forcée du champ en texte.

Exemple · Expression Qlik
Sum({<CodeAnnee={'2026'}>} Montant)

Les écritures {2026} et {'2026'} peuvent correspondre à la même valeur affichée. La différence principale porte ici sur la manière de rechercher la valeur : les simples quotes expriment une correspondance littérale exacte. Vérifiez les valeurs réelles du champ et testez l’expression dans l’application.

Valeur expliciteAnnee={2026}
Correspondance exacteCodeAnnee={'2026'}
RepèreLes quotes précisent le mode de correspondance, pas à elles seules le type stocké.

Rechercher avec les wildcards * et ?

Dès que l’on utilise * ou ?, on ne désigne plus un littéral exact : on demande à Qlik d’effectuer une recherche dans les valeurs du champ. C’est pourquoi les motifs de recherche sont écrits entre doubles quotes.

Commence par

Exemple · Expression Qlik
Sum({<Produit={"PC-*"}>} Montant)

Le motif "PC-*" retient toutes les valeurs qui commencent par PC-. L’astérisque accepte ensuite zéro, un ou plusieurs caractères.

Contient

Exemple · Expression Qlik
Sum({<Produit={"*PORTABLE*"}>} Montant)

Avec un astérisque de chaque côté, Qlik recherche PORTABLE n’importe où dans la valeur. PC-PORTABLE-14 et PC-PORTABLE-16 correspondent au motif.

Se termine par

Exemple · Expression Qlik
Sum({<Produit={"*-16"}>} Montant)

Ici, * est placé au début : la partie précédente peut varier, mais la valeur doit se terminer par -16. PC-PORTABLE-16 et TEL-IPHONE-16 sont donc retenus.

Un seul caractère

Exemple · Expression Qlik
Sum({<Produit={"PC-PORTABLE-1?"}>} Montant)

Le ? remplace exactement un caractère. PC-PORTABLE-14 et PC-PORTABLE-16 correspondent ; PC-PORTABLE-100 ne correspond pas. * accepte une longueur variable, ? une longueur d’un seul caractère.

* représente zéro, un ou plusieurs caractères ; ? représente exactement un caractère. Dans les deux cas, le motif est une chaîne de recherche : on utilise donc les doubles quotes.

Les quatre cas ci-dessous montrent comment placer * ou ? selon ce que l’on cherche. L’objectif n’est pas de mémoriser quatre syntaxes différentes, mais de comprendre ce que représente chaque wildcard.

DonnéesPC-PORTABLE-14 · PC-PORTABLE-16 · PC-ECRAN-27 · TEL-IPHONE-16
Wildcards* = longueur variable · ? = un caractère
RepèreLes doubles quotes signalent une recherche, pas un littéral exact.

<Champ=> ou <Champ={}> : attention au piège

Ces deux écritures se ressemblent énormément, mais elles ne demandent pas la même chose à Qlik. Avec <Region=>, on retire la sélection du champ Region pour ce calcul : Region ne filtre plus le résultat. Avec <Region={}>, on définit au contraire une liste de valeurs vide pour Region.

Exemple · Expression Qlik
Sum({$<Region=>} Montant)

<Champ=> signifie « ne tiens pas compte de la sélection sur ce champ ». <Champ={}> signifie « aucune valeur pour ce champ ». Une paire d’accolades en plus change donc complètement le sens du Set.

Sélection activeRegion = Sud
Avec <Region=>La sélection Region est neutralisée
Avec <Region={}>Aucune valeur Region n’est retenue : ce n’est pas la même chose.

=, +=, -= et *= : remplacer ou modifier la sélection

Dans un modificateur, = remplace la sélection du champ par les valeurs indiquées. Les opérateurs implicites +=, -= et *= travaillent au contraire à partir de la sélection déjà présente : += ajoute, -= retire et *= conserve uniquement l’intersection.

Exemple · Expression Qlik
Sum({$<Produit+={'PC'}>} Montant)

Ici, Produit+={'PC'} ajoute PC aux produits déjà sélectionnés. C’est très différent de Produit={'PC'}, qui remplace la sélection du champ Produit par PC. Avant d’utiliser +=, -= ou *=, demandez-vous donc si votre calcul doit partir de la sélection courante.

Sélection ProduitECRAN
Produit+={'PC'}ECRAN + PC
Repère= remplace ; += ajoute ; -= retire ; *= intersecte avec la sélection courante.

Recherche numérique : les doubles quotes ne servent pas qu’au texte

Les doubles quotes indiquent une recherche, pas nécessairement une recherche textuelle avec un wildcard. Elles permettent aussi d’exprimer une condition numérique. Ici, Qlik recherche dans Annee toutes les valeurs comprises entre 2020 et 2026 inclus.

Exemple · Expression Qlik
Sum({$<Annee={">=2020<=2026"}>} Montant)

Cela complète la distinction entre valeurs littérales et recherches : {2026} désigne une valeur explicite, {'2026'} une correspondance littérale exacte et {">=2020<=2026"} une recherche numérique bornée.

ChampAnnee numérique
Recherche>=2020 et <=2026
RésultatToutes les années de 2020 à 2026 incluses sont retenues.

Recherche par expression : filtrer selon un calcul

Une recherche peut commencer par = et contenir une expression Qlik. La condition est alors évaluée pour les valeurs du champ recherché. Ici, on ne choisit pas les clients par leur nom : on recherche les clients pour lesquels Sum(Montant) dépasse 100 000.

Exemple · Expression Qlik
Sum({$<Client={"=Sum(Montant)>100000"}>} Montant)

C’est extrêmement puissant, mais à utiliser avec discernement : le résultat dépend du contexte dans lequel l’expression de recherche est évaluée. Pour SOSBI, la bonne pratique est de réserver cette syntaxe aux besoins réellement dynamiques et de documenter clairement la condition métier.

Champ recherchéClient
ConditionSum(Montant) > 100 000
RésultatSeuls les clients répondant au critère calculé sont retenus.

$1 et $_1 : exploiter l’historique des sélections

$ représente la sélection courante. $1 représente l’état de sélection précédent ; $2 remonte encore d’un cran. À l’inverse, $_1 désigne l’état suivant lorsqu’il existe dans l’historique. Ces identificateurs permettent de comparer un calcul avant et après une modification de sélection.

Exemple · Expression Qlik
Sum({$1} CA)

Exemple : l’utilisateur avait sélectionné Fournisseur = NovaTech, puis ajoute Produit = PC-PORTABLE. Sum({$1} CA) permet de recalculer le CA dans l’état précédent, avant cette dernière modification. À utiliser lorsque la comparaison avec l’historique de sélection a un vrai sens métier.

État courantFournisseur = NovaTech + Produit = PC-PORTABLE
État $1Fournisseur = NovaTech
UsageComparer le CA avant et après la dernière modification de sélection.

Favoris et Alternate States peuvent identifier un ensemble

Un identificateur de Set ne se limite pas à $ ou 1. Un favori enregistré ou un Alternate State nommé peut aussi fournir le contexte de départ d’une expression. C’est particulièrement utile pour comparer deux populations ou deux scénarios sans modifier la sélection principale.

Exemple · Expression Qlik
Sum({Comparatif} CA)

Imaginons un Alternate State nommé Comparatif dans lequel on sélectionne Fournisseur = DigiPro. Sum({Comparatif} CA) calcule le CA de cet état, indépendamment de la sélection courante. Avec un favori, le principe est similaire : le favori fournit un ensemble enregistré que l’expression peut réutiliser.

État nomméComparatif
Sélection dans cet étatFournisseur = DigiPro
EffetLe CA est calculé dans ce contexte nommé, pas dans la sélection courante.

Un Set Analysis ne rejoue pas les clics de l’utilisateur

C’est une subtilité essentielle : un modificateur de Set modifie le périmètre de calcul à partir de son ensemble de départ ; il ne simule pas une nouvelle série de clics dans les filtres. Les autres sélections compatibles ou incompatibles restent donc déterminantes.

Exemple · Expression Qlik
Sum({$<Produit={'PC-PORTABLE'}>} CA)

Si la sélection courante contient Client = Alpha et qu’Alpha n’a jamais acheté PC-PORTABLE, imposer Produit={'PC-PORTABLE'} ne va pas automatiquement remplacer Alpha par les clients qui achètent ce produit. L’intersection peut simplement devenir vide et retourner 0. Pour repartir d’un autre contexte, il faut le dire explicitement dans le Set.

Sélection couranteClient = Alpha
Set imposéProduit = PC-PORTABLE
PiègeSi Alpha n’achète pas ce produit, le résultat peut être vide : Qlik ne resélectionne pas d’autres clients.

Année, trimestre, mois : penser à neutraliser les champs temporels liés

Fixer Annee={2026} ne signifie pas forcément « toute l’année 2026 ». Si l’utilisateur a aussi sélectionné un mois, un trimestre ou une date, ces sélections continuent à restreindre le calcul. C’est l’un des pièges les plus fréquents des Sets temporels.

Exemple · Expression Qlik
Sum({$<Annee={2026}, Trimestre=, Mois=, Date=>} CA)

Pour calculer réellement le CA de toute l’année 2026, on impose Annee={2026} et on neutralise explicitement Trimestre, Mois et Date. Exemple : si Mars était sélectionné, Sum({$<Annee={2026}>} CA) peut ne calculer que mars 2026 ; la version ci-dessus restitue bien l’année complète.

ObjectifCA de toute l’année 2026
Sélection utilisateurMois = Mars
SolutionFixer Annee=2026 et neutraliser Trimestre, Mois et Date.

Variable et Dollar-sign expansion

La Dollar-sign expansion évalue Max(Annee) avant que le Set Analysis ne soit appliqué.

Exemple · Expression Qlik
Sum({<Annee={$(=Max(Annee))}>} Montant)

Le calcul utilise automatiquement l’année maximale disponible dans le contexte d’évaluation.

Années disponibles2024 · 2025 · 2026
Max(Annee)2026
EffetL’expression s’adapte automatiquement à l’année maximale.

Gérer une période de dates

La recherche délimite ici une plage dynamique allant du début du mois de la date maximale jusqu’à cette date maximale.

Exemple · Expression Qlik
Sum({<Date={">=$(=MonthStart(Max(Date)))<=$(=Max(Date))"}>} Montant)

Le résultat correspond au cumul du mois de la date maximale jusqu’à cette date, sous réserve du format numérique utilisé par le champ Date.

Dernière date12/09/2026
Période calculée01/09/2026 → 12/09/2026
EffetLe cumul couvre le début du mois jusqu’à la date maximale.

Fonction P() — valeurs possibles

P() renvoie les valeurs possibles d’un champ dans un ensemble. Ici, on récupère les clients possibles lorsqu’on impose Produit=A.

Exemple · Expression Qlik
Sum({<Client=P({1<Produit={'A'}>} Client)>} Montant)

La somme porte sur les Montants des clients ayant acheté le produit A. Ces clients peuvent ensuite être évalués sur l’ensemble du contexte externe.

Produit recherchéA
Clients possiblesAlice · Karim · Léa
EffetP() réutilise ces clients dans le Set externe.

Fonction E() — valeurs exclues

E() fait l’inverse de P() : elle renvoie les valeurs exclues du champ dans l’ensemble indiqué.

Exemple · Expression Qlik
Sum({<Client=E({1<Produit={'A'}>} Client)>} Montant)

Le calcul cible les clients exclus lorsque Produit=A — autrement dit ceux qui ne sont pas associés à A dans cet ensemble.

Produit recherchéA
Clients exclusMarc · Nina
EffetE() cible les clients non possibles pour A.

Intersection — A * B

* = intersection. On ne garde que la partie commune à A et B. Imagine deux cercles : seule leur zone de chevauchement reste.

Exemple · Expression Qlik
Sum({<Client=P({1<Produit={'A'}>} Client)*P({1<Produit={'B'}>} Client)>} Montant)
Clients de A
Lucas · Sonia · Abdel
Clients de B
Sonia · Abdel · Tristan
Résultat
Sonia · Abdel — présents dans les deux ensembles.

Différence — A - B

- = différence. On part de A et on retire ce qui appartient aussi à B. Attention : A-B n’est pas B-A.

Exemple · Expression Qlik
Sum({<Client=P({1<Produit={'A'}>} Client)-P({1<Produit={'B'}>} Client)>} Montant)
Clients de A
Serge · Sophie · Vincent
Clients de B
Vincent · Karine
Résultat
Serge · Sophie — A sans les clients de B.

Union — A + B

+ = union. On rassemble tout ce qui appartient à A OU à B.

Exemple · Expression Qlik
Sum({$+1<Annee={2026}>} Montant)
Ensemble A
Alice · Lucas · Serge
Ensemble B
Serge · Sonia · Sophie
Résultat A + B
Alice · Lucas · Serge · Sonia · Sophie — réunion des deux ensembles.

Différence symétrique — A / B

/ = différence symétrique. On garde ce qui appartient à A ou à B, mais pas ce qui appartient aux deux à la fois.

Exemple · Expression Qlik
Sum({$ / 1<Annee={2026}>} Montant)
Ensemble A
Dudu · Dédé · Martial
Ensemble B
Martial · Karine · Tristan
Résultat A / B
Dudu · Dédé · Karine · Tristan — présents dans un seul des deux ensembles.

Set Analysis avec Aggr()

Aggr() crée une agrégation intermédiaire par Client. Le Set Analysis est appliqué à la somme interne avant le calcul de la moyenne.

Exemple · Expression Qlik
Avg(Aggr(Sum({<Annee={2026}>} Montant), Client))

On obtient la moyenne des montants 2026 agrégés par client, plutôt que la moyenne brute des lignes.

Étape 1Somme 2026 par Client
Étape 2Moyenne des sommes clients
EffetAggr() crée le niveau intermédiaire avant Avg().

Ensembles naturels et non naturels

HIC distingue les ensembles naturels, que l’on peut reproduire par une sélection, des ensembles non naturels, construits au niveau des enregistrements avec des opérateurs d’ensemble. Cette distinction devient importante dès que NULL ou des combinaisons d’ensembles entrent en jeu.

Exemple · Expression Qlik
Sum({$-<Client={'X'}>} Montant)

Dans cet exemple adapté pour SOSBI, on retire de l’ensemble courant les enregistrements associés au client X. Selon le modèle, des enregistrements dont Client est NULL peuvent rester dans le résultat, alors qu’un NULL ne peut pas être sélectionné directement dans une liste.

ObjectifExclure Client = X
ParticularitéLes NULL peuvent subsister
Conseil HICUn ensemble de records n’est pas toujours reproductible par sélection.

Les limites des ensembles non naturels

Le conseil essentiel de HIC : P() et E() doivent travailler avec des ensembles naturels, car ces fonctions doivent retourner un ensemble de valeurs de champ. Un ensemble non naturel ne possède pas toujours un ensemble de valeurs de champ bien défini.

Exemple · Expression Qlik
P({1<Produit={'A'}>} Client)

Seuls les ensembles naturels peuvent être recréés comme sélections interactives, stockés dans des favoris, modifiés de façon fiable et utilisés à l’intérieur de P() et E().

EnsembleProduit = A sur {1}
Valeurs retournéesClients possibles
Conseil HICP() et E() exigent un ensemble naturel.

Nouvelle syntaxe : Set externe

Depuis Qlik Sense August 2022, un Set peut aussi être placé au début d’une portée d’expression, donc à l’extérieur de la fonction d’agrégation. HIC souligne que cette écriture évite de répéter le même Set dans chaque agrégation.

Exemple · Expression Qlik
{<Annee={2026}>} Sum(Montant)

Le Set externe devient le contexte des agrégations qui suivent dans sa portée. C’est particulièrement utile pour réutiliser une mesure principale sans y coder le filtre en dur.

Contexte externeAnnee = 2026
AgrégationSum(Montant)
GainLe filtre n’est plus enfermé dans la mesure.

Un Set pour plusieurs agrégations

Avec l’ancienne écriture, il faudrait répéter le Set dans Sum() puis dans Count(). Le Set externe définit ici une seule fois le contexte 2026 pour les deux agrégations.

Exemple · Expression Qlik
{<Annee={2026}>} Sum(CA) / Count(DISTINCT Commande)

La formule calcule le chiffre d’affaires moyen par commande en 2026. Cette syntaxe rend les expressions longues plus lisibles et réduit les duplications.

Set écritUne seule fois
AgrégationsSum(CA) / Count(DISTINCT Commande)
GainMoins de répétition, meilleure lisibilité.

Portée lexicale avec parenthèses

HIC insiste sur la portée lexicale : les parenthèses peuvent limiter la zone affectée par un Set externe. Le Set doit être placé au début de la portée qu’il doit contrôler.

Exemple · Expression Qlik
({<Annee={2026}>} Sum(CA) / Count(Commande)) - Avg(Objectif)

Ici, le contexte Annee=2026 ne s’applique qu’au calcul entre parenthèses. Avg(Objectif), placé après la parenthèse, reste évalué dans son propre contexte.

Portée filtréeExpression entre parenthèses
Hors portéeAvg(Objectif)
RepèreLes parenthèses délimitent l’effet du Set externe.

Contexte et héritage des Sets

Un Set interne qui ne contient qu’un modificateur hérite du contexte externe. HIC oppose ce cas à un Set interne qui contient son propre identifiant d’ensemble : celui-ci repart alors du contexte défini par cet identifiant.

Exemple · Expression Qlik
{<Annee={2026}>} Sum({<Region={'PACA'}>} Montant)

Ici, le Set interne hérite de Annee=2026 et ajoute Region=PACA. En revanche, un Set interne commençant par 1 ou $ impose son propre point de départ.

Set externeAnnee = 2026
Set interneRegion = PACA
RésultatLe modificateur interne hérite du contexte externe.

Set externe et Aggr()

Point subtil relevé par HIC : le Set d’une agrégation externe n’est pas automatiquement hérité par l’agrégation interne d’un Aggr(). En revanche, un Set placé à l’extérieur de l’agrégation externe peut être hérité par les deux niveaux.

Exemple · Expression Qlik
{<Annee={2026}>} Avg(Aggr(Sum(Montant), Client))

Cette écriture place Annee=2026 au niveau externe de la portée : le contexte peut ainsi s’appliquer à Avg() et au calcul interne utilisé par Aggr().

Set externeAnnee = 2026
NiveauxAvg() puis Aggr()/Sum()
Conseil HICPlacer le Set hors de l’agrégation permet l’héritage aux deux niveaux.

Sources et attribution

Certains concepts avancés de ce tutoriel s’appuient sur les travaux pédagogiques de Henric Cronström (HIC), notamment sur ses articles consacrés au Set Analysis. Les explications, formulations et exemples présentés sur SOSBI ont été réécrits et adaptés en français ; ils ne constituent pas une traduction des articles originaux.