

- Description
- Coffre-fort ancien en bois précieux, renforcé de ferrures de laiton ouvragées.
- Source
- 14GTR · page d’origine
- Licence
- CC0 Domaine public
Gestion de source pour les données : SQL et Power BI
Versionner des objets SQL de façon rejouable : scripts idempotents, state-based contre migration-based, SSDT/dacpac, Flyway, Liquibase.
En bref
- Versionner des objets SQL de façon rejouable : scripts idempotents, state-based contre migration-based, SSDT/dacpac, Flyway, Liquibase.
- Versionner Power BI de manière fusionnable : PBIP, PBIR, TMDL, diffs et fusions, pièges des binaires.
- Maîtriser encodages, BOM, fins de ligne et
.gitattributespour ne jamais corrompre un accent. - Gérer gros fichiers, secrets, données de référence, kits d'installation et tags de release.
- Savoir où l'IA aide (diff de schéma, documentation, revue) et où elle est dangereuse.
Fil rouge illustratif : un datamart SQL Server alimenté par une application de force de vente terrain, avec rapports Power BI multilingues, livré en kits d'installation.
Sur cette page
- Ce qui change avec les données
- Ce que l'on versionne
- State-based et migration-based pour SQL
- Scripts idempotents
- Outils SSDT, dacpac, Flyway, Liquibase
- Versionner Power BI (PBIP, PBIR, TMDL)
- Diffs et fusions de TMDL et de JSON de rapport
- Encodages, BOM et fins de ligne
- Gros fichiers et binaires
- Secrets et données de référence
- Kits d'installation et tags de release
- Organisation du dépôt
- Contribution de l'IA
- Pièges récapitulatifs
- Voir aussi
Niveau : 🟡→🔴
Ce qui change avec les données#
🟡 Niveau pratique
Versionner du code applicatif est « sans état » : on remplace les binaires. Versionner une base de données est différent : la base contient un état (tables remplies, historiques, paramétrages client) qu'on ne peut pas remplacer. Il faut donc versionner la manière d'évoluer (migrations) autant que la cible. Trois conséquences :
- Chaque modification doit être rejouable sur un environnement existant (idempotence, non destructivité).
- Deux branches qui modifient la même table produisent des migrations conflictuelles par l'ordre, sans conflit de fichiers.
- Les rapports et le modèle sémantique consomment le schéma : le versionnement doit lier les couches (monorepo, PR coordonnées, tags communs).
Voir aussi CI/CD pour la data et la matrice Versionnement et industrialisation des rapports.
Ce que l'on versionne#
🟡 Niveau pratique
| Catégorie | Exemples | Format | Qualité de diff/fusion |
|---|---|---|---|
| Schéma et programmes SQL | Tables, vues, procédures, fonctions | .sql texte |
Excellente |
| Données de référence | Paramètres, listes, libellés multilingues | .sql (MERGE), .csv |
Bonne si triée et stable |
| Modèle sémantique | Tables, mesures DAX, relations | TMDL (texte) | Bonne |
| Définition de rapport | Pages, visuels | PBIR (JSON) | Moyenne (verbeux, identifiants) |
| Rapport monolithique | .pbix |
Binaire | Nulle |
| Scripts d'orchestration | PowerShell, YAML de pipelines | Texte | Excellente |
| Documentation | Markdown | Texte | Excellente |
| Kits générés | .zip, dossier d'installation |
Binaire/texte | À ne pas versionner (régénérables) ou à archiver comme artefacts |
Versionner les sources, pas les produits dérivés. Un kit d'installation est généré depuis les sources ; on le garde comme artefact de build (stocké par le pipeline, adressé par version), pas comme fichier à fusionner. Exception : un snapshot de release figé quand l'archivage contractuel l'exige.
State-based et migration-based pour SQL#
🟡 Niveau pratique
Deux philosophies pour décrire l'évolution d'un schéma :
| State-based (état cible) | Migration-based (changements ordonnés) | |
|---|---|---|
| Ce qu'on versionne | La définition finale de chaque objet | Une suite de scripts de changement numérotés |
| Génération du déploiement | L'outil compare cible et base, génère le delta | On rejoue les scripts non encore appliqués |
| Atouts | Lisible (un fichier = un objet), diff naturel, pas de dérive d'ordre | Contrôle exact (transformations de données), reproductible, adapté aux migrations complexes |
| Limites | Le delta généré peut être destructeur (ex. renommage = drop/create), transformations de données non déduites | Chaîne qui s'allonge, conflits d'ordre entre branches, lecture de l'état courant difficile |
| Outils | SSDT/SqlPackage (dacpac), Redgate SQL Source Control | Flyway, Liquibase, DbUp, EF migrations, Redgate Deploy |
| Notes /5 (équipe 5-15, datamart) | Lisibilité 5, sûreté 3 | Lisibilité 3, sûreté 5 |
Approche hybride fréquente et saine : état cible pour les objets sans état (vues, procédures, fonctions : CREATE OR ALTER), migrations pour les objets à état (tables : ajout de colonne, changement de type, backfill de données).
Dans un datamart recalculé à chaque consolidation, les tables de faits et dimensions sont reconstruites par des programmes : l'état cible (la définition du programme) est ce qu'on versionne, et la table est jetable. En revanche, une table de paramétrage ou de journal contient un état qu'il faut migrer sans perte : migration-based pour elle.
Scripts idempotents#
🟡 Niveau pratique
Un script est idempotent s'il peut être rejoué plusieurs fois avec le même résultat et sans erreur. C'est la condition d'un déploiement fiable sur des environnements dans des états différents.
-- Procédure : état cible
CREATE OR ALTER PROCEDURE [dm].[p_Exemple]
AS
BEGIN
SET NOCOUNT ON;
-- ...
END;
GO
-- Colonne : migration idempotente
IF COL_LENGTH('dm.DIM_CLIENT', 'CLI_SEGMENT') IS NULL
ALTER TABLE [dm].[DIM_CLIENT] ADD [CLI_SEGMENT] nvarchar(20) NULL;
GO
-- Donnée de référence : MERGE
MERGE [dbo].[_Parametre] AS T
USING (VALUES (N'SEUIL_COUVERTURE', N'0.80')) AS S([Nom], [Valeur])
ON T.[Nom] = S.[Nom]
WHEN NOT MATCHED THEN INSERT ([Nom], [Valeur]) VALUES (S.[Nom], S.[Valeur]);
-- (pas de WHEN MATCHED UPDATE : ne pas écraser la personnalisation client)
GO
Règles :
- Protéger avec
IF EXISTS/IF NOT EXISTSouCREATE OR ALTER; éviterDROPnon gardé. - Ne pas écraser les valeurs personnalisées par le client : installation non destructive, séparer paramétrage standard et spécifique.
- Ordre : numéroter les scripts (
010_Core,020_…) pour que l'ordre de rejeu soit déterministe. - Transactions : envelopper les changements de schéma à plusieurs étapes ; attention aux opérations DDL non transactionnelles.
- Un script, un sujet ; commentaires d'en-tête (objet, version, tickets) mais pas de journal de corrections dans le corps : l'historique est dans la GDS.
Le MERGE T-SQL comporte des cas limites connus (concurrence, doublons dans la source, triggers) ; testez, utilisez HOLDLOCK si concurrence, et dédupliquez la source.
Outils SSDT, dacpac, Flyway, Liquibase#
🔴 Niveau expert
| Outil | Modèle | Notes | Remarques |
|---|---|---|---|
| SSDT (projets SQL de Visual Studio) / projets SDK-style (Microsoft.Build.Sql) | State-based | 4/5 pour un projet SQL Server centré sur le schéma | Compile le projet, détecte erreurs de référence à la compilation ; produit un dacpac |
| SqlPackage | Déploiement dacpac | 4/5 | publish génère le delta ; options /p:BlockOnPossibleDataLoss=True, DropObjectsNotInSource : dangereuse à mal régler |
| Flyway | Migration-based | 4/5 | Fichiers V1__nom.sql, table d'historique, versions repeatable R__ pour objets rejouables |
| Liquibase | Migration-based (XML/YAML/SQL) | 4/5 | Changelog déclaratif, rollback, contextes |
| DbUp | Migration-based (.NET) | 3/5 | Léger, intégré à du code C# |
| Redgate | Les deux | 4/5 | Commercial |
| Scripts maison + kit | Hybride | 3/5 | Souplesse maximale, exigence de discipline (ordre, idempotence, tests) |
Choisir : un projet SSDT est le meilleur filet pour un schéma complexe (références vérifiées, comparaison cible/base) ; Flyway/Liquibase pour des équipes qui privilégient la migration explicite ; scripts maison quand le produit génère une grande partie du schéma par programmes (comme un datamart piloté par métadonnées) — à condition d'automatiser les contrôles (syntaxe, ordre, idempotence, test de rejeu à blanc).
# Exemple : déployer un dacpac en bloquant toute perte de données
sqlpackage /Action:Publish /SourceFile:Datamart.dacpac `
/TargetConnectionString:"..." /p:BlockOnPossibleDataLoss=True /p:DropObjectsNotInSource=False
Test de rejeu systématique : appliquer le kit sur (1) une base vide, (2) une copie de base d'un client existant ; comparer le schéma obtenu (sqlpackage /Action:DeployReport ou comparaison de schéma). Si les deux diffèrent, le script n'est pas idempotent.
Versionner Power BI (PBIP, PBIR, TMDL)#
🟡 Niveau pratique
Le fichier .pbix est un zip binaire : pas de diff, pas de fusion, historique opaque. Le format projet Power BI (PBIP) décompose l'artefact en dossiers texte :
MonRapport.pbip (pointeur)
MonRapport.SemanticModel/
definition.pbism
definition/
model.tmdl
relationships.tmdl
tables/
FAITS.tmdl
CLIENT.tmdl
cultures/
fr-FR.tmdl en-US.tmdl (traductions)
MonRapport.Report/
definition.pbir
definition/
report.json
pages/
pages.json
<id-page>/page.json
<id-page>/visuals/<id-visuel>/visual.json
- TMDL (Tabular Model Definition Language) : syntaxe texte lisible du modèle sémantique (tables, colonnes, mesures DAX, relations, rôles RLS, cultures). Une table = un fichier ; les mesures sont lisibles ligne à ligne.
- PBIR : format de définition de rapport en fichiers JSON (un visuel = un fichier) : diffs ciblés, fusion possible. Le format remplace l'ancienne définition monolithique
report.json(PBIR-Legacy) : d'après la documentation Power BI (état 2026-10), PBIR est en disponibilité générale et constitue le format de rapport par défaut ; un rapport PBIR-Legacy modifié puis enregistré est converti automatiquement en PBIR. - Git intégré à Fabric / Power BI : synchronise un espace de travail avec un dépôt Git (Azure DevOps ou GitHub) ; sérialise dans ces formats. Pas de support TFVC : une raison supplémentaire de migrer pour un projet qui veut l'intégration native au service.
- Les rapports clients liés à un modèle par identifiant : les lineageTag des mesures/colonnes assurent la continuité des rapports qui y sont connectés ; modifier une mesure en place (et jamais supprimer/recréer) préserve le lien. C'est un invariant à protéger par revue.
Un même modèle sémantique ne doit pas être édité simultanément dans Desktop et par script/Tabular Editor sans synchronisation : Desktop réécrit les fichiers à l'enregistrement (ordre, mise en forme). Symptôme : diff énorme sans changement réel. Remède : une seule personne/outil à la fois, committer avant et après une session d'édition.
Depuis Desktop, enregistrez au type Power BI Project (.pbip) (Fichier → Enregistrer sous) et choisissez TMDL comme format du modèle sémantique ; PBIR est désormais le format de rapport par défaut. Contrôlez la validité par un validateur de syntaxe TMDL avant d'ouvrir (ou par Tabular Editor/outils CLI), car un fichier mal indenté empêche l'ouverture du projet.
Diffs et fusions de TMDL et de JSON de rapport#
🔴 Niveau expert
TMDL : indentation significative (comme YAML) et mesures multi-lignes. Les fusions échouent surtout par :
- Indentation modifiée d'un côté (reformatage) → conflit sur tout le bloc.
- Réordonnancement de colonnes/mesures par Desktop → diff bruyant.
- Identifiants
lineageTaggénérés : deux ajouts concurrents ne les mélangent pas, mais une copie d'objet duplique le tag (à renouveler). - Annotations internes (
PBI_QueryRelationships, etc.) régénérées.
Parades : conventions de formatage uniques, éditer des blocs distincts (une personne par table), git diff --word-diff, résolution manuelle puis ouverture dans Desktop pour valider, et garder les fusions de modèle petites et fréquentes.
JSON de rapport (PBIR) : un visuel par fichier limite les conflits ; mais le positionnement (x, y, largeur) et les identifiants de pages changent dès qu'on déplace un objet. Sur un conflit, privilégier la version d'un seul côté (page entière) plutôt qu'une fusion fine.
git diff --word-diff=color -- "*.tmdl"
git diff --stat main...feature -- "*.Report/*"
# Outil de fusion : configurer un mergetool pour TMDL/JSON
git config merge.tool vscode
git config mergetool.vscode.cmd 'code --wait --merge $REMOTE $LOCAL $BASE $MERGED'
| Aspect | .pbix |
PBIP + TMDL + PBIR |
|---|---|---|
| Diff lisible | 0/5 | 4/5 |
| Fusion de deux éditions concurrentes | 0/5 | 3/5 |
| Revue de code (PR) | 0/5 | 4/5 |
| Facilité pour un utilisateur métier | 5/5 | 3/5 |
| Taille du dépôt | 2/5 | 4/5 |
| Adéquation CI/CD (validation, déploiement) | 1/5 | 4/5 |
Contexte : équipe 3-15 personnes, rapports d'entreprise multilingues ; appréciations d'expert (NOTATION).
Une migration de rapport vers un modèle de référence implique des centaines de fichiers JSON. En PBIP, la PR liste précisément les visuels modifiés ; un script de contrôle peut valider tous les champs référencés par chaque visuel contre le modèle avant la fusion. En .pbix, il faudrait ouvrir chaque fichier à la main.
Encodages, BOM et fins de ligne#
🔴 Niveau expert
Sujet vital pour du contenu multilingue accentué : une erreur d'encodage détruit les accents sans message d'erreur.
| Encodage | SSMS / sqlcmd par défaut |
sqlcmd -f 65001 |
PowerShell 5.1 |
|---|---|---|---|
| UTF-8 avec BOM | ✅ | ✅ | ✅ |
| UTF-8 sans BOM | ❌ mojibake | ✅ | ❌ mojibake |
| cp1252 / ISO-8859-1 | ✅ | ❌ (U+FFFD) |
✅ |
Lecture : UTF-8 avec BOM est, pour les .sql et .ps1 exécutés sous Windows, le seul encodage décodé correctement dans tous les cas ; UTF-8 sans BOM est la norme attendue par d'autres outils (Node, Markdown/YAML, TMDL/JSON écrits par Power BI Desktop). Règle d'équipe : un encodage par type de fichier, documenté, vérifié automatiquement.
| Type | Encodage recommandé | Raison |
|---|---|---|
.sql, .ps1 |
UTF-8 avec BOM | SSMS, sqlcmd, PowerShell 5.1 |
.tmdl, .pbir, .pbism, JSON de rapport |
UTF-8 sans BOM | Écrits par Power BI Desktop, qui les réécrit |
.md, .yml, .js |
UTF-8 sans BOM | Un BOM avant le frontmatter YAML casse certains analyseurs |
.bat, .cmd |
Page de code OEM/ANSI selon contenu | Attention aux accents |
Fins de ligne : LF dans le dépôt (normalisation) ; CRLF sur disque Windows si l'outil le veut. Les fichiers TMDL écrits par Desktop sont en CRLF.
.gitattributes type :
# Normalisation par défaut : texte détecté, LF dans le dépôt
* text=auto
# Sources SQL et PowerShell : texte
*.sql text working-tree-encoding=UTF-8 eol=lf
*.ps1 text eol=lf
# Fichiers écrits par Power BI Desktop : ne pas modifier les fins de ligne
*.tmdl text eol=crlf
*.pbir text eol=crlf
*.json text
# Binaires : jamais touchés
*.pbix binary
*.zip binary
*.png binary
*.bak binary
Remarques d'expert :
working-tree-encodingconvertit à la lecture/écriture (utile pour cp1252 ↔ UTF-8) mais ne gère pas le BOM à votre place : il faut contrôler la présence de BOM par un hook ou un script de validation.- Les fichiers
*.sql« avec BOM » sont à détecter dans unpre-commit: lire les 3 premiers octetsEF BB BF. - Sous TFVC, il n'y a pas de normalisation automatique ; l'encodage est celui du fichier stocké (propriété de type de fichier : encodage détecté au
add). Un outil qui « réécrit » un fichier avec un autre encodage provoque un changeset parasite. - Ne jamais lire puis réécrire un fichier dont on ne connaît pas l'encodage avec un outil qui suppose UTF-8 : tous les accents du fichier sont corrompus, pas seulement la ligne éditée.
sed -iet certains outils suppriment les CR des fichiers CRLF : privilégier des traitements binaires (Python) ou l'éditeur du projet.
# Contrôle : tous les .sql ont-ils un BOM UTF-8 ?
Get-ChildItem -Recurse -Filter *.sql | ForEach-Object {
$b = [System.IO.File]::ReadAllBytes($_.FullName) | Select-Object -First 3
if (-not ($b[0] -eq 0xEF -and $b[1] -eq 0xBB -and $b[2] -eq 0xBF)) { $_.FullName }
}
# Écriture d'un fichier avec BOM
$enc = New-Object System.Text.UTF8Encoding $true
[System.IO.File]::WriteAllText($chemin, $contenu, $enc)
Symptôme : libellés « Détail » après déploiement. Cause : fichier UTF-8 sans BOM exécuté par un outil qui le lit en ANSI (ou l'inverse). Un déploiement peut réussir (code retour 0) en corrompant tous les libellés. Remède : BOM sur les sources exécutées par sqlcmd/PowerShell, test de rejeu avec un libellé accentué témoin (ex. une valeur « Éléphant ç œ » relue après installation).
Gros fichiers et binaires#
🔴 Niveau expert
- Ne pas versionner : sauvegardes
.bak, exports massifs, caches Power BI (cache.abf),localSettings.json, dossiersbin/obj/node_modules. .pbixinévitables (anciens rapports) : Git LFS (avec verrouillage), ou stockage d'artefacts hors dépôt ; mieux : les convertir en PBIP.- Jeux de données d'exemple : petits (quelques Mo) ; sinon, script générateur versionné plutôt que la donnée.
- Taille d'historique : un binaire ajouté puis supprimé reste dans l'historique :
git filter-repopour purger (02). - TFVC accepte les binaires sans extension, mais la base de collection grossit ; surveiller.
Seuils d'ordre de grandeur (à adapter) : alerter à partir de ~10 Mo par fichier, refuser au-delà de ~100 Mo sans LFS (plafonds d'hébergeur à vérifier).
Secrets et données de référence#
🔴 Niveau expert
Secrets : chaînes de connexion, mots de passe, clés de stockage, jetons. Dans un projet data, ils se cachent dans : fichiers de configuration appsettings, scripts PowerShell de déploiement, paramètres de sources de données Power BI (expressions.tmdl avec serveur et base), pipelines. Règles : authentification intégrée/identités managées plutôt que mots de passe ; coffre pour le reste ; paramètres par environnement hors dépôt ; analyse de secrets à chaque PR (détails).
Les noms de serveurs et de bases de production dans les fichiers TMDL ne sont pas des mots de passe, mais ils sont des informations sensibles (cartographie). Paramétrer par environnement (paramètres Power Query) plutôt que d'écrire des valeurs fixes.
Données de référence (paramètres, listes de valeurs, libellés traduits) :
- Les versionner sous forme de scripts rejouables (
MERGEsans écrasement du paramétrage client) ou de fichiers.csvtriés et stables (colonnes dans un ordre fixe, tri par clé) pour un diff propre. - Ne pas versionner de données personnelles (RGPD) ; pour des jeux de test, anonymiser/synthétiser.
- Séparer standard (livré, versionné) de personnalisé/projet (client, hors produit ou dans un dossier dédié) ; héritage et ordre de priorité documentés.
- Traductions : fichier source unique (table de libellés), génération vers les cultures du modèle ; le diff des traductions doit être lisible (une ligne par clé et par langue).
Kits d'installation et tags de release#
🔴 Niveau expert
Un kit d'installation est l'ensemble ordonné des scripts (SQL, PowerShell) qui installe ou met à niveau le produit. Il se génère depuis les sources et se rejoue sur des environnements existants.
Invariants à garantir :
- Reproductibilité : le kit d'une version doit pouvoir être régénéré exactement depuis le tag correspondant.
- Ordre déterministe et idempotence (voir plus haut).
- Traçabilité : la version installée est inscrite dans la base (table de version) et dans le journal d'installation ; on relie version ↔ tag ↔ changeset/commit.
- Intégrité : somme de contrôle du kit ; signature du tag.
- Exécution fiable : les options d'exécution documentées (ex.
sqlcmd -x -Xpour désactiver substitution de variables et commandes) ; un kit qui « s'installe avec succès » en corrompant des accents ou en sautant des fichiers est pire qu'un échec franc : faire échouer bruyamment.
Tags de release :
git tag -s v9.1.2 -m "Kit 9.1.2 — correctifs consolidation"
git push origin v9.1.2
git describe --tags # v9.1.2-3-gabc1234 : 3 commits après le tag
git archive --format=zip --prefix=kit-9.1.2/ v9.1.2 -o kit-9.1.2.zip
Sous TFVC : un changeset de référence documenté + branche de release + (éventuellement) label ; consigner le numéro de changeset dans les notes de livraison.
Version sortie ≠ kit produit : tagger quand le kit est construit ; marquer « livré » seulement après documentation publiée et feu vert qualité. Gardez les deux événements distincts dans le registre de versions.
Organisation du dépôt#
🔴 Niveau expert
Proposition d'arborescence pour un projet datamart + BI en monorepo :
/Datamart/ scripts SQL numérotés (010_Core, 020_..)
/Reports/ projets PBIP (SemanticModel + Report)
/Tools/ scripts PowerShell, outils internes
/Docs/ documentation Markdown
/Releases/ (éventuellement) instantanés figés, un dossier par version
/.gitattributes /.gitignore /.tfignore (si TFVC)
/CHANGELOG.md suivi métier versionné
- Un README par dossier structurant (rôle, contenu, conventions) ; un README qui contredit le code est un défaut au même titre qu'un test rouge.
- Changelog : séparer le journal de travail quotidien (local, non archivé) du suivi métier par version (archivé).
- Pas de journal de corrections dans le code : l'historique de la GDS suffit ; l'en-tête porte la version et les métadonnées.
Contribution de l'IA#
Usages pertinents pour la GDS des données.
| Cas d'usage | Gain | Risque | Maturité | Prérequis | Garde-fous |
|---|---|---|---|---|---|
| Expliquer le diff d'une procédure SQL ou d'une mesure DAX | 4/5 | 3/5 | 4/5 | Diff isolé | Rejouer sur données, vérifier les cas limites (NULL, doublons) |
| Générer le script de migration idempotent à partir d'un diff de schéma | 4/5 | 4/5 | 3/5 | Schéma de départ et cible | Tester sur copie, relire tout DROP/ALTER ; l'IA ne voit pas les données |
| Rédiger/commenter des messages de commit et notes de version | 4/5 | 2/5 | 4/5 | Commits atomiques | Relecture, pas de secrets dans le prompt |
| Résoudre un conflit TMDL/JSON | 3/5 | 4/5 | 3/5 | Les deux versions et le modèle | Ouvrir dans Desktop, valider les relations ; ne pas supprimer/recréer une mesure |
Écrire un contrôle (BOM, encodage, lineageTag dupliqués, isKey en double) |
5/5 | 2/5 | 4/5 | Règles explicites | Tester sur cas positifs et négatifs |
| Documenter un modèle (dictionnaire de mesures) | 4/5 | 3/5 | 4/5 | TMDL en entrée | Valider le sens métier avec les experts |
| Revue de code SQL (anti-patterns, performances) | 3/5 | 3/5 | 3/5 | Normes d'équipe | Faux positifs ; plan d'exécution réel indispensable |
| Dépannage de pipeline de déploiement | 3/5 | 3/5 | 3/5 | Logs expurgés | Ne pas coller de secrets |
Exemples de prompts :
Voici deux versions d'une table TMDL (avant/après). Liste les changements
fonctionnels (mesures ajoutées, expressions DAX modifiées, relations changées)
et signale tout risque de rupture pour des rapports liés par lineageTag.
N'invente rien : cite la ligne concernée.
Écris un script T-SQL idempotent qui ajoute la colonne [CLI_SEGMENT] nvarchar(20)
NULL à [dm].[DIM_CLIENT] si elle n'existe pas, sans toucher aux données.
Ajoute un test de vérification final qui lève une erreur si la colonne manque.
Limites à garder en tête : l'IA n'exécute pas vos migrations ni ne connaît vos données ; elle « corrige » volontiers un accent ou une indentation qu'il fallait préserver ; elle peut proposer de supprimer et recréer un objet dont l'identité compte (mesure, colonne liée). La responsabilité de la mise en production reste humaine. Voir IA et outils et la synthèse transverse.
Pièges récapitulatifs#
🔴 Niveau expert
| Piège | Symptôme | Remède |
|---|---|---|
Commit d'un .pbix |
Dépôt gonfle, aucun diff | PBIP, ou LFS |
| Encodage non contrôlé | Accents corrompus à l'installation | BOM, hook, test avec libellé témoin |
| Normalisation de fins de ligne tardive | Diff de tout | .gitattributes dès le début |
| Mesure supprimée puis recréée | Rapports clients cassés | Modifier en place |
| Deux colonnes clé dans une table de modèle | Projet non ouvrable | Contrôle automatique (une seule isKey) |
| Script non idempotent | Échec au 2ᵉ rejeu | Gardes IF EXISTS, test de rejeu |
DROP non gardé dans un kit |
Perte de paramétrage client | Revue systématique des DROP |
Secret dans un TMDL ou un .ps1 |
Fuite | Coffre, scan, rotation |
| Branches parallèles modifiant la même table | Migrations conflictuelles | Coordination, ordre, tests de rejeu |
| Kit non reproductible | « Ça marchait sur ma machine » | Générer depuis tag, dans un pipeline |
Voir aussi#
- Panorama des GDS · Git en profondeur · TFVC en profondeur · Git vs TFVC · Stratégies de branches
- CI/CD pour la data · CI/CD
- Matrice BI : versionnement et industrialisation des rapports
- Bonnes pratiques Power BI transverses · Glossaire
✻ Rédigé par Claude Sonnet 5.5