📊 Data

data-power-bi-designer

Conception de dashboards Power BI — DAX, modèle de données, visualisations avancées et Row-Level Security.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- data-power-bi-designer --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } data-power-bi-designer -Launch"

🚀 Déjà installé ?

claude "/data-power-bi-designer"

Ou tapez /data-power-bi-designer dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

Power BIDAXdashboard Power BIrapport Power BImodèle de données Power BI

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/data-power-bi-designer ~/.claude/skills/

Payload du plugin : skills/data-power-bi-designer · source éditable : data-skills/power-bi-designer

📖 Manuel

Power BI Designer

Workflow

1. Analyser les besoins métier

2. Concevoir le modèle de données (star schema)

// Power Query — typage explicite en fin de requête
#"Types appliqués" = Table.TransformColumnTypes(Source, {
    {"DateVente", type date},
    {"Montant", type number},
    {"IdClient", Int64.Type}
})

3. Connecter et transformer les sources (Power Query / M)

// Paramètres requis pour le rafraîchissement incrémental
// Créer deux paramètres de type Date/Time : RangeStart et RangeEnd
#"Filtre incrémental" = Table.SelectRows(Source, each
    [DateVente] >= RangeStart and [DateVente] < RangeEnd
)

4. Écrire les mesures DAX

Règle fondamentale : mesures pour les calculs dynamiques, colonnes calculées uniquement pour les attributs statiques.

-- Mesure de base
CA Total = SUM(Ventes[Montant])

-- DIVIDE pour éviter les divisions par zéro
Taux Conversion =
DIVIDE(
    COUNTROWS(FILTER(Leads, Leads[Statut] = "Converti")),
    COUNTROWS(Leads),
    0
)

-- YTD (Year-to-Date)
CA YTD =
CALCULATE(
    [CA Total],
    DATESYTD(Calendrier[Date])
)

-- Comparaison année précédente
CA N-1 =
CALCULATE(
    [CA Total],
    SAMEPERIODLASTYEAR(Calendrier[Date])
)

-- Variation %
Var% CA =
DIVIDE([CA Total] - [CA N-1], [CA N-1], BLANK())

-- Mesure avec contexte filtré
CA Région Active =
CALCULATE(
    [CA Total],
    KEEPFILTERS(Régions[Actif] = TRUE())
)

Critères de choix mesure vs colonne calculée :

BesoinMesure DAXColonne calculée
Agrégation dynamiqueOuiNon
Filtre par slicerOuiNon
Attribut de dimension fixeNonOui
Tri personnaliséNonOui

5. Construire les visualisations

Ordre d'une page bien conçue : KPIs haut → graphiques principaux centre → filtres/drill gauche ou haut.

6. Configurer la Row-Level Security (RLS)

-- Rôle "Vendeur" : ne voit que ses propres ventes
[Email Vendeur] = USERPRINCIPALNAME()

-- Rôle "Région" : filtre par région assignée
[Code Région] IN
    VALUES(
        FILTER(RegionUtilisateurs,
            RegionUtilisateurs[Email] = USERPRINCIPALNAME()
        )[Code Région]
    )

7. Optimiser les performances

-- Mauvais : FILTER sur toute la table de faits
Mauvaise Mesure =
CALCULATE([CA Total], FILTER(ALL(Ventes), Ventes[Montant] > 1000))

-- Bon : utiliser KEEPFILTERS ou une dimension
Bonne Mesure =
CALCULATE([CA Total], Ventes[Montant] > 1000)

8. Publier et distribuer


Anti-patterns et pièges

PiègeImpactSolution
Relations bidirectionnelles excessivesAmbiguïté des filtres, résultats incorrectsUnidirectionnel par défaut, bidirectionnel documenté
Colonnes calculées pour les agrégationsModèle lourd, recalcul à chaque refreshMesures DAX
CALCULATE sans REMOVEFILTERSContexte non contrôlé, valeurs surprenantesAjouter ALL() ou ALLEXCEPT() explicitement
Pas de table Calendrier dédiéeTime intelligence impossibleToujours créer une DimCalendrier marquée comme "Date Table"
Ignorer Query FoldingToutes les transformations en mémoire localeVérifier l'icône "Native Query" dans Power Query
RLS testée seulement en localErreurs de périmètre en productionTester avec "View as role" + vérification USERPRINCIPALNAME() en service
Trop de visuels par pageTemps de rendu > 3sMax 8-10 visuels par page

Bonnes pratiques 2026