Comme vous l’avez peut-être entendu, 2 consultants en Business Intelligence ont rejoint notre équipe début mai. Parfait timing en parallèle de leurs formations et sessions de coaching Qlik pour assister aux webinar du Qlik World 2021…. Et vous partager quelques sujets intéressants !
Parmi les sujets suivis avec attention, nous avons plus particulièrement relevé celui-ci, qui a largement inspiré le contenu de cet article. : « Hacking Qlik Application performance for more and faster data »
Nous avons ainsi rassemblé un ensemble de tips qui vous permettront d’améliorer la performance de vos applications Qlik Sense et le chargement de vos données. Les solutions proposées sont faciles à mettre en place lors du développement d’une app, ou même lors de modifications d’une app existante.
Dans cet article, nous nous concentrons sur les meilleures pratiques au niveau du :
Attention, nous insistons sur le fait qu’il s’agit de tips et qu’en fonction des cas, d’autres solutions peuvent être plus performantes.
Améliorer la performance de vos apps permettra aux différents utilisateurs de vos solutions Qlik de bénéficier d’une meilleure expérience à tous les niveaux. Voici comment la performance peut affecter les différents types d’utilisateurs :
Pour savoir quelle application prend trop de temps à être rechargée, vous pouvez notamment vous aider des monitoring apps.
Moins de données à charger améliore logiquement la performance. Voici trois idées qui permettent de limiter la quantité de données chargées :
Pour des raisons techniques que nous ne détaillerons pas ici, ne pas modifier les données lors du chargement d’un QVD rend le chargement des données très performant.
Une action que l’on peut réaliser sur le chargement d’un QVD sans détériorer la performance est l’utilisation d’un « where exists() ».
Pour rappel le «where exists()» permet de charger seulement des données dont la valeur d’une des colonnes a déjà été importée dans une autre table. Par exemple, si j’ai une table de produits et une table de factures, grâce au «where exists()», je peux loader les données de produit pour lesquels une facture existe. J’importe donc seulement les produits qui sont utilisés dans l’app et non tous les produits de la base de données source.
Point d’attention : le «where exists()» n’est pas optimal dans tous les cas et dépend du case. Pour les grandes volumétries, privilégiez “left keep”.
Il est possible de voir si un QVD est optimisé dans le Data load progress :
Voici quelques exemples de loads de QVD non optimisés (en rose) rendus plus performants via des where Exists() :
Faire appel à des sources de données demande des ressources et du temps. Le mieux est de charger une seule fois toutes les données nécessaires et donc de se connecter une seule fois à la base de données source.
Si on doit faire à nouveau appel à ces données plus loin dans le script du code, référez-vous à l’utilisation d’un Resident qui chargera les données d’une table déjà existante plutôt que de faire à nouveau appel à la base de données.
Plutôt que de désactiver le search index, nous vous conseillons de :
Pour rappel, il arrive souvent que les développeurs désactivent le search index car c’est un moyen facile de gagner du temps lors du chargement des données.
Par exemple, vous pouvez exclure du smart search les ID, qui sont souvent des valeurs que l’utilisateur final ne connait pas.
Dans l’exemple suivant on exclut tout ce qui contient ‘Amount’ et qui finit par ‘ID’ :
Afin d’optimiser l’utilisation de votre application, il est intéressant de préparer un maximum de données en amont et de les transformer pour répondre au besoin fonctionnel des utilisateurs dans le script. Ceci permettra d’éviter de devoir faire des calculs dans les apps et donc d’améliorer la performance de celles-ci.
Nous vous proposons les solutions suivantes :
Créez des clés uniques et simples en utilisant la commande autonumber dans le script de chargement. Dans l’utilisation de l’app ceci permettre d’éviter d’utiliser des clés lourdes et longues et donc de gagner en performance.
Nous attirons votre attention sur deux points :
Utiliser des concatenate ne fera pas spécialement gagner des temps au load des données. En revanche, l’utilisation des app en sera optimisé si c’est utilisé pour enchainer des petites tables ensemble.
Pour rappel, le concatenate permet d’importer toutes vos données dans une seule table plutôt que plusieurs tables.
Nous vous conseillons d’éviter les jointures de tables volumineuses dans le Data Load Editor. Lors de l’utilisation de l’app, vous risquez de perdre en performance car la recherche de la donnée en sera complexifiée.
Voici d’autres exemples de loads optimisés :
Utiliser des formules variables peut s’avérer très utile. Il s’agit de formules qui varient selon le choix de l’utilisateur. Par exemple, celui-ci pourra choisir d’afficher soit, la somme des quantités vendues, soit le prix unitaire moyen, soit le pourcentage de marge, etc.
Pour ce faire, est-il déconseillé d’avoir recours aux formules IF ou Pick + Match de la manière suivante :
If(Condition = 1, sum(quantity)
If(Condition = 2 , Avg(UnitPrice),
If(Condition = 3 ,sum(Marge)/Sum(ChiffreDaffaire)
)))
Ou
Pick(Match(Condition,1,2,3), sum(quantity), Avg(UnitPrice), sum(Marge)/Sum(ChiffreDaffaire))
En effet, l’engine de Qlik Sense calcule chacune des alternatives, mais n’en affiche qu’une seule. Selon la volumétrie de l’application, le recours au IF ou Pick + Match peut donc impacter négativement la réactivité de l’application.
Voici ce que Qlik propose à ce sujet :
Créer une table dite “Island » , donc détachée du modèle, et appeler chaque formule via une sélection faite sur le nom de la formule :
Il convient d’éliminer toutes les valeurs ou colonnes non nécessaires. L’affichage de chaque information diminuera votre performance. Limitez-vous donc au minimum nécessaire.
Nous vous conseillons également de réduire le nombre de valeurs distinctes. Ceci est faisable en arrondissant par exemple, ou en enlevant les secondes et les millièmes de secondes à des valeurs temporelles.
Comme vous le savez, Qlik offre la possibilité de charger un objet seulement sous certaines conditions. Nous vous conseillons d’utiliser cette fonctionnalité lorsqu’il y a beaucoup de données potentielles à afficher. Par exemple, vous pouvez mettre comme condition d’afficher un graphique seulement si les sélections réalisées font qu’il y a moins de 100 000 données sur lesquelles il faut faire un calcul.
Analyse de performance :
Nous avons également écrit un article sur l’analyse de la mémoire RAM utilisée sur Qlik sense SaaS. N’hésitez pas à y jeter un coup d’œil ici.
Qlik propose également un ensemble des meilleures pratiques dans cet article.
Vidéo :
La vidéo suivante vous expliquera également comment certaines fonctionnalités sont moins performantes que d’autres.
Voici l’article Qlik lié à la vidéo.
Pour plus de conseils concernant la performance des outils Qlik, contactez votre partenaire Qlik ou votre consultant.
laetitia.larchanche@weqan.be
+32(0)489/970.736
Laetitia, Sales & Marketing manager
Restez informés des différentes actualités de WeQan en nous suivant sur LinkedIn et Facebook.