Introduction
En termes d’actualisation de rapports, proposer les meilleures performances possibles à l’utilisateur final est une des clés pour améliorer l’expérience utilisateur. Nous allons voir comment nous pouvons mesurer et améliorer les temps de réponse lors de l’actualisation de rapports sous Power BI.
Si les performances de vos rapports Power BI sont perfectibles et qu’une bonne modélisation n’a pas été suffisante pour rendre les performances acceptables, il existe différents outils et fonctionnalités qui permettent de mesurer les performances et de comprendre quelles tâches concrètes peuvent être réalisées pour les améliorer.
Nous allons parcourir l’ensemble des fonctionnalités mises à disposition dans les outils suivants :
- DAX Studio (outil open source)
- Power BI Desktop
- Excel Vertipaq Analyser
- Gestionnaire des tâches
DAX Studio reste le principal outil pour mesurer les performances des rapports Power BI. Il est avantageusement complété par l’outil de trace de Power BI Desktop et le module Vertipaq Analyser d’Excel, ainsi que le gestionnaire des tâches de Windows.
DAX Studio
De nombreuses fonctionnalités de DAX Studio permettent de mesurer les performances de vos rapports Power BI.
Les principales fonctionnalités sont les suivantes :
- La fonction Evaluate() qui retourne le temps d’exécution d’une requête ainsi que si oui ou non une (pré) agrégation a pu être utilisée pour accélérer l’exécution (si c’est le cas un match found est retourné).
- Le plan d’exécution d’une requête, pour connaitre dans quel ordre les instructions ont été exécutées, pour savoir si le moteur de données Vertipaq a été utilisé ou non….
Mais il y en a aussi d’autres telles que :
- Accès aux métadonnées (voir la partie « Excel Vertipaq Analyser »)
- Nom d’accès à la base de données/Nom du serveur, qui apparait en bas à droite de la fenêtre DAX Studio
DAX Studio peut aussi être utilisé pour analyser les performances des requêtes Power Pivot (.mdx).
Power BI Desktop
Power BI Desktop propose un outil de trace pour mesurer les performances. Il est accessible en cochant la case ci-dessous dans l’onglet « Affichage » de votre rapport.
Pour analyser les performances vous pouvez :
- Démarrer un enregistrement
- Réaliser des manipulations dans le rapport (utiliser des visuels de segment pour filtrer les données du rapport, actualiser les données du rapport…)
- Arrêter l’enregistrement
Vous obtenez ainsi un rapport résumant l’ensemble des actions que vous venez d’effectuer associées à des temps d’exécution en millisecondes. Vous pouvez donc mesurer quels sont les traitements les plus couteux en temps afin de connaitre les visuels et traitements à optimiser en priorité ou à limiter l’utilisation, afin de gagner en performance.
Ici nous avons cliqué sur une barre d’un histogramme, ce qui a filtré tous les autres indicateurs présents sur la page, puis nous avons actualisé les données du rapport. Les temps d’éxécution sont quasiment identiques pour tous les visuels, il n’y a donc pas de visuel à optimiser en priorité.
L’option d’exporter les résultats de l’analyse au format JSON est aussi disponible.
Excel Vertipaq Analyser
Un module Excel nommé « Vertipaq Analyser » permet de mesurer les performances et notamment mesurer quelle colonne occupe le plus d’espace en mémoire.
Vous pouvez avoir accès à cette fonctionnalité directement depuis DAX Studio en cochant les cases suivantes dans les options :
En cliquant sur « View Metrics », vous avez donc accès à un tableau de métadonnées chiffrées concernant les différentes tables de votre modèle. Ce tableau apparait en bas de la fenêtre de DAX Studio.
Vous pouvez directement cliquer sur les entêtes des colonnes pour les trier.
Ce tableau va vous donner accès à de nombreuses informations concernant votre jeu de données :
- Cardinality: nombre de valeur unique/distincte présent dans la colonne
- Col Size: présente la taille de chacune des colonnes du modèle et le total par table
- % Table: correspond à l’occupation en mémoire que représente la colonne par rapport à la table à laquelle elle appartient
- % DB: correspond à l’occupation en mémoire que représente la colonne par rapport au modèle de données entier (toutes tables confondues)
Ainsi, avec toutes ces données, vous pouvez repérer les colonnes qui ont les valeurs de Cardinality, Col Size, % Table, % DB, les plus élevées pour éventuellement les supprimer, si elles ne vous sont pas utiles car non utilisées dans votre rapport. Cela peut vous servir à épurer un modèle déjà existant dans lequel trop de données qui ne sont pas utilisées ont été importées et peuvent donc être supprimées.
Gestionnaire des tâches
Depuis le gestionnaire des tâches, Power BI Desktop peut être déplié pour faire apparaitre des sous-tâches, parmi lesquelles :
- BrowserSubprocess: qui correspond à tous les affichages visuels de l’onglet rapport
- Hote de la fenêtre de contrôle: que vous pouvez ignorer (cela correspond à un outil utilisé par les développeurs dans le but de débuger l’application Power BI Desktop)
- Microsoft Mashup Evaluation Container: qui correspond aux données de votre rapport (et à tous les traitements en Power Query définis dans la fenêtre « Editeur Power Query »)
- Microsoft SQL Server Analysis Services: qui correspond aux traitements SSAS
En fonction des ressources utilisées par chacune de ces tâches, vous pouvez donc en déduire si les performances de votre rapport sont impactées par la volumétrie des données, le nombre de visuels, ou bien le service SSAS. C’est une fonctionnalité puissante et très facile d’accès qui est souvent méconnue.
Exemple d’optimisation
Nous allons voir ensemble un cas pratique d’optimisation de rapport Power BI.
Commençons par utiliser l’analyseur de performances de Power BI pour identifier d’où proviennent les lenteurs.
Les premiers résultats présentent le coût du filtrage croisé. Le coût d’affichage le plus important est d’environ 1,3 seconde ce qui est correct. On retiendra néanmoins qu’en termes de modélisation les filtrages croisés (à double sens) sont à éviter dès que possible au profit de filtrages simples (à sens unique) qui impacteront moins les performances.
Ensuite, une page affiche l’ensemble des colonnes de plusieurs tables. Nous pouvons remarquer que le second tableau a mis 4,25 secondes à s’afficher, ce qui commence à être impactant. On pourrait se demander si toutes les colonnes affichées sont effectivement utiles ou si certaines de ces colonnes pourraient être retirées pour gagner en performances.
Enfin, une page affiche des formules DAX en doublon. Ici, la formule qui somme les salaires par date a été dupliquée par erreur et est présente en dix exemplaires. On peut observer que l’impact des formules DAX dupliquées sur les performances est colossal : 32,237 secondes. Cela est aussi vrai pour les formules DAX complexes qui peuvent parfois être simplifiées.
Ensuite, confirmons ces observations avec les informations disponibles dans le gestionnaire des tâches à l’ouverture du rapport et après.
A l’ouverture les traitements SSAS sur les données sont élevés et les visuels sont chargés pour la première fois. Les donnés quant à elles semblent plutôt légères car elles impactent peu les performances.
Après l’ouverture, les données, les visuels ont été entièrement chargés et donc n’utilisent plus de ressources.
Notre rapport semble donc plus impacté par le nombre de visuels et le service SSAS plutôt que par la volumétrie des données.
Maintenant que nous avons identifié avec précision les traitements les plus lents, nous allons utiliser l’outil DAX Studio pour approfondir notre analyse de performances.
Observons les tables et les colonnes qui nous coûtent le plus de ressources :
Nous pouvons remarquer que 4 tables « date » occupent à elles seules quasiment 92% de l’espace mémoire de la base de données. Elles sont ensuite suivies de la table « salaries » qui occupe 4,33% de la mémoire globale puis de la table « titles » qui représente quant à elle moins de 2%.
Nous allons donc nous concentrer sur les 4 tables « date » : leur taille et leur cardinalité sont quasiment identiques, ce qui est du au fait que ce sont des tables calendaires, c’est-à-dire qu’elles contiennent une ligne pour chaque jour entre deux dates définies.
Ces tables calendaires présentant les mêmes informations, il est possible de n’en garder qu’une seule.
CONCLUSION DE L’EXPERT
Il existe un large panel d’outils permettant de mesurer les performances d’un rapport Power BI, dont la plupart sont faciles d’accès et permettent d’identifier rapidement la source de problèmes de performances.
DAX Studio est un outil gratuit qui facilite l’écriture de formules DAX et qui permet aussi de mesurer les performances de vos rapports.
Un analyseur de performances est disponible au sein même de l’outil Power BI Desktop. Il est relativement rare que des outils de Reporting/Dashboarding permettent à l’utilisateur final de mesurer aussi facilement les performances de ses rapports, ce qui est très profitable.
Ces outils vont vous donner un avantage considérable en vous permettant de fournir à vos utilisateurs des rapports performants et optimisés.