· 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, de début à fin par incréments de pas, 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.

À gauche, une table Orders de cinq commandes, deux pour Nord, surlignées, trois pour Sud. Au centre, sans sélection : Commandes 5, Panier moyen 64, CA 320. À droite, avec la sélection Region = Nord : les trois mêmes lignes, avec Commandes 2, Panier moyen 70 et CA 140.

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.

Une table dont la dimension est ValueLoop(0, 20, 5) : remise de 0, 5, 10, 15 et 20 %, et chiffre d’affaires après remise de 320, 304, 288, 272 et 256. En dessous, la dimension et la mesure utilisées.

La valeur de la remise est relue dans la mesure par un second appel à ValueLoop().

Capture d’un graphique en barres Qlik Cloud dont la dimension est ValueLoop(0, 20, 5) : cinq barres pour 0, 5, 10, 15 et 20, de hauteur décroissante, 320, 304, 288, 272 et 256, pour la mesure Sum(Amount) * (1 - ValueLoop(0, 20, 5) / 100).

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

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.