Pimp my Qlik : les thèmes Qlik Sense
Qui a la référence ?

Au programme aujourd’hui, un thème (notez le jeu de mot) qui est revenu souvent durant ma vénérable carrière, l’UI de Qlik Sense.

Et c’est normal, après tout, un bon dashboard se doit d’être lisible du premier coup d'œil d’une part, et il doit d’autre part appliquer la charte graphique corporate permet de rendre l’adhésion à l’outil plus facile.

Découvrons donc la solution de Qlik pour pimper ses applications, les thèmes !

Caveat :
Dans ma famille, c’est ma sœur qui est UI Designer et Directrice Artistique. 

De fait, le thème que je vais vous présenter dans le cadre de ce tuto n’aura que peu de considération pour la cohérence des couleurs, des polices de caractères et tutti quanti (vous verrez par la suite que le latin à son importance ici).

Pour obtenir un résultat optimal, aussi bien en UX qu’en UI, nous avons chez Next Decision une superbe équipe dédiée que je vous invite à découvrir ici : Notre offre Ux / Ui Design

Avant d’aller plus loin, voici quelques éléments à connaître afin de faciliter la compréhension de ce qui va suivre.

Les prérequis pour les thèmes Qlik Sense

  • Quelques connaissances en Qlik Sense
  • Quelques bases en JSON
  • Quelques bases en CSS
  • Qlik Sense Desktop
  • Un bon éditeur de code

Pourquoi Qlik Sense Desktop ?

En voilà une question qu’elle est bonne !

Pour déployer un thème, il faut l’importer dans Qlik Sense via la section dédiée de la Qlik Management Console. Ce qui signifie donc qu'à chaque changement que nous voudrions tester, il faudrait jouer ce processus.

C’est long et répétitif. Alors qu’avec Qlik Sense Desktop, il suffit d’enregistrer notre fichier et d’actualiser l'affichage de l’application pour voir directement les impacts de notre labeur.

L’astuce du chef :

Une fois Qlik Sense Desktop lancé, le Hub est accessible depuis le navigateur, grâce à l’URL http://localhost:4848/hub/

Cela permet d'accéder à la console du navigateur, ce qui pourrait nous être utile à des fins de tests.

Pour activer Qlik Sense Desktop, deux possibilités :

  • Soit en créant un lien d’authentification depuis Qlik Cloud ou Qlik Sense On Premise
  • Soit en utilisant le JSON d’activation disponible pour les développeurs

Ce dernier se trouve dans les téléchargements des outils Qlik, avec les instructions pour le déployer.

La base

Les thèmes, comme les extensions Qlik Sense, ont un squelette composé de :

  • Un fichier .qext (pour qlikextension, bien joué)
  • Un fichier theme.json
  • Potentiellement, un fichier .css

L’ensemble se trouve dans un dossier dont le nom correspond à celui du thème. Pour l’installer sur Qlik Sense, celui-ci devra être archivé en .zip

Maintenant que cela est clair, rentrons dans le vif du sujet !

Wait a minute…

Un thème c’est bien, mais une application pour l’appliquer c’est encore mieux.

En voici une rapidement créée avec des données fictives, avec son thème par défaut :

Pimp my Qlik : les thèmes Qlik Sense
Le fantasme de Jules César (vous croyez en la théorie de Cléopâtre, vous ?)

Et la voici avec le thème que nous allons créer ensemble :

Pimp my Qlik : les thèmes Qlik Sense
Le fantasme de Jules César, mais sexy

Pimp my Qlik : les thèmes Qlik Sense

Le fichier .qext

Commençons par le commencement, et choisissons le nom de notre superbe thème : Imperium Romanum.

Créons donc un dossier Imperium Romanum, puis à la racine, imperium_romanum.qext, et complétons le comme suit :

{
"name": "Roman Imperium",
"description": "Senatus populusque romanus",
"type": "theme",
"version": "1.0.0",
"author": "Maximus Decimus Meridius"
}

Et zééééé parti !

Le fichier theme.json

Une image valant 1000 mots, voici le squelette d’un fichier JSON définissant un thème Qlik Sense, accompagné d’une succinte explication de ses sections.

Pimp my Qlik : les thèmes Qlik Sense

Maintenant que nous avons les bases structurelles de notre fichier, commençons à bâtir concrètement notre thème.

Caveat :
La liste non exhaustive des options de personnalisation est disponible dans la documentation officielle de Qlik : Custom themes | Qlik Developer Portal

Caveat bis :
Les extraits de code fournis doivent respecter l’implémentation décrite dans l’image ci-dessus pour fonctionner.

Propriétés de base du thème

Simplement deux clés ici, la première _cards permet de choisir si les objets se distinguent ou non de l’arrière-plan grâce à un jeu d’ombres, une bordure, un angle.

"_cards": false

Pimp my Qlik : les thèmes Qlik Sense

"_cards": true

Pimp my Qlik : les thèmes Qlik Sense

La seconde quant à elle, _inherit, permet d’appliquer les propriétés du thème par défaut de Qlik Sense, pour toutes les clés non définies dans le fichier.

"_inherit": false

Pimp my Qlik : les thèmes Qlik Sense

"_inherit": true

Pimp my Qlik : les thèmes Qlik Sense

Ce qui donne pour notre thème :

{
"_cards": false,
"_inherit": false,
}

Pimp my Qlik : les thèmes Qlik Sense

Variables

Un bloc très important à mes yeux, car il permet de créer tout un tas de clés réutilisables dans l’intégralité du thème.

Très pratique pour l’évolution et la maintenance de celui-ci, surtout avec la mise à disposition de nouveaux objets Qlik, et l’amélioration continue de leur support de la personnalisation.

"_variables": {
"@alternativeColor": "#e6e6ea",
"@axeColor": "#e3dbda",
"@axeTitleColor": "#1E2142",
"@backgroundColor": "#faf9f9",
"@badColor": "#a0859f",
"@excludedColor": "#5d5e77",
"@fontFamily": "Cinzel",
"@goodColor": "#859fa0",
"@gridColor": "#ece7e7",
"@possibleColor": "#f3f3f5",
"@primaryColor": "#A08685",
"@selectedExcludedColor": "#373957",
"@textColor": "#302828",
"@titleColor": "#05082D",
"@textSize": "12px",
"@titleSize": "16px",
"@subtitleSize": "14px"
},

Fichier CSS

Petit mais puissant, ce bloc permet de référencer un ou plusieurs fichiers CSS externes. Pratique par exemple pour récupérer une police d’écriture non standard.

"customStyles": [
{
"classRef": "theme-style",
"cssRef": "theme.css"
}
],

Dans le JSON

@import url('https://fonts.googleapis.com/css2?family=Cinzel&display=swap');

.cinzel {
font-family: "Cinzel", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
}

Dans le CSS

Couleurs des données et des sélections

Ici, nous définissons les codes couleurs utilisés dans toutes les applications. Ils se distinguent en deux catégories.

  • D’une part, celui qui va régir la teinte par défaut des courbes, barres, etc. et ses compléments, comme les valeurs en erreur, nulles, ou autres.
  • D’autre part, le célèbre code couleur vert, gris, blanc des sélections et du modèle associatif de Qlik, que nous avons, ô sacrilège sacrifié sur l’autel de la cohérence stylistique.

"dataColors": {
"alternative": "@alternativeColor",
"errorColor": "@badColor",
"excluded": "@excludedColor",
"nullColor": "red",
"othersColor": "red",
"possible": "@possibleColor",
"primaryColor": "@primaryColor",
"selected": "@titleColor",
"selectedExcluded": "@selectedExcludedColor"
},

Pimp my Qlik : les thèmes Qlik Sense

Propriétés globales de l’application

Nous définissons rapidement quelques options de personnalisation qui s’appliquent à l’ensemble des éléments de l’application Qlik Sense.

Elles pourront être éventuellement écrasées. Elles ne sont pas dans un bloc, mais au même niveau que celles systèmes.

"fontFamily": "@fontFamily",
"color": "@textColor",
"fontSize": "@textSize",

Pimp my Qlik : les thèmes Qlik Sense

Arrière-plan des feuilles

Le plus court bloc de notre thème, qui permet de définir l’arrière-plan par défaut des feuilles de l’application Qlik Sense

"sheet": {
"backgroundColor": "@backgroundColor"
},

Pimp my Qlik : les thèmes Qlik Sense

Propriétés des objets

Maximus obstructionum ! Ici, nous décrivons le style désiré des objets de deux façons, d’abord pour tous, puis ensuite pour chaque type spécifique, si cela est nécessaire.

Au global

Commençons par mettre en forme les objets de notre application dans leur globalité. Ici, nous changeons notamment les titres, sous-titres et pied de page (enfin d’objet), les axes et la grille (leurs lignes, libellés, et valeurs).

"object": {
"title": {
"main": {
"color": "@titleColor",
"fontSize": "@titleSize"
}
},
"axis": {
"label": {
"color": "@textColor"
},
"line": {
"major": {
"color": "@axeColor"
},
"minor": {
"color": "@axeColor"
}
},
"title": {
"color": "@axeTitleColor",
"fontSize": "@subtitleSize"
}
},
"grid": {
"line": {
"highContrast": {
"color": "@axeColor"
},
"major": {
"color": "@gridColor"
},
"minor": {
"color": "@gridColor"
}
}
},
"label": {
"name": {
"color": "@textColor"
},
"value": {
"color": "@textColor"
}
}
}

Pimp my Qlik : les thèmes Qlik Sense

N’oublions pas que notre thème n’utilise pas les cartes d’affichage. Cette option offre une kyrielle de clés de style, telles que l’ombrage, les bordures, les angles, l’arrière-plan.

"object": {
"backgroundColor": "white",
"boxShadow": "rgba(50, 50, 93, 0.25) 0px 50px 100px -20px, rgba(0, 0, 0, 0.3) 0px 30px 60px -30px",
"borderWidth": "2px",
"borderRadius": "10px"
}

Pimp my Qlik : les thèmes Qlik Sense

Nonobstant, certaines propriétés ne peuvent pas s’appliquer à tous. Simplement parce que l’élément qu' elles sont censées amender n’existe point. Par exemple un graphique méthode n’ayant ni axe ni grille, ces attributs sont ignorés.

Par type d’objet

Certaines propriétés spécifiques à une classe d’objets peuvent être définies au travers d’un bloc dédié, à l’intérieur du bloc object vu précédemment.

"distributionPlot": {
"box": {
"fill": "@axeColor"
}
},
"listBox": {
"backgroundColor": "@backgroundColor",
"content": {
"backgroundColor": "@backgroundColor"
}
},

Pimp my Qlik : les thèmes Qlik Sense

Aussi, celles décrites au global restent disponibles et peuvent être écrasées.

Palettes de couleurs

À nos pinceaux Van Gogh en devenir ! Ici, nous définissons les jeux de couleurs utilisées dans l’application, sous forme de palettes.

"palettes": {
<Bloc pour les données>,
<Bloc pour l’interface>
},

Mais quels sont donc ces blocs mystères ?

Pour les données

Comme subtilement indiqué par le titre, nous crééons le jeu de couleur qui s’applique notamment lorsque l’on choisi la coloration par dimension ou multicolore.

Pimp my Qlik : les thèmes Qlik Sense

Pile ce qu’il faut pour distinguer d’un coup d'œil nos éléments d’analyses.

"data": [
{
"name": "Rome XIV",
"propertyValue": "1",
"scale": [
"#a08685",
"#e2cdc2",
"#907978",
"#cbb9af",
"#aa9291",
"#e5d2c8",
"#806b6a",
"#b5a49b",
"#b39e9d",
"#e6d5cb",
"#705e5d",
"#9e9088",
"#bdaaaa",
"#ebdcd4"
],
"type": "row"
}
],

Pimp my Qlik : les thèmes Qlik Sense

Il est possible d’en créer plusieurs, mais ici, nous en implémentons qu’une seule.

Pour l’interface utilisateur

Il s’agit ici d’une palette disponible dès que l’option couleur unique s’affiche. On la trouve dans les graphiques, les arrière-plans, les objets textes, les couleurs conditionnelles, etc.

"ui": [
{
"name": "Rome XIV Extenso",
"colors": [
"#a08685",
"#e2cdc2",
"#907978",
"#cbb9af",
"#aa9291",
"#e5d2c8",
"#806b6a",
"#b5a49b",
"#b39e9d",
"#e6d5cb",
"#705e5d",
"#9e9088",
"#bdaaaa",
"#ebdcd4",
"@goodColor",
"@badColor",
"@titleColor",
"@textColor",
"@axeTitleColor"
]
}
]

Pimp my Qlik : les thèmes Qlik Sense

Dans notre cas, il s’agit d’une version étendue de celle créée juste au-dessus, pour ajouter une teinte associée au positif et au négatif, entre autres choses.

En revanche, il est possible d’en implémenter qu’une.

Classes de couleurs

Comme promis, parlons dégradés, disponible dès lors que l’on choisit une coloration par expression.

Il en existe de plusieurs types :

  • Le dégradé divergent, alias dg
  • Pimp my Qlik : les thèmes Qlik Sense

  • Les classe divergentes, alias dc
  • Pimp my Qlik : les thèmes Qlik Sense

  • Le dégradé séquentiel, alias sg
  • Pimp my Qlik : les thèmes Qlik Sense

  • Les classes séquentielles, alias sc
  • Pimp my Qlik : les thèmes Qlik Sense

Pratique pour représenter du positif et du négatif, une proportion, etc.

"scales": [
{
"name": "Degradatio divergente",
"propertyValue": "dg",
"scale": [
"@goodColor",
"@primaryColor",
"@badColor"
],
"translation": "Degradatio divergente",
"type": "gradient"
},
{
"name": "Classis divergens",
"propertyValue": "dc",
"scale": [
"@goodColor",
"@primaryColor",
"@badColor"
],
"translation": "Classis divergens",
"type": "class"
},
{
"name": "Gradus Romanus",
"propertyValue": "sg",
"scale": [
"#a08685",
"#987f7e",
"#907978",
"#887271",
"#806b6a",
"#786564",
"#705e5d",
"#685756",
"#605050",
"#584a49",
"#504343"
],
"translation": "Gradus Romanus",
"type": "gradient"
},
{
"name": "Classis Romana",
"propertyValue": "sc",
"scale": [
"#a08685",
"#987f7e",
"#907978",
"#887271",
"#806b6a",
"#786564",
"#705e5d",
"#685756",
"#605050",
"#584a49",
"#504343"
],
"translation": "Classis Romana",
"type": "class"
}
]

Pimp my Qlik : les thèmes Qlik Sense

La surprise du chef

Malheureusement, il n’est pas possible de tout personnaliser au travers du fichier JSON.

Par exemple, j’aime beaucoup changer le style des volets de filtres lorsqu’ils sont réduits, notamment leurs bordures.

Mais de l’obscurité jaillit un rayon d’espoir, le fichier CSS !

Caveat : Les altérations que nous apportons ici ne sont pas supportées et peuvent casser à chaque montée de version. Cela dit, je n'ai pas encore eu l’occasion de pallier un tel problème.

C’est ici qu’intervient la console de notre navigateur, en effet, il faut manuellement aller chercher les classes CSS qui nous intéressent, sans se tromper.

C’est un exercice un iota complexe, qui entraînera au début quelques erreurs, j’ai pu par exemple modifier tous les boutons de Qlik Sense sans le vouloir. Coup dur :-D

Avec persévérance et l’inspecteur d'éléments, nous trouvons nos classes. C’est l’heure du CSS.

@import url('https://fonts.googleapis.com/css2?family=Cinzel&display=swap');

.cinzel {
font-family: "Cinzel", serif;
font-optical-sizing: auto;
font-weight: 400;
font-style: normal;
}

.qv-object-filterpane .folded-listbox > .MuiGrid-root.MuiGrid-container
{
border: 1px solid #e3dbda;
border-radius: 0px;
}

.qv-object-filterpane .folded-listbox > .MuiGrid-root.MuiGrid-container:hover
{
border: 1px solid #302828;
}

.qv-object-filterpane .folded-listbox > .MuiGrid-root.MuiGrid-container > div > div
{
border-top: 1px solid #e3dbda;
}

.qv-object-filterpane [data-testid="filterpane-listbox-container"]
{
border: 1px solid e3dbda;
border-radius: 0px;
}

.qv-object-filterpane [data-testid="filterpane-listbox-container"]:hover
{
border: 1px solid #302828;

}

Pimp my Qlik : les thèmes Qlik Sense

Et voilà des volets de filtres tout beaux, tout chaud avec un léger effet de surbrillance.

Conclusion

Dorénavant, notre antique thème est terminé, et vous connaissez les rudiments de la personnalisation des applications Qlik Sense.

Admirons derechef le résultat de notre dur labeur du jour :

Pimp my Qlik : les thèmes Qlik Sense

Je ne m’en lasse pas !:-D

À vous de jouer maintenant, de tester les différentes options, l'infinité de couleurs qui s'offrent à nos yeux, de partager cet article à vos proches, ou bien simplement de contacter notre belle équipe dédiée.

Comme je suis d’une grande mansuétude, et pour éviter de mettre un infâme pavé plus de 200 lignes, de vous pouvez télécharger l’application et le thème disponible sur GitHub ici : Imperium Romanum

Et voilà pour aujourd’hui ! À bientôt pour de nouvelles aventures dans le monde merveilleux de Qlik Sense !

Nos consultants Next Decision sont experts certifiés Qlik et vous accompagnent dans votre projet Qlik. Nous pouvons également vous former ! Contactez-nous !