TUTORIEL · QLIK SENSE

Les fonctions utiles de Qlik

Above, Below, RangeSum, Pick, Match, WildMatch, Rank, Dual et bien d’autres : les fonctions à connaître pour construire des expressions efficaces.

La boîte à outils des expressions Qlik

Qlik possède énormément de fonctions. Pour choisir une expression, commence par préciser ce que tu souhaites obtenir : transformer une valeur, résumer des enregistrements, consulter une autre ligne du tableau ou calculer sur plusieurs résultats successifs. Ces quatre besoins correspondent notamment aux fonctions scalaires, aux agrégations, aux fonctions inter-enregistrements et aux fonctions Range. Cette grille de lecture s’inspire des familles décrites par Henric Cronström (HIC), mais le parcours proposé ici part de situations concrètes rencontrées dans les applications Qlik.

Nous allons les regrouper par usage : comparer des lignes, construire des cumuls, choisir une valeur, tester du texte, gérer les NULL, classer, formater et manipuler des dates.

Une expression courte et lisible est presque toujours préférable à une construction compliquée équivalente.

Exemple

ObjectifChoisir la bonne fonction au bon momentavec des exemples directement réutilisables
Inter-recordAbove · Below · RowNo
LogiqueIf · Pick · Match · WildMatch
PlagesRangeSum · RangeAvg
AutresAlt · Coalesce · Class · Dual · dates

Above() — regarder la ligne précédente

Above() évalue une expression sur une ligne située au-dessus de la ligne courante dans le segment de colonne. Sans offset, elle regarde la ligne précédente.

C’est une fonction incontournable pour comparer une période à la précédente, calculer une variation ou alimenter un cumul.
Exemple ultra simple

Ton tableau affiche : Janvier = 100 €, Février = 120 €, Mars = 90 €.

Sur la ligne Février, Above(Sum(CA)) vaut 100 €, car Qlik regarde la ligne juste au-dessus. Donc Sum(CA)-Above(Sum(CA)) donne +20 €.

Sur Mars, Above vaut 120 €, donc la variation vaut -30 €.

Above() dépend de l’ordre des lignes. Ne confonds pas ordre d’affichage et calendrier : si une période disparaît après une sélection, Above() se reporte sur la ligne visible qui la précède, même si les deux dates ne se suivent pas. Le tri et les valeurs dimensionnelles affichées font donc partie du calcul.

Exemple

VariationSum(CA) - Above(Sum(CA))écart entre la ligne courante et la précédente
PrécédentAbove(expr)
2 lignes avantAbove(expr,2)
CouranteAbove(expr,0)

Below() — regarder la ligne suivante

Below() est le pendant d’Above() : il évalue l’expression sur une ligne située sous la ligne courante.

Il est utile lorsque le calcul doit se projeter vers la période ou la ligne suivante plutôt que revenir vers la précédente.

Comme Above(), Below() travaille sur les segments de colonne et dépend du tri.

Exemple

SuivanteBelow(Sum(CA)) - Sum(CA)écart entre la prochaine ligne et la ligne courante
SuivanteBelow(expr)
OffsetBelow(expr,n)
Sens inverseOffset négatif possible

RangeSum() + Above() — le cumul

RangeSum() additionne une plage de valeurs. Associée à Above(), elle permet de construire très simplement un cumul glissant ou progressif.

Above(Sum(CA),0,RowNo()) renvoie une plage allant de la ligne courante jusqu’au début du segment ; RangeSum() additionne cette plage.
Lis la formule de l’intérieur vers l’extérieur

Sum(CA) calcule le CA de la ligne. Above(...,0,RowNo()) fabrique une liste : ligne actuelle + toutes les lignes précédentes. Enfin RangeSum(...) additionne cette liste.

Jan = 100, Fév = 120, Mars = 90 → cumul Mars = 100 + 120 + 90 = 310 €.

RangeSum() traite les valeurs non numériques comme 0, ce qui est souvent plus pratique qu’une addition classique.

Exemple

CumulRangeSum(Above(Sum(CA),0,RowNo()))cumul progressif dans l’ordre du graphique
PlageAbove(...,0,count)
SommeRangeSum(...)
Count dynamiqueRowNo()

RangeAvg() — moyenne mobile

RangeAvg() calcule la moyenne d’une plage. Avec Above(), on obtient une moyenne mobile sur les dernières périodes.

Par exemple, une moyenne mobile sur trois mois utilise la valeur courante et les deux lignes précédentes.

La taille de fenêtre peut être remplacée par une variable pour rendre le calcul paramétrable.

Exemple

3 périodesRangeAvg(Above(Sum(CA),0,3))moyenne de la période courante et des deux précédentes
Fenêtre3 lignes
SourceAbove()
CalculRangeAvg()

RowNo() — connaître la position

RowNo() renvoie le numéro de la ligne courante dans le segment de colonne. Avec TOTAL, la numérotation porte sur la colonne entière.

On l’utilise souvent avec Above(), RangeSum() ou dans une condition particulière à la première ligne.

Les fonctions inter-record peuvent désactiver certains tris par mesure ; vérifiez toujours l’ordre final.

Exemple

Première ligneIf(RowNo()=1, 0, Sum(CA)-Above(Sum(CA)))évite le NULL de la première comparaison
SegmentRowNo()
Toute la colonneRowNo(TOTAL)
UsageCumul · conditions

Before() et After() — colonnes d’un tableau croisé

Before() et After() jouent horizontalement un rôle comparable à Above() et Below(), mais ils sont destinés aux tableaux croisés dynamiques.

Before() lit une colonne précédente du segment de ligne ; After() une colonne suivante. Dans les autres types de graphiques, ces fonctions renvoient NULL.

N’utilisez pas Before()/After() dans un tableau simple : utilisez Above()/Below() selon la structure.

Exemple

Évolution(Sum(CA)-Before(Sum(CA))) / Before(Sum(CA))variation par rapport à la colonne précédente d’un pivot
GaucheBefore()
DroiteAfter()
ObjetTableau croisé dynamique

If() — la condition de base

If() teste une condition et renvoie la valeur prévue pour le cas vrai. Si la condition est fausse, il renvoie la valeur alternative lorsqu’elle est fournie ; sinon, le résultat est NULL.

Elle est parfaite pour quelques conditions simples. Une cascade de nombreux If() devient toutefois difficile à lire et peut souvent être remplacée par Match(), Pick() ou une meilleure modélisation.

Quand vous commencez à imbriquer quatre ou cinq If(), demandez-vous s’il existe une solution plus claire.

Exemple

StatutIf(Sum(CA)>100000,'Objectif atteint','À suivre')deux résultats selon une condition
SyntaxeIf(condition, vrai [, faux])
UsageCondition simple
AttentionÉviter les cascades géantes

Match(), MixMatch() et WildMatch()

Match() cherche une correspondance exacte et renvoie sa position dans la liste. MixMatch() fait une comparaison insensible à la casse. WildMatch() ajoute les jokers * et ? et ignore aussi la casse.

Le résultat est un numéro : 0 si rien ne correspond, 1 pour le premier élément, 2 pour le deuxième, etc. Cela permet aussi de les utiliser directement comme condition.

WildMatch() est extrêmement pratique pour éviter une longue série de comparaisons OR.

Exemple

RechercheWildMatch(Produit,'PC*','Tablet*','Phone*')1, 2, 3 selon le motif trouvé ; 0 sinon
MatchExact + sensible à la casse
MixMatchExact + casse ignorée
WildMatchJokers * et ?

Pick() — choisir dans une liste

Pick() renvoie le nième élément d’une liste. Son intérêt devient évident lorsqu’on lui fournit le résultat numérique d’un Match().

Le couple Pick(Match(...),...) remplace élégamment de nombreux If() imbriqués et permet de faire correspondre une valeur à un libellé, une expression ou une couleur.
Pense à deux machines

Match(Region,'Nord','Sud','Est') cherche la région. Si Region = 'Sud', il répond 2.

Pick(2,'N','S','E') prend alors le 2e élément et répond 'S'.

Donc : Match trouve le numéro, Pick utilise ce numéro.

Pick() ne cherche rien lui-même : il choisit selon un numéro.

Exemple

Pick + MatchPick(Match(Region,'Nord','Sud','Est'),'N','S','E')transforme la position trouvée en valeur choisie
Pick(1,...)Premier élément
Pick(2,...)Deuxième
Partenaire idéalMatch()

Pick(Match()) — le duo à connaître

En combinant Match() et Pick(), on obtient une structure de correspondance très lisible : Match() détermine le numéro et Pick() renvoie la valeur associée.

C’est une technique particulièrement utile pour des libellés, des tris métier ou le choix d’une expression selon une catégorie.

Pour un mapping massif et stable, préférez néanmoins une table de mapping dans le script.

Exemple

LibelléPick(Match(Code,'A','B','C'),'Actif','Bloqué','Clôturé')équivalent compact d’une cascade de If()
Étape 1Match() → index
Étape 2Pick() → valeur
RésultatMapping dans l’expression

Alt() et Coalesce() — valeurs de secours

Alt() renvoie le premier paramètre ayant une représentation numérique valide, puis la valeur de secours finale. Coalesce() renvoie le premier paramètre qui n’est pas NULL.

Ils semblent proches mais ne répondent pas exactement au même besoin : Alt() est orienté interprétation numérique, Coalesce() vers la présence d’une valeur non NULL.

Coalesce() évite souvent des If(IsNull(...)) imbriqués.

Exemple

NULLCoalesce(TelephoneMobile, TelephoneFixe, 'Non renseigné')première valeur non NULL
AltPremier nombre valide
CoalescePremier non-NULL
UsageValeurs de repli

Class() — créer des tranches

Class() affecte une valeur numérique à un intervalle. C’est parfait pour créer rapidement des tranches d’âge, de montant, de délai ou de volume.

Le résultat est une valeur duale : Qlik affiche les bornes de la tranche et conserve une valeur numérique pour le tri. Le troisième argument, facultatif, remplace le symbole x dans le texte de la classe ; ce n’est pas un suffixe monétaire.

Pour des tranches métier irrégulières, une logique spécifique ou une table dédiée sera plus appropriée.

Exemple

TranchesClass(Montant,500)pour Montant = 1275, la classe affichée est 1000<=x<1500
ValeurMontant
Largeur500
3e argumentLibellé de x (facultatif)

Dual() — un texte et un nombre

Dual() associe une représentation texte à une valeur numérique. Qlik affiche le texte mais peut trier ou calculer avec la valeur numérique.

C’est très utile pour imposer un ordre métier à des libellés comme Faible, Moyen, Élevé ou pour fabriquer des libellés de période correctement triés.

Beaucoup de valeurs Qlik, notamment certaines dates et résultats de Class(), exploitent déjà le principe des valeurs duales.

Exemple

PrioritéDual('Élevée',3)affiche « Élevée » mais conserve la valeur numérique 3
AffichageTexte
Tri/calculNombre
UsageOrdre métier

Only() — une seule valeur ou NULL

Only() renvoie une valeur lorsqu’il n’existe qu’une seule valeur possible dans le contexte d’agrégation. S’il en existe plusieurs, le résultat est NULL.

C’est très utile pour afficher une information seulement lorsque la sélection est non ambiguë.

Only() est aussi un bon révélateur d’un contexte plus large que prévu.

Exemple

SélectionOnly(Annee)affiche 2026 si une seule année est possible, sinon NULL
1 valeurValeur retournée
PlusieursNULL
UsageContexte / sélection

Min(), Max() et FirstSortedValue()

Min() et Max() trouvent les extrema numériques. FirstSortedValue() permet de récupérer une valeur associée à un ordre de tri, par exemple le produit correspondant au plus gros chiffre d’affaires.

C’est une distinction importante : Max(Sum(CA)) cherche une valeur maximale dans un contexte adapté ; FirstSortedValue() sert à récupérer le libellé associé au classement.

En cas d’ex æquo, FirstSortedValue() peut renvoyer NULL selon le contexte : testez les égalités.

Exemple

Top produitFirstSortedValue(Produit,-Aggr(Sum(CA),Produit))renvoie le produit classé sur le CA décroissant
Min/MaxValeur extrême
FirstSortedValueValeur associée au tri
Signe -Tri décroissant

Rank() — classer les résultats

Rank() renvoie le rang d’une expression parmi les lignes d’un segment de colonne. Il permet de créer des classements dynamiques qui réagissent aux sélections.

On l’utilise souvent sur une mesure agrégée, par exemple Rank(Sum(CA)), avec différentes options de représentation selon le besoin.

Comme les autres fonctions inter-record, le contexte et la segmentation du graphique sont essentiels.

Exemple

ClassementRank(Sum(CA))rang du CA dans le contexte du graphique
MesureSum(CA)
RésultatRang
ContexteDépend des dimensions/sélections

Concat() — regrouper du texte

Concat() agrège plusieurs valeurs textuelles dans une seule chaîne avec un séparateur. Avec DISTINCT, on peut éliminer les doublons.

Très pratique pour afficher une liste de valeurs sélectionnées, de produits ou de catégories dans un KPI ou une infobulle.

Une liste très longue devient vite illisible : pensez à limiter son usage à des ensembles raisonnables.

Exemple

ListeConcat(DISTINCT Region, ', ')PACA, Occitanie, Bretagne…
AgrégationTexte
Séparateur', '
OptionDISTINCT

Num(), Date() et Timestamp() — maîtriser l’affichage

Num(), Date() et Timestamp() servent principalement à formater la représentation d’une valeur numérique ou temporelle sans changer la logique métier sous-jacente.

Qlik stocke les dates comme des nombres avec une représentation formatée. Comprendre cette dualité évite énormément d’erreurs de comparaison et d’affichage.

Ne confondez pas formatage et interprétation : Date#() et Num#() servent à interpréter du texte, Date() et Num() à formater une valeur.

Exemple

DateDate(DateCommande,'DD/MM/YYYY')formate la représentation de la date
NumNombre
DateDate
TimestampDate + heure

MonthStart(), AddMonths() et InMonth()

Les fonctions de date Qlik permettent d’éviter beaucoup de calculs manuels. MonthStart() ramène au début du mois, AddMonths() décale une date et InMonth() teste l’appartenance à un mois relatif.

Elles sont particulièrement utiles pour les périodes glissantes, comparaisons N/N-1 et bornes de Set Analysis.

Pour les applications complexes, un calendrier maître bien construit reste préférable à une multiplication de calculs de dates.

Exemple

Mois précédentMonthStart(AddMonths(Today(),-1))premier jour du mois précédent
Début de moisMonthStart()
DécalageAddMonths()
Test relatifInMonth()

GetSelectedCount() et GetFieldSelections()

Ces fonctions permettent d’interroger les sélections de l’utilisateur. GetSelectedCount() compte les valeurs sélectionnées d’un champ ; GetFieldSelections() en fournit une représentation textuelle.

Elles servent à adapter un titre, afficher un avertissement ou conditionner un objet selon l’état de sélection.

Évitez de faire dépendre toute la logique métier de l’interface des sélections ; utilisez-les surtout pour améliorer l’expérience.

Exemple

TitreIf(GetSelectedCount(Annee)=1,'Année : '&GetFieldSelections(Annee),'Plusieurs années')titre dynamique selon la sélection
CompterGetSelectedCount()
AfficherGetFieldSelections()
UsageUX dynamique

Sum(), Count(), Avg()… — les agrégations

Quand un tableau regroupe plusieurs interventions par service, une mesure comme Sum(Montant) doit produire un seul résultat par service. C’est le rôle des agrégations telles que Sum(), Count(), Avg(), Min(), Max(), Only() et Concat(). Cette distinction entre niveaux de calcul est également développée par HIC.

Trois interventions facturées

Un service facture 40 €, 65 € et 75 €.

Sum(Montant) → 180 €
Avg(Montant) → 60 €
Min(Montant) → 40 €
Max(Montant) → 75 €.

Dans un graphique, la dimension décide sur quelles lignes cette réduction est faite.

HIC rappelle qu’une expression de mesure doit généralement aboutir à une seule valeur pour chaque cellule du graphique.

Exemple

PrincipePlusieurs lignes → une valeurc’est le rôle d’une agrégation
SumSomme
CountCompte
AvgMoyenne
OnlyUne valeur unique sinon NULL

Count() ou Count(DISTINCT) ? — le piège classique

Avant de compter, décide ce que représente ton indicateur : des lignes d’activité ou des objets métier distincts. Count(Champ) compte les occurrences non NULL du champ, tandis que Count(DISTINCT Champ) ne retient qu’une occurrence par valeur. HIC rappelle notamment la vigilance nécessaire sur les champs clés.

Exemple de support

Le ticket T42 possède 3 interventions ; le ticket T43 en possède 2. Le journal d’interventions contient donc 5 lignes.

Count(TicketID) → 5 dans cette table d’interventions.

Count(DISTINCT TicketID) → 2 tickets différents.

Si TicketID est une clé partagée par plusieurs tables, Count(TicketID) peut compter des occurrences à un grain différent de celui attendu. Pour compter des tickets uniques, utilise DISTINCT ; pour compter des interventions, compte un identifiant propre à la table des interventions.

Exemple

Nombre de commandesCount(DISTINCT TicketID)compte les tickets, même si chacun comporte plusieurs interventions
CountOccurrences non NULL
Count DISTINCTValeurs uniques
RéflexeIdentifier le grain attendu

Avg() — quelle moyenne veux-tu vraiment ?

La moyenne doit toujours être rattachée à une unité de calcul. Avg(Montant) mesure la moyenne des montants présents sur les lignes ; une moyenne mensuelle du chiffre d’affaires demande d’abord de regrouper ces lignes par mois. HIC illustre également cette différence de granularité.

Exemple de facturation

En janvier 2026, 4 interventions totalisent 150 €. En février 2026, 2 interventions totalisent 450 €.

La moyenne mensuelle est (150 + 450) / 2 = 300 €. En revanche, Avg(Montant) renverrait 100 € si les 600 € sont répartis sur les 6 lignes d’interventions.

Il faut donc calculer le total par mois, puis la moyenne des totaux.

Utilise un identifiant de période unique (par exemple AnnéeMois) plutôt que le seul nom du mois. Les mois sans données ne sont pas inclus automatiquement : décide si tu veux les compter comme des mois à zéro.

Exemple

Moyenne par moisAvg(Aggr(Sum(Montant), MoisID))MoisID doit distinguer janvier 2026 de janvier 2027
Question 1Quel est le grain des données ?
Question 2Moyenne par quoi ?
Deux niveauxAggr() si nécessaire

Calculer dans le script ou dans le graphique ?

Une transformation indépendante des sélections peut généralement être préparée dans le script. En revanche, une mesure qui dépend du contexte choisi par l’utilisateur doit rester dynamique. C’est un principe de conception également exposé par HIC.

Deux cas

WeekStart(DateIntervention) : le début de semaine d’une intervention ne change pas selon les filtres → calcul possible dans le script.

Rank(Sum(Montant)) : le classement des services varie avec la période sélectionnée → calcul à conserver dans un tableau ou diagramme.

La documentation Qlik recommande également de pré-calculer dans le script les mesures possibles au niveau de granularité le plus bas.

Exemple

RègleStatique → script · Dynamique → graphiquemoins de calculs inutiles au clic
Date → semaineStatique
ClassementDynamique
ObjectifPerformance + clarté

Above() et les périodes absentes — attention !

Une moyenne mobile calculée sur trois lignes n’est pas nécessairement une moyenne sur trois périodes calendaires consécutives. Si le tableau masque une période, Above() ne la reconstitue pas. Ce comportement est notamment décrit dans les travaux de HIC.

Exemple de suivi hebdomadaire

Le tableau affiche les semaines 31, 32 et 34, mais aucune ligne pour la semaine 33.

En semaine 34, Above(Sum(Montant)) reprend la valeur de la semaine 32, et non celle de la semaine 33.

Une moyenne sur trois lignes mélange alors les semaines 31, 32 et 34 : ce ne sont pas trois semaines consécutives.

Pour une véritable fenêtre calendaire, construis une dimension temporelle complète, contrôle les options d’affichage des périodes sans activité et vérifie le comportement sous sélection. Ne remplace pas systématiquement les périodes absentes par zéro : cela dépend de la mesure métier.

Exemple

À vérifierCalendrier complet + valeurs zéro si nécessaireles périodes absentes doivent exister dans le graphique si le calcul en dépend
AboveLigne précédente
PasPériode précédente
SolutionAfficher les périodes nécessaires

Quelle fonction choisir ?

Le bon réflexe est de partir du besoin : ligne précédente → Above(); cumul → RangeSum(Above()); choix par index → Pick(); correspondance → Match/WildMatch(); valeur de secours → Coalesce/Alt; tranche → Class(); ordre métier → Dual().

Puis vérifiez trois choses : la fonction dépend-elle du tri ? du type de graphique ? du contexte de sélection ? Ces trois questions expliquent une grande partie des résultats surprenants dans Qlik.

Ce tutoriel est une boîte à outils : revenez-y selon le problème rencontré plutôt que d’essayer de mémoriser toutes les fonctions.

Exemple

Réflexe SOSBIBesoin → fonction → contexte → tri → testcomprendre avant de complexifier
Comparer lignesAbove / Below
ChoisirPick / Match
CumulerRange*
SécuriserAlt / Coalesce

Références Qlik

Ce tutoriel croise la documentation officielle Qlik avec plusieurs articles pédagogiques de Henric Cronström (HIC), notamment « Aggregations and Function Classes », « The Above Function », « Accumulations », « Count or Count distinct? » et « Average – Which average? ». Les explications et mises en situation de SOSBI ont été rédigées pour ce tutoriel. Les noms de fonctions et expressions usuelles sont conservés lorsque la syntaxe Qlik l’exige. Les articles cités restent des références de fond, et non des textes reproduits.