· Par Équipe HeyData
Série : Fonctions et mots-clés méconnus de Qlik Sense : une série · article 3 sur 13
L’expansion dollar dans Qlik Sense : $(var), $(=…), $(#…) et les paramètres
$(vMarge), $(=Max(Year)), $(#vTaux) : la notation dollar est partout dans les applications Qlik, souvent copiée d’un projet à l’autre sans être vraiment comprise. Le principe tient pourtant en une phrase : l’expansion dollar remplace du texte par du texte, avant que le moteur n’évalue quoi que ce soit. Presque tous ses pièges en découlent.
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.
Un remplacement de texte
$(…) fonctionne comme une macro. Juste avant d’évaluer une instruction du script ou une expression de graphique, le moteur remplace chaque $(…) par le texte qu’elle produit. Il évalue ensuite le résultat, comme si vous l’aviez tapé.
Le moteur n’évalue que le texte obtenu après remplacement.
Trois formes coexistent :
$(vNom): le texte de la variable ;$(=expression): le résultat de l’expression, calculé puis converti en texte ;$(#vNom): la valeur numérique de la variable, écrite avec un point décimal.
Variables : SET garde le texte, LET calcule
Dans le script, SET stocke le texte tel quel, LET l’évalue d’abord :
SET vMarge = Sum(Amount) - Sum(Cost); // le texte de l'expression
LET vAujourdhui = Today(); // la date du jour, calculée au chargement
Pour une mesure réutilisable, SET est le bon choix : =$(vMarge) dans un graphique devient =Sum(Amount) - Sum(Cost), évaluée dans le contexte du graphique. Avec LET, le script tenterait de calculer Sum(Amount) hors de tout LOAD.
$(=…) : un calcul pour tout l’objet
$(=Max(Year)) est calculé une seule fois pour tout l’objet, dans l’état de sélection de cet objet, avant le calcul des lignes. Dans une table par année, chaque ligne reçoit donc le même texte, 2026. C’est ce qui rend l’expression utile dans un set analysis, et c’est aussi ce qui empêche de s’en servir pour « l’année de la ligne moins un » : notre article sur le set analysis avancé détaille ce piège.
L’aide Qlik signale une autre conséquence : une expansion simple ignore les états alternatifs, mais une expansion avec = s’évalue dans l’état de l’objet.
Les paramètres : $1 à $9
Une variable peut contenir des paramètres formels, $1, $2, etc., remplis à l’appel :
SET vMul = $1 * $2;
LET vResultat = $(vMul(3, 7)); // 21
SET vTexte = $(vMul(3, 7)); // le texte 3 * 7
$0 donne le nombre de paramètres reçus. Les paramètres en trop sont ignorés sans erreur ; un paramètre manquant laisse le $2 tel quel dans le texte.
Le piège de la virgule. Les paramètres sont séparés par des virgules, avant toute analyse. Un set analysis passé en paramètre, comme {<Year = {2025, 2026}>}, est donc coupé en deux. Écrivez la liste sans virgule quand c’est possible ({<Year = {">=2025<=2026"}>}), ou placez la partie qui contient des virgules dans une autre variable, appelée dans le corps de la première.
$(#…) : le séparateur décimal
Quand l’application utilise la virgule comme séparateur décimal, $(vX) produit 3,5. Placé dans un appel de fonction, ce texte devient deux arguments.
Avec $(vX), 3,5 devient deux nombres : 3 et 5.
$(#vX) écrit toujours le nombre avec un point décimal, voire en notation exponentielle pour les très grands ou très petits nombres. Si la variable ne contient pas de nombre, il renvoie 0. C’est la forme à utiliser dans un calcul, un appel de fonction ou un INLINE.
Inclure un fichier de script
La même notation inclut un fichier de script, pratique pour partager des fonctions ou des connexions entre applications :
$(Must_Include=lib://Scripts/commun.qvs);
Must_Include arrête le chargement si le fichier est introuvable, alors que Include l’ignore en silence. Préférez la première forme : une erreur visible vaut mieux qu’un script incomplet. Attention, l’aide précise qu’il ne faut pas d’espace autour du signe =.
À retenir
- Du texte avant le calcul. L’expansion remplace le texte, puis le moteur évalue le résultat.
- SET pour les expressions. LET calcule au chargement ; SET garde le texte pour le graphique.
- $(=…) une fois par objet. Le résultat est le même sur toutes les lignes.
- Attention aux virgules. Elles séparent les paramètres, et coupent un set analysis passé en argument.
- $(#…) pour les nombres. Un point décimal garanti, quel que soit le paramétrage régional.
- Must_Include plutôt qu’Include. Un fichier manquant doit arrêter le chargement.
Essayer dans Qlik Sense
Ce script reprend les exemples de l’article. Collez-le dans l’éditeur de chargement de données d’une application vide, choisissez l’exemple avec la variable vExemple, puis rechargez. Les résultats s’affichent dans le journal de chargement (TRACE) ou dans les tables indiquées.
// L'expansion dollar dans Qlik Sense : script d'essai (HeyData)
// Collez-le dans l'éditeur de chargement de données d'une application vide, choisissez
// l'exemple, rechargez, puis lisez le journal de chargement.
SET vExemple = 1; // 1 à 3
IF $(vExemple) = 1 THEN
// Exemple 1 : SET, LET et paramètres
SET vMul = $1 * $2;
LET vResultat = $(vMul(3, 7));
SET vTexte = $(vMul(3, 7));
SET vNbParam = $0;
LET vNb = $(vNbParam(1, 2, 3));
TRACE vResultat = $(vResultat) | vTexte = $(vTexte) | nombre de paramètres = $(vNb);
// Journal : vResultat = 21 | vTexte = 3 * 7 | nombre de paramètres = 3
END IF
IF $(vExemple) = 2 THEN
// Exemple 2 : des variables pour les graphiques (premier schéma)
Sales:
LOAD * INLINE [
Year, Amount, Cost
2025, 210, 150
2026, 340, 200
];
SET vMarge = Sum(Amount) - Sum(Cost);
// Indicateur : =$(vMarge) → 200
// Indicateur : =Sum({<Year = {$(=Max(Year))}>} Amount) → 340
// Table par Year, mesure =Sum({<Year = {$(=Max(Year))}>} Amount) : 340 sur 2026 seulement
END IF
IF $(vExemple) = 3 THEN
// Exemple 3 : $(vX) et $(#vX) avec la virgule décimale (deuxième schéma)
SET DecimalSep = ',';
LET vX = 7/2;
Test:
LOAD RangeSum($(vX), 1) as AvecVirgule,
RangeSum($(#vX), 1) as AvecDiese
AUTOGENERATE 1;
SET DecimalSep = '.';
// AvecVirgule = 9 (3 + 5 + 1), AvecDiese = 4.5, affiché 4,5 : la virgule décimale était active au chargement
END IF
Sources
- Aide Qlik Cloud : Expansions dollar, principe et limites.
- Aide Qlik Cloud : expansion avec une variable, avec des paramètres et avec une expression.
- Aide Qlik Cloud : Include, différence entre
IncludeetMust_Include.
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.