Dans Power BI, la majorité de vos tables proviennent de sources externes nettoyées dans Power Query. Cependant, le langage DAX possède une capacité souvent sous-estimée : celle de générer de toutes pièces de nouvelles tables calculées directement en mémoire vive.
Dans cette leçon, nous découvrons les cas d'usage stratégiques où une table calculée DAX s'impose comme la solution la plus élégante.
🧭 Qu'est-ce qu'une Table Calculée ?#
Une table calculée est une table dont la structure et les lignes sont déterminées par une expression DAX qui renvoie une table (au lieu d'une valeur scalaire unique).
Elle est calculée une fois pour toutes lors du chargement ou du rafraîchissement des données, puis stockée directement dans le moteur VertiPaq en mémoire.
Pour créer une table calculée : 1. Rendez-vous dans la vue Modèle ou la vue Données. 2. Dans le ruban supérieur, onglet Outils de table, cliquez sur Nouvelle table. 3. Renseignez votre formule DAX dans la barre de formules.
🎯 Les 3 Grands Cas d'Usage Métier#
Cas n°1 : La Dimension à Rôles Multiples (Role-Playing Dimension)#
C'est le cas d'école le plus fréquent en entreprise. Votre table de faits Fact_Ventes comporte deux colonnes de dates distinctes :
- DateCommande : Le jour où le client a validé son achat.
- DateExpedition : Le jour où le colis a quitté l'entrepôt logistique.
Si vous reliez ces deux colonnes à votre unique table Dim_Calendrier, Power BI va rendre la seconde relation inactive (en pointillés), car deux chemins actifs directs sont interdits.
Pour permettre aux directeurs logistiques d'analyser les expéditions sur leur propre calendrier sans forcer l'écriture de formules DAX complexes avec USERELATIONSHIP, la solution consiste à cloner le calendrier :
Vous reliez ensuite Fact_Ventes[DateExpedition] à cette nouvelle table. Vos utilisateurs disposent de deux trancheuses temporelles indépendantes sur leurs rapports !
Cas n°2 : Les Tables de Paramètres pour Scénarios de Simulation (What-If)#
Vous souhaitez permettre aux directeurs financiers de tester l'impact d'une hausse des prix ou d'une remise commerciale variant de 0 % à 25 % avec un pas de 1 % ?
Utilisez la fonction DAX GENERATESERIES() pour créer une table déconnectée :
Param_TauxRemise =
GENERATESERIES(0.0, 0.25, 0.01)
Ensuite, vous créez une mesure qui capture la valeur sélectionnée par l'utilisateur sur le curseur graphique du rapport :
Taux Remise Sélectionné = SELECTEDVALUE(Param_TauxRemise[Value], 0.0)
Cas n°3 : Extraire une Dimension Propre à partir d'une Table Plate#
Si vous avez importé un extrait de données transactionnelles volumineux sans référentiel clients ou produits séparé, vous pouvez isoler vos dimensions en DAX grâce aux fonctions DISTINCT() ou SUMMARIZECOLUMNS() :
Dim_Clients =
SUMMARIZECOLUMNS(
Orders[Customer ID],
"Nom Client", FIRSTNONBLANK(Orders[Customer Name], 1),
"Segment", FIRSTNONBLANK(Orders[Segment], 1)
)
⚖️ Bonnes Pratiques : DAX vs Power Query#
[!WARNING] Ne tombez pas dans le piège du "Tout DAX" !
Les tables calculées en DAX ne bénéficient pas de certaines optimisations avancées de compression de Power Query et ralentissent l'ouverture de votre fichier.pbixlorsqu'elles sont trop volumineuses.La règle d'architecture :
- Si une table peut être créée ou fusionnée en amont dans Power Query (ou dans la base SQL), faites-le dans Power Query ! - Réservez les tables calculées DAX aux calendriers, aux scénarios What-If et aux dimensions clonées qui dépendent directement de la dynamique du modèle en mémoire.
Vous savez désormais quand et comment concevoir des tables calculées. Dans la prochaine leçon, nous allons nous intéresser à une question fondamentale : quand doit-on créer une colonne calculée, et pourquoi les mesures sont presque toujours préférables ?
Commentaires