· Par Équipe HeyData
Série : Fonctions et mots-clés méconnus de Qlik Sense : une série · article 12 sur 13
ValueLoop et ValueList : les dimensions synthétiques de Qlik Sense
Un tableau de bord demande parfois une dimension qui n’existe dans aucune table : des indicateurs présentés en lignes (« Commandes », « Panier moyen », « CA »), ou une échelle de taux de remise pour une simulation. Le réflexe est d’ajouter une petite table au modèle. Qlik Sense offre plus léger : deux fonctions, ValueList() et ValueLoop(), fabriquent ces valeurs directement dans le graphique. L’aide Qlik parle de dimensions synthétiques.
Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense. Il s’appuie sur l’aide Qlik ; les liens sont en fin d’article.
Deux fonctions, deux façons de produire des valeurs
ValueList('Commandes', 'Panier moyen', 'CA') // les valeurs énumérées
ValueLoop(0, 20, 5) // 0, 5, 10, 15, 20
ValueList(v1, v2, …)renvoie les valeurs listées, le plus souvent des textes.ValueLoop(début, fin, pas)renvoie une suite de nombres, dedébutàfinpar incréments depas, 1 par défaut.
Utilisée comme dimension calculée, chacune crée une ligne par valeur. Deux règles de l’aide encadrent leur usage :
- une dimension synthétique ignore les sélections : ses valeurs sont toujours toutes affichées ;
- pour connaître la valeur de la ligne dans une mesure, on répète l’appel, avec exactement les mêmes paramètres.
ValueList() : des indicateurs en lignes
La seconde règle donne la recette d’une table d’indicateurs : la dimension énumère les libellés, la mesure reconnaît le libellé de la ligne et choisit le calcul correspondant.
Les lignes ne bougent pas, les valeurs suivent la sélection.
Pour ne pas réécrire la liste à chaque fois, et éviter qu’une faute de frappe ne casse la correspondance, on la place dans une variable :
SET vIndicateurs = ValueList('Commandes', 'Panier moyen', 'CA');
La dimension s’écrit alors =$(vIndicateurs), et la mesure :
Pick(Match($(vIndicateurs), 'Commandes', 'Panier moyen', 'CA'),
Count(OrderID),
Avg(Amount),
Sum(Amount))
Match() renvoie la position du libellé dans la liste, et Pick() le calcul placé à cette position : notre article sur Class, Match et Pick détaille ce duo. Les virgules contenues dans la variable ne posent pas de problème : elles ne gênent que les variables appelées avec des paramètres, comme l’explique notre article sur l’expansion dollar.
ValueLoop() : une simulation sans table
ValueLoop() produit une échelle de nombres. Combinée à une mesure qui la répète, elle donne une simulation : le chiffre d’affaires pour chaque taux de remise.
La valeur de la remise est relue dans la mesure par un second appel à ValueLoop().

Dans Qlik Cloud : la même simulation en graphique, sans aucune table de remises dans le modèle.
Le même principe sert à numéroter des lignes, ou à tracer une courbe de sensibilité : l’axe vient de ValueLoop(), la courbe de la mesure.
Quand préférer une table
Les dimensions synthétiques n’ajoutent rien au modèle de données, et c’est leur force. Elles ont aussi leurs limites :
- Rien à sélectionner. Les valeurs ne viennent d’aucun champ : impossible de filtrer sur « Panier moyen » ailleurs dans l’application.
- Une liste par graphique. Chaque objet répète l’appel ; une variable limite le risque, mais la liste reste dispersée.
- Une mesure qui grossit. Au-delà de quelques indicateurs, le
Pick()devient difficile à relire.
Quand la liste doit servir de filtre, ou être partagée par plusieurs feuilles, une petite table chargée dans le script, sans lien avec les autres tables, reste la bonne solution.
À retenir
- Une dimension sans champ. ValueList() énumère des valeurs, ValueLoop() génère une suite de nombres.
- Insensible aux sélections. Toutes les valeurs restent affichées ; les mesures, elles, suivent la sélection.
- Répéter l’appel pour lire la valeur. Dans la mesure, avec exactement les mêmes paramètres.
- Une variable pour la liste.
$(vIndicateurs)dans la dimension et dans la mesure garantit la correspondance. - Pick(Match()) pour choisir le calcul. Un calcul par libellé, dans l’ordre de la liste.
- Une table quand il faut filtrer. Une dimension synthétique ne se sélectionne pas.
Essayer dans Qlik Sense
Ce script charge les données des schémas en INLINE et crée les deux variables. Collez-le dans l’éditeur de chargement de données d’une application vide et rechargez. Créez ensuite les deux tables indiquées en commentaire.
// ValueLoop et ValueList dans Qlik Sense : script d'essai (HeyData)
// Collez-le dans l'éditeur de chargement de données d'une application vide, rechargez,
// puis créez les tables indiquées en commentaire.
Orders:
LOAD * INLINE [
OrderID, Region, Amount
1, Nord, 100
2, Nord, 40
3, Sud, 80
4, Sud, 60
5, Sud, 40
];
SET vIndicateurs = ValueList('Commandes', 'Panier moyen', 'CA');
SET vRemises = ValueLoop(0, 20, 5);
// Table 1 (premier schéma)
// Dimension : =$(vIndicateurs)
// Mesure : =Pick(Match($(vIndicateurs), 'Commandes', 'Panier moyen', 'CA'),
// Count(OrderID), Avg(Amount), Sum(Amount))
// Sans sélection : 5, 64, 320 ; avec Region = Nord : 2, 70, 140
//
// Table 2 (second schéma)
// Dimension : =$(vRemises)
// Mesure : =Sum(Amount) * (1 - $(vRemises) / 100)
// Résultat : 320, 304, 288, 272, 256
Sources
- Aide Qlik Cloud : Fonctions de dimension synthétique, principe et insensibilité aux sélections.
- Aide Qlik Cloud : ValueList et ValueLoop, syntaxe et rappel de la valeur dans une mesure.
Le texte et les exemples sont de HeyData. Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense : découvrir la série.