Avec l’essor des données volumineuses, les entreprises sont confrontées à des défis croissants pour extraire des informations importantes.

Les outils d'analyse comme Qlik Sense offrent de puissantes fonctionnalités pour manipuler et visualiser ces données, mais nécessitent une optimisation rigoureuse pour garantir des performances optimales

Nous allons voir dans cet article comment optimiser à la fois son script et la restitution de ses applications.

La modélisation dans Qlik Sense

L’un des principaux facteurs de la performance de vos applications est la conception du modèle de données.

Plusieurs options s’offrent à vous, chacune ayant ses avantages et ses inconvénients :

Optimisation des applications Qlik Sense

La modélisation en étoile est la plus répandue pour structurer les relations entre les différentes tables.

Elle consiste en une table centrale, la table de fait ( table qui contient des métriques comme le montant d’une commande, la quantité), et des tables de dimensions autour qui contiendront nos axes d’analyse.

Sous Qlik Sense, cette méthode garantit le meilleur ratio temps de réponse / consommation de la ram.

La structure de vos données source peut ne pas ressembler à un modèle en étoile. Vous devez alors retravailler vos tables pour essayer de vous en approcher le plus possible.

L’utilisation des jointures est une bonne solution pour y parvenir. Ces dernières permettent de ramener les informations d’une table vers une autre :

Optimisation des applications Qlik Sense

Il existe d’autres types de jointures : https://help.qlik.com/fr-FR/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm

Une autre solution pour transférer les informations entre deux tables est la fonction "applymap". La seule condition pour l’utiliser est de ne ramener qu’un seul champ de la table source vers la table cible. Dans ce cas-là, il est préférable d’utiliser cette fonction qui agit comme une simple fonction de recherche (comparable au RECHERCHEV sous Excel). Elle vérifie si la valeur d’entrée existe dans la table de mappage, et renvoie la valeur correspondante à la deuxième colonne.

Optimisation des applications Qlik Sense

Prenons l’exemple de deux tables : l’une contenant le code pays des clients (FR, BEL, etc.) et l’autre associant chaque code pays à son libellé complet.

Pour construire un modèle en étoile, nous puvons ramener l’information du libellé vers notre table client. Puisqu’il n’y a qu’une seule information qui nous intéresse, nous allons utiliser un mapping

Optimisation des applications Qlik Sense

Optimisation des applications Qlik Sense

Optimisation des applications Qlik Sense

Suppression des clés synthétiques

Une clé synthétique se forme lorsque plusieurs tables de données comportent deux champs ou plus en commun.

Il faut donc vérifier que seuls des champs reliant les deux tables sont utilisés comme clés. Par exemple, des champs comme "Date", "Commentaire" ou "Description" peuvent exister dans plusieurs sources.

Si plusieurs champs sont nécessaires pour lier vos tables, il est recommandé de créer une clé composée.

Dans l’exemple suivant, les tables "CUSTOMER_SITE" et "ORDER" sont chargées et liées par deux champs. Qlik Sense génère alors une clé synthétique, équivalente à une table de lien. Nous vous recommandons de la remplacer par une clé composée.

Optimisation des applications Qlik Sense

Dans l’exemple ci-dessus, la fonction "Autonumber" est utilisée pour générer une valeur numérique entière (sans décimale) unique pour chaque valeur distincte d’un champ donné. Ceci améliore les performances par rapport à l’utilisation de chaînes de caractères, souvent plus longues et de taille variable.

Si la clé n’est pas créée dans l’application de restitution mais dans un générateur de QVD, il faudra utiliser les fonctions hash128(), hash160() ou hash256(). En effet la fonction autonumber() génère un entier dépendant de l’ordre de lecture de la donnée, alors que le hash renverra toujours la même valeur de sortie pour une même valeur d’entrée.

Une méthode simple pour optimiser votre script consiste à ne charger que les champs nécessaires. Si certaines informations ne sont pas essentielles à votre visualisation, il est préférable de ne pas les charger.

Optimisation des applications Qlik Sense

Gestion des champs de type Date

Dans une table contenant deux champs de type Date, il faut se demander si l’horodatage est nécessaire. Si ce n'est pas le cas, ne conserver que la date avec une formule du type :

Date(Floor(ORDER_DATE)) as OrderDate

Si l’horodatage est requis, il est recommandé de le séparer de la date afin de limiter le nombre de valeurs uniques dans le champ.

Optimisation des applications Qlik Sense

Utilisation des fichiers QVD

Le format QVD (QlikView Data) est un fichier contenant une table de données. Il s’agit d’un format natif de Qlik, optimisé pour une lecture rapide.

Ces fichiers peuvent être lus en deux modes : standard et optimisé (plus rapide). Le mode sélectionné est déterminé automatiquement par le moteur de script.

Optimisation des applications Qlik Sense

Le mode optimisé est activé uniquement si aucune modification n’est apportée aux données. Par exemple, renommer les champs n’affecte pas le mode optimisé, car cela modifie uniquement les métadonnées sans altérer les données.

Le mapping et l’ajout d’une clause WHERE ne sont pas possibles, sauf dans le cas d’un WHERE EXISTS() appliqué à un seul champ.

Optimisation des applications Qlik Sense

Optimisation des applications Qlik Sense

Pour les grands volumes de données, il est conseillé de charger une table temporaire depuis un QVD en mode optimisé, puis d’effectuer les transformations en mémoire à l’aide du mot-clé Resident.

Optimisation des applications Qlik Sense

Qlik Sense traite plus rapidement les données en mémoire que celles lues directement depuis un fichier.

L’optimisation du script ne suffit pas à améliorer les performances des applications Qlik Sense, il est également essentiel d’optimiser leur restitution.

Optimisation des formules dans Qlik Sense 

Des formules trop complexes augmentent les temps de calcul et dégradent l’expérience utilisateur. Il est préférable d’éviter de faire des dimensions ou des mesures calculées en utilisant des "if".

Par exemple, si vous disposez de 1000 enregistrements dans une agrégation, le "if" sera évalué 1000 fois.

Privilégiez le Set Analysis, qui applique un filtre en amont de l’agrégation et stocke la réponse en cache.

Optimisation des applications Qlik Sense

Évitez également l’utilisation de la fonction Aggr(), qui impacte fortement les performances. En effet, cette fonction génère une table virtuelle en fonction des dimensions spécifiées.

Conditions de calcul sur les graphiques

Vous pouvez utiliser des conditions de calcul sur vos tableaux ou graphiques. Les graphiques affichant un grand nombre d’enregistrements consomment beaucoup de ressources.

Une bonne pratique consiste à contraindre l’utilisateur à appliquer des filtres, par exemple avec la fonction GetSelectedCount(), afin de limiter le périmètre de calcul.

Optimisation des applications Qlik Sense

Limitation du nombre d’objets sur la feuille 

Chaque graphique est recalculé lorsqu’un utilisateur ouvre une feuille pour la première fois ou applique un filtre. Si une feuille contient de nombreux graphiques, les utilisateurs devront attendre que chaque objet soit calculé à chaque sélection, ce qui exercera une charge considérable sur le moteur de calcul.

Utilisation des éléments principaux

L’utilisation des éléments principaux permet également d’éviter le recalcul des formules. Qlik Sense met en cache les expressions en fonction de la syntaxe :

Sum(Montant) et SUM(Montant) sont traités comme deux expressions distinctes.

Si un graphique utilise une syntaxe et un autre graphique utilise la seconde, deux expressions seront mises en cache au lieu d’une. Utiliser les éléments principaux garantit l’unicité.

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