

- Description
- Sablier de bureau : le temps que l'on attend s'écoule grain par grain.
- Source
- Suohros · page d’origine
- Licence
- CC0 Domaine public
Performance et volumétrie
Ce thème mesure le temps que l'utilisateur attend (ouverture, clic sur un filtre, export) et la capacité du produit à tenir sa promesse quand les données grossissent. Il traite la…
En bref
Ce thème mesure le temps que l'utilisateur attend (ouverture, clic sur un filtre, export) et la capacité du produit à tenir sa promesse quand les données grossissent. Il traite la cardinalité des colonnes, la taille du modèle, les modes de stockage (Import, DirectQuery, Dual, Direct Lake), les agrégations, le nombre de visuels, et l'analyse des requêtes (Performance Analyzer, DAX Studio, plans de requête).
Niveau : 🟢→🔴 · Code thème : PRF
1. Pourquoi ce thème#
Un rapport lent n'est pas « utilisé moins » : il est contourné (export Excel, requête SQL directe, copie locale), ce qui détruit la gouvernance. Les repères d'usage couramment admis : en dessous d'environ 1 s, l'utilisateur ne perçoit pas d'attente ; autour de 10 s, il décroche (ordres de grandeur, issus de la recherche en ergonomie ; à adapter). La performance d'un modèle Import se joue d'abord sur la cardinalité et la taille (moteur colonnaire VertiPaq), puis sur la qualité du DAX (DAX), puis sur la page (nombre de visuels).
2. Ce que mesure le thème#
- Axe : du « ça rame, on ne sait pas pourquoi » au temps de réponse garanti par un budget mesuré en pipeline.
- Indicateurs clés : durée d'affichage de page (P50/P95), durée de requête DAX par visuel, taille du modèle (Mo/Go), durée du rafraîchissement, part de requêtes DirectQuery > 3 s.
- Unités : secondes, Mo, nombre de visuels par page.
3. Les 5 niveaux#
| Niveau | Nom court | Promesse | Indicateur type (ordre de grandeur) |
|---|---|---|---|
| 1 | Subi | Le rapport s'ouvre « quand il veut » ; personne ne sait si c'est normal. | Aucune mesure ; plaintes |
| 2 | Mesuré | On sait quelle page et quel visuel sont lents, et le temps d'ouverture est connu. | Page type < 10 s ; mesure manuelle |
| 3 | Piloté | Les pages courantes s'affichent en moins de 3 s sur un jeu de données réaliste, et on sait pourquoi. | P95 page < 3 s ; modèle < 70 % de la limite de licence |
| 4 | Budgété | Une régression de performance est détectée avant la mise en production. | Budget de temps par page vérifié à chaque livraison |
| 5 | Garanti | La charge nominale et la croissance prévue à 12 mois sont absorbées sans dégradation perceptible. | P95 page < 1–2 s en charge nominale ; test de montée en charge |
4. Jalons par niveau#
| ID | Jalon | Preuve vérifiable |
|---|---|---|
| BI-PRF-1.1 | Le rapport s'ouvre et reste utilisable sur le jeu complet | Ouverture réussie en prod |
| BI-PRF-1.2 | Les utilisateurs peuvent signaler une lenteur à un canal connu | Canal de support / formulaire |
| BI-PRF-1.3 | Le mode de stockage (Import/DirectQuery) est choisi consciemment | Mention dans la fiche du modèle |
| BI-PRF-2.1 | Performance Analyzer utilisé sur les pages principales | Export des durées par visuel |
| BI-PRF-2.2 | Les colonnes inutiles sont supprimées du modèle | Aucune colonne non utilisée > 1 % de la taille |
| BI-PRF-2.3 | La taille du modèle et le temps de rafraîchissement sont connus et notés | Fiche de modèle à jour |
| BI-PRF-2.4 | Un seuil de lenteur (« trop lent ») est défini | Seuil écrit, ex. page > 5 s |
| BI-PRF-3.1 | Colonnes à haute cardinalité traitées (horodatage fractionné en date + heure, identifiants non chargés) | Analyse de cardinalité (VertiPaq Analyzer) |
| BI-PRF-3.2 | Les types numériques adaptés et les colonnes calculées évitées au profit de la source | Revue des colonnes calculées |
| BI-PRF-3.3 | Nombre de visuels par page borné et pages lourdes scindées | Page de référence < 10–15 visuels |
| BI-PRF-3.4 | DAX coûteux repéré avec DAX Studio (Server Timings : FE vs SE) | Capture de timings avant/après |
| BI-PRF-3.5 | Agrégations ou tables d'agrégats pour les grands faits | Table agrégée + mesures qui l'utilisent |
| BI-PRF-4.1 | Jeu de données de test réaliste (volume ≥ production) | Environnement de test chargé |
| BI-PRF-4.2 | Budget de performance exécuté à chaque version (requêtes de référence) | Résultats consignés par version |
| BI-PRF-4.3 | Rapport de régression : variation des temps entre deux versions | Comparatif en revue de livraison |
| BI-PRF-4.4 | Modes mixtes (Dual, composite) choisis avec justification mesurée | Décision documentée |
| BI-PRF-5.1 | Test de charge multi-utilisateurs (concurrence réaliste) | Rapport de test |
| BI-PRF-5.2 | Projection de croissance à 12 mois, revue chaque trimestre | Document de projection |
| BI-PRF-5.3 | Cible P95 < 1–2 s tenue sur les 5 pages les plus vues | Mesure en production |
| BI-PRF-5.4 | Optimisation continue : tableau des 10 requêtes les plus coûteuses | Revue mensuelle des requêtes lentes |
5. Lecture détaillée par niveau#
🟢 Niveau 1 — Subi#
- Signes : « c'est lent depuis lundi », aucun chiffre. Ou, pire : personne ne se plaint parce que personne n'utilise.
- Difficulté : 1/5 · Effort : 1/5.
🟢 Niveau 2 — Mesuré#
- Signes : Performance Analyzer exploité, taille de modèle connue, colonnes inutiles supprimées (gain de taille souvent de 20 à 50 % dans un modèle jamais nettoyé — ordre de grandeur).
- Gain : on cesse de deviner. Limite : chaque mesure est ponctuelle.
- Difficulté : 2/5 · Effort : 2/5.
🟡 Niveau 3 — Piloté#
- Signes : on sait lire la différence entre le temps moteur de formule (Formula Engine) et moteur de stockage (Storage Engine) ; on traite d'abord la cardinalité (un horodatage à la seconde sur 100 M de lignes ruine la compression), puis le DAX, puis la page. Les agrégations couvrent les requêtes fréquentes.
Fil rouge SFA : DateHeureVisite (précision à la seconde) rendait 12 M de valeurs distinctes. Éclatée en DateVisite (1 500 valeurs) et HeureVisite (86 400 → ramenée à la minute : 1 440), la taille du modèle passe de 2,1 Go à 0,9 Go (chiffres illustratifs).
-- Dans DAX Studio : lire les timings serveur
EVALUATE
SUMMARIZECOLUMNS (
'DIM_DATE'[Mois],
'DIM_COMMERCIAL'[Region],
"Visites", [Nb Visites]
)
- Gain : l'optimisation est ciblée. Limite : sans budget, la performance se dégrade version après version.
- Difficulté : 3/5 · Effort : 3/5.
Symptôme : le rapport est rapide au développement, lent en production. Cause : jeu de test réduit ; une cardinalité qui explose n'apparaît qu'avec le volume réel. Remède : tester avec la volumétrie de production (ou un échantillon proportionnel).
🟡 Niveau 4 — Budgété#
- Signes : chaque livraison passe un jeu de requêtes de référence (ex. 20 requêtes DAX extraites de Performance Analyzer, rejouées par script) et compare les durées à la version précédente. Un dépassement de seuil bloque ou alerte.
- Gain : la régression se voit avant l'utilisateur.
- Limite : le budget se périme si les usages changent.
- Difficulté : 4/5 · Effort : 4/5.
🔴 Niveau 5 — Garanti#
- Signes : test de charge concurrente, projection de croissance, cible P95 tenue. Choix d'architecture assumés : Import pour le chaud, DirectQuery/Direct Lake pour le très volumineux, agrégations automatiques ou manuelles, partitions.
- Gain : la performance cesse d'être une surprise.
- Limite : coût (capacité, CST) ; arbitrage fraîcheur/vitesse.
- Difficulté : 5/5 · Effort : 5/5.
Dans un modèle DirectQuery, la performance se joue dans la base : index columnstore ou couvrants, statistiques à jour, vues simples sans fonctions scalaires. Vérifie le SQL émis (Profiler/Extended Events) avant de « tuner » le DAX.
Une règle de page : un visuel = une question. Remplace dix cartes KPI par une matrice, et les segments (slicers) inutiles par un filtre de page.
Les assistants savent expliquer un plan de requête et proposer des réécritures DAX ; ils ne connaissent pas votre cardinalité réelle. Colle les timings Server Timings, pas seulement le code.
6. Atteinte partielle et notation#
Règle commune. « Un 5 partiel » : le P95 est tenu en conditions nominales mais aucun test de charge n'a été mené (BI-PRF-5.1 = 0), la projection de croissance existe (5.2 = 1), la cible P95 est atteinte sur 3 pages sur 5 (5.3 = 0,5) ; le niveau 5 n'est pas acquis tant qu'un jalon est à 0.
7. Passer au niveau suivant#
Moyens possibles (facultatifs) :
| Passage | Leviers possibles |
|---|---|
| 1 → 2 | Performance Analyzer, VertiPaq Analyzer, suppression des colonnes inutiles |
| 2 → 3 | Réduction de cardinalité, DAX Studio, agrégations, limitation des visuels |
| 3 → 4 | Jeu de test volumineux, requêtes de référence rejouées par script, seuils en pipeline |
| 4 → 5 | Test de charge, planification de capacité, partitionnement, tables d'agrégats automatiques |
Pièges :
- Optimiser la mesure qui coûte 40 ms alors que la page lance 25 visuels : toujours chercher d'abord le plus gros contributeur.
- Goodhart : un budget « < 3 s » atteint en masquant les visuels lents derrière des signets : la lenteur est cachée, pas résolue.
- Les mesures sur capacité partagée varient selon la charge environnante : mesurer en alternance, plusieurs fois, jamais une seule exécution.
8. Voir aussi#
- Thèmes voisins : MOD · DAX · ETL · OPS · CST
- Autres matrices : DL — performance et scalabilité
- Contenus : OneLake — architecture · SQL Server SaaS — difficultés et pièges · Comparatif OneLake vs SQL Server · Bonnes pratiques Power BI
✻ Rédigé par Claude Sonnet 5.5