Lorsque que l’on met en place des tableaux de bords sous Qlik Sense, on peut être amené à vouloir créer des visuels (souvent des tableaux) avancés. Pour ces visuels, on souhaite avoir des calculs différents selon les lignes de notre tableau par exemple. Dans ce cadre-là on va avoir besoin de créer des dimensions personnalisées.
ValueList
La méthode la plus connue pour créer des dimensions personnalisées utilise la fonction ValueList. Sur la dimension de votre tableau, vous utilisez la fonction ValueList pour laquelle chaque argument est une valeur (une ligne) que vous souhaitez avoir.
Pour les mesures, on va avoir besoin de condition pour appliquer un calcul différent à chaque valeur. On va donc avoir quelque chose du type : If(Valuelist(……..
Prenons un exemple :
Nous avons des ventes par ville. Et nous souhaitons afficher les ventes de la ville sélectionnée ainsi que les ventes de sa région. Nous allons donc avoir besoin de dimension personnalisée.
Notre dimension sera : =valuelist('Ville','Région')
Et pour notre calcul il faudra donc tester si l’on est au niveau Ville ou au niveau Région. Pour la région, il nous faudra retravailler la sélection et donc utiliser des Set Analysis, ce qui donne pour notre mesure :
if(
valuelist('Ville','Région')='Ville'
,sum(Sales)
,if(
valuelist('Ville','Région')='Région'
,sum( {$ <City=,Region={"$(=Only(Region))"}>} Sales)
)
)
Voici donc le résultat visuel :
On peut aller plus loin en utilisant des variables pour rendre dynamiques les valeurs de notre valuelist. L’objectif, dans le tableau : pouvoir afficher la ville sélectionnée et sa région. Pour cela on va utiliser la fonction Only :
Only(City) pour connaitre la ville et Only(Région) pour la région.
Notre CA devient donc :
if(
valuelist('$(=Only(City))','$(=Only(Region))')='$(=Only(City))'
,sum(Sales)
,if(
valuelist('$(=Only(City))','$(=Only(Region))')='$(=Only(Region))'
,sum( {$ <City=,Region={"$(=Only(Region))"}>} Sales)
)
)
Le visuel obtenu est le suivant :
Un dernier exemple : Je souhaite construire des différents indicateurs pour comparer la ville que je sélectionne avec les autres villes de la région en apliquant ce que l’on a vu sur le valuelist.
Je construis donc un TCD avec en colonne les villes, en ligne dimension personnalisée des indicateurs et une mesure qui va travailler sur la région.
Je construis ma dimension personalisée : valuelist(‘CA’,’Marge’)
Je construis ma mesure:
if(
valuelist('CA','Marge')='CA'
,sum( {$ <City=,Region={"$(=Only(Region))"}>} Sales)
,if(
valuelist('CA','Marge')='Marge'
,sum( {$ <City=,Region={"$(=Only(Region))"}>} Margin)
)
)
Voici le résultat de notre TCD :
On constate que seule la ville sélectionnée est valorisée. Les autres villes appartiennent bien à la région mais leur valeur est toujours nulle. Cela provient du valuelist qui n’a de valeur que pour le périmètre de sélection. Donc valuelist rend bien CA ou marge pour notre ville sélectionnée mais rend « null » pour le reste.
Si on affiche la valuelist : seul la ville sélectionnée rend les valeurs CA et Marge.
Il va donc falloir que l’on trouve une autre solution que nous allons voir dans le paragraphe suivant.
Liste de valeur et MaxString
La solution à la limite de la ValueList vue précédemment consiste à créer la liste de valeurs dans une table de notre modèle plutôt que par ValueList.
On aura donc dans notre script une table de type :
Liste :
Load *
Inline [
Indicateur
CA
Marge
];
Cette table est indépendante dans notre modèle :
Ainsi je remplace dans mon TCD ma dimension ValueList par ce nouveau champ :
Il me faut aussi changer la mesure qui utilise la ValueList, mais j’ai toujours besoin d’identifier sur quelle valeur de ma dimension personnalisée je suis. Pour cela on utilise la fonction MaxString.
Notre mesure devient donc :
if(
MaxString( TOTAL<Indicateur> {1} Indicateur)='CA'
,sum( {$ <City=,Region={"$(=only(Region))"}>} Sales)
,if(
MaxString( TOTAL<Indicateur> {1} Indicateur) ='Marge'
,sum( {$ <City=,Region={"$(=only(Region))"}>} Margin)
)
)
Dans le MaxString on utilise le set analysis {1} ainsi que TOTAL afin de pouvoir valoriser notre dimension personnalisée, même sur les villes en dehors de la sélection.
Notre résultat est donc :
Conclusion
Nous avons donc vu 2 méthodes de création de dimension personnalisée :
- la fonction ValueList, facile à utiliser et si besoin dynamique
- La seconde en utilisant une table indépendante et la fonction MaxString. Cette solution ne permet pas d’avoir des valeurs dynamiques mais permet plus de possibilités sur les sélections de l’utilisateur.
Vous souhaitez aller plus loin et vous former à l'outil ? Nos consultants experts certifiés Qlik sont aussi formateurs. Découvrez notre formation Qlik Sense.
Vous recherchez des consultants certifiés Qlik ? Besoin d'être accompagné dans vos projets Qlik ? Next Decision est là ! Contactez-nous !