Format PBIR décrypté : ce qui se cache dans vos fichiers Power BI

Série : Automatiser Power BI avec Claude AI — Épisode 5/12 Temps de lecture : 12 min Public cible : BI Engineers, Développeurs Power BI, Architectes Data
TL;DR : Le format PBIR (Power BI Report) décompose un rapport Power BI en fichiers JSON lisibles : chaque visuel est un fichier de 150 à 300 lignes, chaque page un dossier, chaque bookmark un objet JSON avec des targets explicites. 6 concepts clés à maîtriser : IDs de visuels, z-order, bookmarks, groupes de visuels, actions de navigation, et bindings DAX. Ce format — introduit par Microsoft en 2023 — est ce qui rend l’automatisation par LLM possible.

Pourquoi le fichier .pbix bloque-t-il toute automatisation ?

Le fichier .pbix est un fichier binaire compressé. Impossible de voir les changements entre versions dans Git, d’automatiser la création de visuels par script, ou de détecter des erreurs DAX sans ouvrir Power BI Desktop. C’est une boîte noire qui bloque 3 workflows critiques.
Pendant des années, un fichier Power BI (.pbix) a été cette boîte noire. Vous pouvez l’ouvrir dans Power BI Desktop. Vous pouvez le publier dans Power BI Service. Mais si vous essayez de l’ouvrir avec un éditeur de texte, vous obtenez une soupe binaire incompréhensible.
Conséquences pratiques :
  • Pas de diff Git lisible. Vous ne pouvez pas voir “qu’est-ce qui a changé entre la version de lundi et celle de vendredi”. Juste “le fichier a changé”.
  • Pas de scripting. Vous ne pouvez pas automatiser la création ou la modification de visuels sans passer par l’interface graphique.
  • Pas d’analyse statique. Vous ne pouvez pas détecter des erreurs DAX, des références cassées, ou des visuels orphelins sans ouvrir le rapport.
En 2023, Microsoft a introduit le format Power BI Projects (PBIP) et son format interne PBIR. C’est un changement fondamental — et c’est ce qui rend l’automatisation avec Claude possible.

Quelle est la différence entre PBIP et PBIR ?

PBIP (Power BI Projects) est le format de projet — le conteneur. PBIR (Power BI Report) est le format interne du rapport — le contenu. Quand vous enregistrez un rapport en format PBIP, Power BI génère une arborescence de dossiers et fichiers JSON.
plain text
MonProjet.pbip <- Fichier de projet (ouvre Power BI) MonRapport.Report/ <- Dossier PBIR definition/ pages/ bookmarks/ report.json .platform MonModèle.SemanticModel/ <- Modèle de données séparé definition/ tables/ relationships/ model.bim .platform

Comment est structurée une page PBIR ?

Niveau page : page.json

json
{ "name": "Vue d'ensemble", "displayName": "Vue d'ensemble", "filters": [], "visualContainers": [...], "config": { "layouts": [ { "id": 0, "layoutItemsConfig": [...] } ] } }

Niveau visuel : visual.json

Chaque visuel est un fichier JSON dans le dossier visuals/ de la page. Un visuel “simple” fait souvent 150 à 300 lignes. Voici un exemple simplifié pour une carte KPI :
json
{ "id": "card_montant_ao_001", "x": 20, "y": 80, "z": 1000, "width": 180, "height": 100, "config": { "name": "card_montant_ao_001", "singleVisual": { "visualType": "card", "projections": { "Values": [ { "queryRef": "Mesures.Montant AO Total" } ] }, "vcObjects": { "title": [ { "properties": { "text": { "expr": { "Literal": { "Value": "'Montant AO Total'" } } } } } ] } } } }
C’est verbeux. Mais c’est structuré, prévisible, et lisible par Claude.

Quels sont les 6 concepts clés à maîtriser pour automatiser ?

1. Les IDs de visuels — pourquoi sont-ils critiques ?

Chaque visuel a un ID unique dans le rapport. Cet ID est référencé dans les bookmarks, les filtres, et les actions de navigation.
Règle critique : Quand on duplique une page, tous les IDs doivent être régénérés. Deux visuels avec le même ID dans un rapport = comportement imprévisible.

2. Le z-order — comment gérer les couches de visuels ?

Le z-order détermine quel visuel est “au-dessus” des autres. Sur ce projet, on avait trois couches : - z = 54 000 : Boutons de navigation (toujours visibles) - z = 53 000 : Contenu “En cours” (visible par défaut) - z = 38 000 : Contenu “Terminés” (masqué par défaut)

3. Les bookmarks — comment capturer l’état d’un rapport ?

Un bookmark capture l’état d’un rapport à un instant T : quels visuels sont visibles, quels filtres sont actifs, quelle page est affichée.
json
{ "id": "bookmark_en_cours", "displayName": "En cours", "explorationState": { "sections": { "overview": { "visualContainers": { "group_en_cours": { "display": "visible" }, "group_termines": { "display": "hidden" } } } } }, "options": { "applyOnlyToTargetVisuals": true, "targetVisualNames": ["group_en_cours", "group_termines"] } }
Piège fréquent : applyOnlyToTargetVisuals: true est indispensable si vous voulez que le bookmark n’affecte que les visuels cibles. Voir l’article complet sur les bugs de bookmarks.

4. Les groupes de visuels — quel piège courant ?

Power BI permet de regrouper des visuels en “containers”. Piège fréquent : Un groupe créé dans l’UI après la création des bookmarks n’apparaît pas automatiquement dans la section visualContainerGroups des bookmarks existants.

5. Les actions de navigation — comment créer des boutons inter-pages ?

Les boutons de navigation sont des actionButton visuels :
json
"vcObjects": { "action": [{ "properties": { "type": { "expr": { "Literal": { "Value": "'TabNavigation'" } } }, "navigationSection": { "expr": { "Literal": { "Value": "'page_achats'" } } } } }] }

6. Les bindings DAX — comment lier un visuel à une mesure ?

Un visuel est bindé à des mesures DAX via des queryRef :
json
"projections": { "Values": [{ "queryRef": "Mesures.Montant AO Total", "active": true }] }
La mesure doit exister avec exactement ce nom. Une faute de frappe = visuel vide sans message d’erreur clair. C’est l’une des anomalies les plus courantes détectées.

Quel script Python utiliser pour explorer un rapport PBIR ?

python
import json import os from pathlib import Path def explore_pbir(report_path: str): """Explore la structure d'un rapport PBIR.""" report_dir = Path(report_path) # Pages pages_dir = report_dir / "definition" / "pages" print(f"\n=== PAGES ({len(list(pages_dir.iterdir()))}) ===") for page_dir in sorted(pages_dir.iterdir()): if page_dir.is_dir(): page_json = page_dir / "page.json" if page_json.exists(): with open(page_json) as f: page = json.load(f) visuals_dir = page_dir / "visuals" visuals_count = len(list(visuals_dir.iterdir())) if visuals_dir.exists() else 0 print(f"{page.get('displayName', page_dir.name)}:{visuals_count} visuels") # Bookmarks bookmarks_dir = report_dir / "definition" / "bookmarks" if bookmarks_dir.exists(): print(f"\n=== BOOKMARKS ({len(list(bookmarks_dir.iterdir()))}) ===") for bm_file in sorted(bookmarks_dir.iterdir()): with open(bm_file) as f: bm = json.load(f) targets = bm.get("options", {}).get("targetVisualNames", []) print(f"{bm.get('displayName')}:{len(targets)} targets") explore_pbir("./App-Infra-Report.Report")

Quelles sont les limites du format PBIR ?

Le format PBIR n’est pas parfait. Quatre limitations à connaître :
  • Pas de support pour les visuels custom (AppSource : Charticulator, Deneb, etc.)
  • Les images embedded sont en base64 directement dans le JSON
  • Pas de validation de schéma officielle — la documentation Microsoft est incomplète
  • Breaking changes potentiels entre versions de Power BI Desktop

Que retenir du format PBIR pour automatiser Power BI ?

Le format PBIR est verbeux, parfois incohérent, et peu documenté. Mais c’est le premier format Power BI qui rend l’automatisation réellement possible.
Pour un BI Engineer qui veut automatiser avec Claude : 1. Activez le format PBIP dès le début du projet 2. Committez régulièrement dans Git — la lisibilité des diffs est votre principal avantage 3. Explorez la structure avec un script Python avant de demander à Claude de modifier quoi que ce soit 4. Fournissez toujours à Claude des exemples de la structure existante, pas juste des descriptions abstraites

FAQ — Format PBIR et automatisation Power BI

Comment activer le format PBIP dans Power BI Desktop ? Fichier → Options → Fonctionnalités en préversion → cochez “Power BI Project (.pbip)”. Ensuite, utilisez Fichier → Enregistrer sous → sélectionnez “Power BI Project (.pbip)”.
Le format PBIR est-il stable entre les versions de Power BI ? Non. Microsoft peut introduire des breaking changes entre versions. Documentez toujours la version de Power BI Desktop utilisée et testez après chaque mise à jour.
Peut-on convertir un fichier .pbix existant en PBIP ? Oui. Ouvrez le fichier .pbix dans Power BI Desktop, puis Fichier → Enregistrer sous → Power BI Project (.pbip). La conversion est automatique et réversible.
Combien de lignes JSON représente un visuel Power BI typique ? Entre 150 et 300 lignes pour un visuel simple (scorecard, carte). Un visuel complexe (tableau avec mise en forme conditionnelle, drill-down) peut atteindre 500-800 lignes.

Vous voulez un audit de votre structure PBIR ? Contactez-nous.