Créer des dimensions personnalisées sur Qlik Sense

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')

Créer des dimensions personnalisées sur Qlik Sense

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)

)

)

Créer des dimensions personnalisées sur Qlik Sense

Voici donc le résultat visuel :

Créer des dimensions personnalisées sur Qlik Sense

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 :

Créer des dimensions personnalisées sur Qlik Sense

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 :

Créer des dimensions personnalisées sur Qlik Sense

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.

Créer des dimensions personnalisées sur Qlik Sense

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 :

Créer des dimensions personnalisées sur Qlik Sense

Ainsi je remplace dans mon TCD ma dimension ValueList par ce nouveau champ :

Créer des dimensions personnalisées sur Qlik Sense

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 :

Créer des dimensions personnalisées sur Qlik Sense

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 !