Le journal des évolutions de PBI Optimizer : ce qu’on a ajouté, amélioré et corrigé, version par version.
Version 1.201.0
Dernière version13 août 2026
PBI Optimizer repère les colonnes de liaison entre tables qui encombrent inutilement votre liste de champs, et les masque - un piège qui fait afficher des chiffres faux sans le moindre message d’erreur.
Ajouté
Quand deux tables sont reliées (les ventes et les clients, par exemple), la colonne qui porte le lien apparaît des deux côtés dans la liste des champs. Du côté des ventes, elle ne sert qu’à retrouver la bonne ligne chez les clients : c’est une « clé étrangère ». Laissée visible, elle propose à l’utilisateur un second chemin qui a l’air identique au bon.
Ce n’est pas qu’une question de rangement. Un filtre posé sur cette colonne-là ne se propage pas jusqu’à l’autre table : les chiffres calculés à partir de celle-ci ne sont alors pas filtrés comme vous le croyez, et le rapport affiche un résultat crédible et faux. Le cas le plus courant concerne les dates - découper par la date des ventes plutôt que par celle du calendrier fait taire silencieusement tous les cumuls et comparaisons dans le temps.
PBI Optimizer ne signale la colonne que s’il a d’abord VÉRIFIÉ qu’aucun visuel ni filtre de votre rapport (ni des rapports liés que vous avez déclarés) ne l’utilise. Sans cette preuve, il se tait : une clé de liaison est parfois l’information que vous voulez lire à l’écran, comme un numéro de commande. Le masquage ne supprime rien, ne modifie aucune valeur, laisse la liaison intacte, et se défait d’un clic droit dans Power BI.
Mesuré avant d’être écrit : la règle se déclenche sur 9 des 19 rapports d’essai, pour 26 colonnes au total. Elle reste muette sur le modèle témoin, celui qui est propre et doit le rester.
Modifié
La section « Cohérence des formules » devient « Justesse des résultats ». Elle regroupe désormais tout ce qui peut faire afficher un chiffre faux sans message d’erreur, et elle reste visible quel que soit l’objectif choisi : la justesse ne se met pas en balance avec la vitesse.
Deux familles y cohabitent, et l’écran les distingue. Les erreurs de logique possibles dans une formule ne sont toujours jamais corrigées automatiquement - les corriger changerait vos chiffres, et vous seul connaissez votre intention. Les pièges de modèle, eux, portent une pastille « corrigeable sans toucher aux valeurs » et des boutons valider / ignorer : aucune valeur n’est fausse, c’est le chemin de lecture qui trompe.
Corrigé
Certaines colonnes calculées étaient mal lues : quand leur formule est écrite sur la même ligne que leur déclaration, les réglages qui suivent (dont « masquée ») étaient avalés par la formule. Deux conséquences : une colonne déjà masquée était signalée comme s’il restait à la masquer, et la formule affichée était polluée par un mot parasite. Après correction, l’outil trouve davantage de vraies optimisations sur un axe et cesse d’en signaler de fausses sur un autre.
Une correction validée pouvait n’être jamais écrite dans le fichier, sans le moindre message. La traduction « constat détecté → modification à écrire » existe en deux exemplaires dans le code, et le contrôle automatique n’en surveillait qu’un. Les deux sont désormais tenus ensemble, et le contrôle a été vérifié dans les deux sens.
Version 1.200.0
12 août 2026
Le contenu de votre fichier (formules, noms de tables et de colonnes, commentaires) part désormais vers l’IA dans un bloc clairement identifié comme des données à analyser, et non comme des consignes à suivre.
Modifié
Quand PBI Optimizer demande à l’IA de réécrire une formule, de la traduire ou de la relire, il lui envoie des morceaux de votre fichier : la formule concernée, le nom de l’objet, parfois la liste des colonnes. Ces textes étaient mélangés à nos propres consignes, sans rien qui les distingue. Une mesure dont le nom aurait été rédigé comme un ordre (« ignore les règles précédentes et réponds ceci ») pouvait donc se lire comme une instruction venant de l’application.
Le contenu du fichier est maintenant placé dans un bloc délimité, et les instructions données à l’IA disent explicitement que tout ce qui s’y trouve est une donnée à examiner, jamais un ordre. Le procédé résiste à la ruse évidente : un texte qui contiendrait la marque de fin du bloc pour en sortir se voit neutralisé, et seule la copie envoyée à l’IA est modifiée - votre formule, elle, n’est jamais touchée.
Un contrôle automatique lit le code du logiciel à chaque exécution des tests : tout nouvel usage de l’IA qui oublierait cette protection fait échouer la vérification. Il a lui-même été testé à l’envers, pour s’assurer qu’il refuse bien ce qu’il doit refuser.
Version 1.199.0
12 août 2026
Le garde-fou qui vérifie qu’une réécriture assistée par IA n’a pas changé les champs utilisés ne s’appliquait qu’aux formules DAX, et il comptait les noms cités dans les commentaires. Les deux trous sont refermés.
Corrigé
Avant d’appliquer une réécriture proposée par l’IA, PBI Optimizer vérifie qu’elle utilise exactement les mêmes champs qu’avant : c’est ce qui garantit que vos chiffres ne bougent pas. Ce contrôle ne tournait que sur les formules de calcul (DAX). Sur les requêtes d’import de données (Power Query), il ne restait qu’une consigne écrite dans les instructions données au modèle - c’est-à-dire une demande, pas une vérification. Le contrôle s’applique désormais aux deux, avec la lecture propre à chaque langage (les noms de colonnes y sont sensibles à la majuscule, contrairement au DAX).
Le contrôle lisait la formule entière, commentaires compris : un nom de colonne cité dans un commentaire ou dans un texte affiché comptait comme un champ utilisé. Il se trompait donc dans les deux sens - une colonne réellement retirée du calcul pouvait passer inaperçue si un commentaire la mentionnait encore, et une réécriture parfaitement correcte pouvait être refusée parce qu’un simple commentaire avait été reformulé (ce que les instructions autorisent pourtant). Seul le code réellement calculé est maintenant pris en compte.
Version 1.198.0
11 août 2026
Le contrôle qui soumet nos requêtes à une vraie base ne s’adressait qu’à PostgreSQL. Il interroge désormais aussi MySQL, et quand un moteur manque il le dit au lieu d’afficher un résultat vert.
Ajouté
Quand PBI Optimizer remplace un « SELECT * » par la liste des colonnes, il doit encadrer chaque nom à la manière du moteur visé - guillemets, crochets ou accents graves selon la base. Un contrôle soumettait déjà ces requêtes à un vrai PostgreSQL avant livraison ; il les soumet maintenant aussi à un vrai MySQL, qui sert de témoin pour Databricks et Spark. Douze situations sont passées en revue, dont les noms contenant un espace, un accent, un mot réservé du langage, ou le caractère d’encadrement lui-même.
Le contrôle vérifie aussi que ce qui doit être refusé l’est : sans ces cas-là, une base qui accepterait tout ne se distinguerait pas d’une vérification qui n’a pas eu lieu.
Modifié
Le contrôle affichait « tout est accepté » même lorsqu’un moteur n’avait pas pu être interrogé, la mention étant reléguée en fin de ligne. Il annonce désormais dans son verdict combien de moteurs ont réellement répondu, et s’interrompt en erreur si l’un manque - à moins qu’on accepte explicitement cette lacune.
C’est le cas aujourd’hui de SQL Server : son image ne s’exécute pas sur un Mac à processeur Apple sans une option de Docker restée désactivée. Le dialecte à crochets reste vérifié par les tests automatiques, et l’absence est écrite noir sur blanc plutôt que passée sous silence.
Version 1.197.0
6 août 2026
La correction « SELECT * » livrée hier produisait une requête invalide sur PostgreSQL et les moteurs voisins. Corrigé, et surtout : un nouveau contrôle soumet désormais nos requêtes à une vraie base de données avant livraison.
Corrigé
Sur PostgreSQL, Snowflake, Redshift et Oracle, les noms de colonnes s’encadrent avec des guillemets. Mais la requête est elle-même écrite à l’intérieur d’un texte, où les guillemets doivent être doublés : sans ça le texte se referme trop tôt et la requête devient incompréhensible pour Power BI.
Le fichier s’ouvrait normalement - le défaut ne se serait vu qu’au moment d’actualiser vos données. Il ne pouvait pas exister tant que seul SQL Server était géré.
Ajouté
Un nouveau contrôle soumet chaque requête que nous produisons à une vraie base de données PostgreSQL, et vérifie qu’elle est acceptée et que chaque colonne est bien trouvée. C’est lui qui a détecté le défaut ci-dessus, dès son premier passage.
Jusqu’ici notre vérification finale contrôlait le fichier Power BI, mais jamais la requête SQL qu’il transporte : un fichier parfaitement valide pouvait contenir une requête que la base refuse.
Le contrôle inclut deux cas qui DOIVENT échouer. Sans eux, un contrôle qui passe toujours ne prouverait rien.
Version 1.196.0
6 août 2026
L’alerte « SELECT * » criait à tort trois fois sur quatre, et sa correction ne fonctionnait que sur SQL Server. Elle signale désormais 7 cas au lieu de 29, et les corrige tous.
Modifié
La correction remplace « SELECT * » par la liste des colonnes réellement utilisées. Elle ne fonctionnait que sur SQL Server, parce que chaque moteur de base de données a sa propre façon d’encadrer les noms de colonnes : utiliser la mauvaise produit une requête que la base refuse, et votre actualisation casse.
Elle connaît maintenant PostgreSQL, Snowflake, Redshift, Oracle, MySQL et Databricks, en plus de SQL Server et des points de terminaison Fabric. Tout moteur non reconnu reste refusé - notamment les connexions ODBC, qui peuvent parler n’importe quel dialecte : nous préférons ne rien faire que deviner.
Quand la correction n’est pas possible, elle vous dit désormais POURQUOI, cause par cause. Le message précédent en confondait quatre.
Surtout : l’alerte se déclenchait sur des requêtes qui interrogent les métadonnées internes d’un modèle - quelques centaines de lignes, où l’argument « vous ramenez des colonnes inutiles » n’a aucun sens. Sur nos 19 rapports de test, 22 des 29 alertes étaient de ce type. Elles ont disparu.
Résultat : 7 alertes au lieu de 29, et les 7 sont corrigées automatiquement.
Version 1.195.0
6 août 2026
Travail interne de fiabilité : nos alertes sur la durée d’extraction (Power Query) étaient éprouvées sur presque aucun rapport branché à une vraie base de données. C’est corrigé, et une mesure fausse a été corrigée au passage.
Modifié
Les alertes sur la durée d’extraction n’ont de sens que sur des rapports qui interrogent une base de données. Notre collection de rapports de test en contenait très peu : nous ne pouvions donc ni vérifier ce que nous détectons, ni mesurer ce que nous ratons.
Trois modèles publics ont été ajoutés, cherchés spécifiquement par type de connexion (SQL Server, PostgreSQL, Snowflake, Databricks, Redshift). Le nombre de requêtes branchées sur une vraie base passe de 35 à 87.
Deux d’entre eux mettent à l’épreuve des alertes qu’aucun rapport réel ne déclenchait jusqu’ici. Au total, 38 de nos 49 alertes sont maintenant éprouvées sur au moins un rapport réel, contre 33 auparavant.
Une mesure que nous avions publiée était fausse et a été corrigée : notre classement des sources oubliait un connecteur de base de données et rangeait mal les requêtes dérivées d’une autre requête. Le chiffre annoncé était de 15 %, il valait 19 %.
Corrigé
Notre banc de vérification finale soumet chaque fichier produit à la bibliothèque officielle Microsoft, mais ne vérifiait jamais le fichier de départ. Un modèle public déjà refusé par Microsoft avant toute intervention nous était imputé. Les deux cas sont désormais distingués.
Version 1.194.0
6 août 2026
Nouvelle alerte : quand une formule cite plusieurs fois la même mesure, Power BI la recalcule à chaque fois. La correction assistée la calcule une seule fois, pour un résultat identique.
Ajouté
Écrire deux fois [Chiffre d’affaires] dans une formule le fait calculer deux fois. Une « variable » le calcule une fois et réutilise le résultat : mêmes valeurs affichées, un calcul économisé, et une formule plus lisible.
La correction passe par la réécriture assistée, déjà disponible sur les formules DAX : vous validez la proposition avant qu’elle parte dans le fichier. La part des problèmes que l’outil sait réparer monte à 34 sur 49.
Sur nos 16 rapports de test, 12 mesures sont concernées dans 4 rapports.
L’alerte reste volontairement silencieuse dès qu’une formule change le contexte de calcul (CALCULATE, FILTER, SWITCH, itérateurs). Dans ces cas, les deux occurrences ne valent pas forcément la même chose, et les regrouper fausserait vos chiffres sans prévenir. Nous préférons rater des cas que d’en proposer un seul qui déplace une valeur.
Modifié
Ce chantier devait être plus gros. Mesure faite sur la collection de rapports de test : 754 des 757 mesures portent déjà au moins une alerte. Trois autres pistes envisagées ont été instruites puis abandonnées sur preuve - l’une d’elles visait une formule générée par Power BI lui-même, une autre aurait proposé des réécritures qui changent les résultats.
Version 1.193.0
6 août 2026
Si votre rapport est traduit en plusieurs langues, le fichier optimisé que nous vous rendions ne s’ouvrait pas - et la correction attendue n’était même pas appliquée. C’est réparé, et trouvé en élargissant notre collection de rapports de test.
Corrigé
Un rapport traduit range les libellés de chaque langue dans des fichiers à part, où l’on retrouve les mêmes noms de tables et de colonnes. Nos corrections s’y appliquaient par erreur, à un endroit où ces réglages n’existent pas : Power BI refusait d’ouvrir le fichier produit.
Plus gênant encore : dans la plupart des cas, la correction atterrissait dans la traduction AU LIEU de la table. Le fichier était donc à la fois cassé et non corrigé.
Cela concernait tout rapport multilingue, situation courante en entreprise. Trois contrôles le verrouillent, dont un qui vérifie que la correction atteint bien la vraie table.
Ajouté
Trois modèles publics rejoignent la collection de rapports de test, choisis non pas parce qu’ils sont gros, mais parce que chacun met à l’épreuve quelque chose que rien d’autre ne testait : un modèle de production Microsoft, un classeur de démonstration, et le seul modèle à comporter des indicateurs de performance.
Ces trois modèles ont révélé les deux défauts corrigés aujourd’hui, dès le premier passage. Deux modèles bien plus volumineux ont été écartés volontairement : ils auraient écrasé toutes les mesures de la collection sous le poids d’une seule source.
Version 1.192.0
6 août 2026
Une alerte grave et sans issue - « votre modèle contient une boucle, Power BI refusera de le charger » - pouvait se déclencher sur des fichiers parfaitement sains. La cause était une formule mal découpée à la lecture du fichier.
Corrigé
Quand une mesure porte un « indicateur de performance » (KPI : une cible et un code couleur), le fichier Power BI place ces réglages juste après la formule. Nous les collions à la formule au lieu de les en séparer.
Conséquence visible : les mesures citées par l’indicateur passaient pour des ingrédients de la formule, et l’outil annonçait une boucle de dépendances - un défaut qui empêche vraiment Power BI d’ouvrir un fichier. L’alerte était fausse, elle n’avait aucune correction possible, et elle se déclenchait sur un rapport d’exemple publié par Microsoft.
Conséquence invisible, et plus grave : la formule lue étant fausse, toute analyse portant dessus l’était aussi, et une réécriture assistée serait partie de cette version polluée.
Aucun de nos rapports de test ne contenait d’indicateur de performance : rien ne pouvait révéler ce défaut. Il a été trouvé en évaluant des modèles publics candidats à rejoindre la collection de test. Quatre contrôles le verrouillent, dont un qui vérifie qu’une VRAIE boucle continue d’être signalée.
Version 1.191.0
5 août 2026
Travail interne de fiabilité : les chiffres qui justifient nos décisions étaient mesurés sur une collection de rapports de test qui a presque doublé sans que personne ne le remarque. Ils sont maintenant inventoriés, remesurés, et un contrôle empêche que ça recommence.
Ajouté
Pour décider quoi améliorer, nous mesurons sur une collection de vrais rapports Power BI. Ces mesures tranchent des choix de conception : « cette alerte se trompait 6 fois sur 7 », « un tiers de ces colonnes ont déjà une correction ailleurs ». Cette collection n’était décrite nulle part - ni liste, ni date, ni moyen de vérifier qu’elle n’avait pas changé.
Elle l’est désormais, fichier par fichier, avec une empreinte qui détecte la moindre modification. Deux outils s’y ajoutent : l’un vérifie que la collection sur le poste est bien celle attendue, l’autre recalcule d’un seul coup tous les chiffres cités dans le code.
Ce que l’inventaire a mis au jour : la collection est passée de 8 à 14 rapports le 3 août, et vingt endroits du code parlaient encore de « 8 rapports » au présent. Des chiffres décrivant une collection disparue servaient encore d’argument.
L’origine et la licence de chaque rapport ont été retrouvées : neuf sur treize sont rattachés à leur source exacte (échantillons officiels Microsoft, dépôts publics sous licence libre). Pour quatre d’entre eux, la source n’a pas pu être établie, et c’est écrit tel quel : une origine plausible mais inventée aurait donné l’illusion d’être retrouvable.
Chaque modification du code déclenche maintenant automatiquement les 1319 contrôles du projet sur une machine neutre. Jusqu’ici ils ne tournaient que si quelqu’un pensait à les lancer, et la mise en ligne, elle, ne les lance pas.
Modifié
Les seize relevés périmés ont été traités un par un, et pas de la même façon selon leur nature. Ceux qui décrivent l’état actuel ont été refaits sur les 13 rapports réels. Ceux qui décrivent l’état AVANT une correction ont été datés sans être touchés : s’ils sont tombés à zéro, c’est justement que la correction fonctionne.
Deux affirmations avaient cessé d’être vraies. L’une justifiait un choix d’affichage sur les relations bidirectionnelles par « aucune du corpus n’en profiterait » : sur 13 rapports, 8 sur 12 en profitent, donc le choix est encore mieux fondé qu’avant. L’autre disait qu’aucun rapport réel ne cassait le repli de requête (query folding) : depuis un correctif de la version 1.173, l’un d’eux le casse.
Un contrôle interdit désormais d’écrire un nombre de rapports de test qui n’est plus le bon sans le dater. Le journal que vous lisez ici en est exclu volontairement : chaque entrée était vraie le jour où elle a été écrite, et réécrire une chronique serait le seul vrai mensonge possible.
Version 1.190.0
5 août 2026
Un contrôle empêche désormais qu’une correction soit comptée comme disponible alors que rien ne permet de la déclencher. C’est le défaut qui avait rendu « boucle de relations » inutilisable pendant trois jours.
Modifié
Certaines corrections vous demandent de trancher (quelle mesure garder, quelle relation désactiver, quelle table marquer). Le 2 août, l’une d’elles a été livrée sans l’identifiant qui permet à l’écran d’enregistrer votre réponse : le bloc de choix ne s’affichait jamais, et comme ce constat n’a pas de conseil manuel, la carte n’offrait aucune issue.
Rien ne pouvait le détecter : les contrôles étaient au vert, et la part des problèmes réparables restait flatteuse. Un contrôle vérifie maintenant, pour chaque correction à choix, que cet identifiant existe. Nous l’avons validé en réintroduisant volontairement le défaut : il se déclenche.
Un second contrôle interdit d’inscrire une règle parmi les réparables sans qu’aucun moyen de la déclencher existe. La liste des chemins possibles est écrite noir sur blanc, plutôt que laissée à l’appréciation.
Inclus
Un nouvel avis de sécurité sur postcss (une dépendance imposée par Next) a été examiné et classé : c’est le correctif incomplet d’un avis déjà étudié, il exige de traiter du CSS fourni par un tiers, ce que cette application ne fait jamais. Réexamen prévu avant le 31 octobre 2026.
Version 1.189.0
5 août 2026
Travail interne de fiabilité : les décisions qui déterminent ce qui part dans votre fichier sont désormais toutes vérifiées automatiquement. C’était la dette annoncée dans la version 1.183.
Modifié
Quand vous lancez une génération, une couche décide carte par carte ce qui participe : les déports en Power Query, les fusions, les conversions de type, les alignements, les réécritures. Une seule de ces décisions était contrôlée automatiquement, celle réparée en 1.183 après qu’un défaut soit passé par là.
Les autres sont maintenant sorties du gros fichier où elles vivaient, et couvertes par 19 contrôles. La règle qu’elles partagent - cocher propose, valider engage - est vérifiée pour chacune, dans les deux sens : ce qui doit partir part, ce qui ne doit pas partir est écarté AVEC son motif affiché.
En les extrayant, nous en avons trouvé une sixième dont personne n’avait la trace : la conversion des tables calculées. C’est la mesure la plus parlante de cette dette - on ne savait pas combien de décisions ce fichier prenait.
Version 1.188.0
5 août 2026
Marquer une table de dates se fait maintenant depuis l’écran d’optimisation : vous choisissez laquelle, l’outil l’écrit dans le fichier généré.
Ajouté
Quand une table de dates existe déjà sans être marquée, l’outil vous propose de la marquer. Il liste les tables candidates avec la colonne de dates par laquelle vos tables de faits les rejoignent, vous choisissez, et le marquage part dans le fichier généré.
Aucune option n’est présélectionnée, et c’est volontaire. Marquer une table exige que sa colonne de dates soit continue, sans doublon et sans valeur vide - ce que Power BI vérifie au moment du marquage. Ce sont des propriétés de vos DONNÉES, que le fichier ne montre pas. L’outil ne peut donc pas trancher à votre place : il vous dit quoi vérifier, et chaque option porte cet avertissement.
S’il n’existe aucune table candidate, il n’y a pas de panneau : il faut créer la table, et le conseil manuel reste seul. C’est le cas d’un rapport sur trois dans nos essais.
Vérifié sur vos rapports d’essai : le marquage a été appliqué sur les deux rapports concernés, et les fichiers produits restent lus sans erreur par la bibliothèque officielle Microsoft.
La part des problèmes que l’outil sait réparer passe de 67 % à 69 %.
Corrigé
Le constat « boucle de relations » proposait un choix qui ne s’affichait jamais. Il lui manquait l’identifiant sous lequel l’interface enregistre votre réponse : le panneau était donc invisible, le choix impossible, et comme ce constat n’a pas de conseil manuel de repli, la carte était un cul-de-sac complet depuis le 2 août.
Ce constat comptait pourtant parmi les problèmes réparables : la part affichée était surévaluée d’un point pendant trois jours. Elle est juste à nouveau, et un test empêche désormais qu’un panneau de choix existe sans son identifiant.
Version 1.187.0
5 août 2026
Le constat « intelligence temporelle sans table de dates » ne se déclenchait presque jamais. Il était éteint par le réglage que l’outil vous conseille justement de couper.
Corrigé
Quand le réglage « Date/heure automatique » est actif, Power BI fabrique en coulisses une table de dates cachée pour chaque colonne date. L’outil les comptait comme de vraies tables de dates : il concluait que tout allait bien et se taisait.
Le défaut se mordait la queue. Ces tables cachées disparaissent quand vous coupez « Date/heure automatique » - ce que l’outil vous conseille par ailleurs de faire. Le conseil sur la table de dates aurait donc dû arriver AVANT ce geste, pas jamais : couper le réglage sans table de dates dédiée casse les calculs de temps.
Mesuré sur nos 14 rapports d’essai : 6 utilisent des fonctions de temps, 3 n’ont aucune table de dates marquée, et l’outil ne disait rien sur ces 3.
Le constat est maintenant plus utile qu’un simple signalement : quand une table de dates existe déjà sans être marquée, il vous la NOMME, parce que dans ce cas il n’y a rien à créer, seulement à marquer. Quand aucune n’existe, il le dit aussi.
Il vous rappelle également ce que Power BI vérifiera au moment du marquage - une colonne de dates sans trou, sans doublon et sans valeur vide. Ce sont des propriétés de vos données, que le fichier ne permet pas de contrôler : c’est pourquoi l’outil ne marque pas la table à votre place.
Version 1.186.0
4 août 2026
Les colonnes très variées qui n’apparaissent nulle part dans votre rapport sont maintenant masquées et privées de résumé automatique, sans geste de votre part.
Ajouté
Une colonne qui ressemble à un identifiant est le premier poste de coût mémoire d’un modèle. Le conseil disait « masque-la et mets Résumé par défaut à Ne pas résumer, SI elle ne sert qu’aux relations et n’est jamais affichée ». Ces deux gestes partent désormais dans le fichier généré.
Le « si » n’est pas supposé, il est vérifié : l’outil lit la couche rapport, c’est-à-dire les champs réellement posés sur vos visuels et vos filtres. Si la colonne y figure, ou si le rapport n’est pas lisible, rien n’est masqué et le conseil manuel reste affiché. Une colonne qui disparaît du volet Données sans raison visible serait bien plus déroutante qu’un conseil à appliquer soi-même.
Masquer ne casse rien : la colonne reste dans le modèle, ses valeurs ne bougent pas, les visuels qui l’utilisent déjà continuent de fonctionner. Elle sort seulement de la liste des champs proposés à la construction de rapports, et l’affichage se rétablit d’un clic droit dans Power BI.
Rien ne part sans que tu valides la carte, une par une. Et la carte te dit maintenant ce qui va se passer AVANT que tu valides : soit « VÉRIFIÉ : aucun visuel ni filtre n’utilise cette colonne », soit qu’elle est affichée quelque part et que le geste reste à ta main. Auparavant les deux cas s’affichaient à l’identique et tu ne l’apprenais qu’après coup, dans le compte rendu.
Un cas est écarté volontairement : les colonnes de texte qui servent de clé de relation. Là, le bon remède est la clé de substitution proposée par le constat « Clé de relation en texte », qui supprime le problème au lieu de le cacher.
Les rapports liés comptent. Si ton modèle est partagé entre plusieurs rapports et que tu les as déclarés dans l’outil, leurs champs entrent dans la vérification : une colonne qui ne sert qu’à l’un d’eux n’est pas masquée. Ce rapprochement n’était fait jusqu’ici que pour la suppression d’objets inutilisés, il l’est maintenant avant toute décision d’usage.
Sur nos 14 rapports d’essai, 24 colonnes sur 48 sont masquées automatiquement, soit une sur deux. La part des problèmes que l’outil sait réparer passe de 65 % à 67 %.
Version 1.185.0
4 août 2026
Les mesures sans description en reçoivent une, écrite pour vous, quand leur formule dit clairement ce qu’elles calculent.
Ajouté
Une mesure sans description repartait dans votre fichier telle quelle, avec un conseil à appliquer à la main dans Power BI. Quand sa formule est simple - une somme, une moyenne, une valeur extrême, un comptage, un rapport, un renvoi vers une autre mesure - la description est désormais écrite automatiquement.
La phrase est déduite de la formule, sans intelligence artificielle. Le résultat est donc le même à chaque fois et il est vérifié par des tests. C’est aussi une question de coût et de relecture : un modèle sans descriptions en compte rarement une poignée, c’est plutôt 100 à 400 mesures d’un seul coup.
Ce que ça vaut, et ce que ça ne vaut pas : « Somme de la colonne Montant de la table Ventes » n’apprend rien à qui sait lire une formule. Son destinataire est le lecteur du rapport, qui voit l’infobulle du champ et jamais l’expression. Pour lui, c’est mieux que rien - mais ça reste une amorce, pas la description complète que le conseil décrit.
Quand la formule est trop complexe pour que son sens soit certain (calculs sous filtre, intelligence temporelle, conditions), rien n’est écrit. Le compte rendu de génération affiche alors la mesure comme non traitée, avec le motif et le conseil manuel. Une documentation fausse se lirait comme vraie : mieux vaut le vide.
Ce que ça donne sur de vrais rapports, parce que le chiffre compte plus que l’intention : sur nos 14 rapports d’essai, 76 mesures sur 448 reçoivent leur description automatiquement, soit environ une sur six. Les 372 autres gardent leur conseil à appliquer à la main.
La part des problèmes que l’outil sait réparer passe de 63 % à 65 %.
Version 1.184.0
3 août 2026
Le constat « Modèle très chargé en objets » vous donnait quatre gestes à faire à la main. Les quatre sont automatisés depuis longtemps : il vous dit maintenant sur quelle carte se trouve le bouton.
Modifié
Il conseillait bien de désactiver « Date/heure automatique », de déporter les colonnes calculées, de convertir les tables calculées et de supprimer l’inutilisé, mais sans jamais dire que ces corrections existaient dans l’outil, à un clic.
Chaque conseil cite désormais le constat qui l’applique, sous le nom exact affiché sur sa carte.
C’est la cinquième fois que nous trouvons un constat dont le remède existait sans être relié. Nous l’écrivons ici parce que c’est un défaut qui se répète, pas un accident.
La part des problèmes que l’outil sait réparer passe de 60 % à 63 %.
Version 1.183.0
3 août 2026
Travail interne de fiabilité : la partie du code qui décide quelles optimisations partent dans votre fichier est désormais vérifiée automatiquement. C’est par là qu’un défaut réel était passé.
Modifié
Cette décision se prenait au milieu d’un bloc de près de 1 900 lignes qu’aucun contrôle automatique n’exerçait. Un correctif pouvait y être écarté sans que rien ne le signale - c’est ce qui s’était produit la veille.
Elle est maintenant isolée et couverte par neuf contrôles. La preuve a été faite en réintroduisant volontairement le défaut d’origine : deux contrôles se déclenchent.
Le travail n’est pas terminé : cinq autres familles d’optimisations passent encore par l’ancien chemin, sans contrôle. Nous préférons l’écrire que le laisser croire.
Version 1.182.0
3 août 2026
Simplifier un modèle « en flocon » se fait maintenant depuis l’écran d’optimisation : vous choisissez quelle table regrouper, et l’opération part dans le fichier généré.
Ajouté
Chaque option indique les colonnes qui seront recopiées, si la table d’origine devient inutile, et surtout la démonstration que l’opération ne peut pas dupliquer de lignes - c’est elle qui permet de l’automatiser sans risquer vos totaux.
L’opération n’est proposée que lorsqu’elle est réellement réalisable. Sur nos rapports de test, elle apparaît sur 2 cas et pas un de plus : les autres sont des tables de faits ou des conflits de noms, et gardent leur guide manuel.
Si la situation a changé entre l’analyse et la génération, l’opération n’est pas appliquée et le compte rendu vous le dit, plutôt que de laisser croire qu’elle a eu lieu.
La part des problèmes que l’outil sait réparer passe de 58 % à 60 %.
Version 1.181.0
3 août 2026
Les optimisations marquées « Débloquée » s’affichaient et se validaient, mais ne partaient jamais dans le fichier généré. Elles fonctionnent désormais - et l’outil refuse de les appliquer si vous renoncez à celle dont elles dépendent.
Corrigé
Ces optimisations étaient écartées par erreur au moment de produire le fichier : vous pouviez les cocher sans qu’elles aient le moindre effet.
Si vous renoncez à la correction qui en débloque une autre, celle-ci n’est plus appliquée - et le compte rendu vous dit laquelle et pourquoi. L’appliquer seule aurait été risqué : c’est justement le cas que la règle évite.
Le refus est décidé côté serveur, pas seulement affiché à l’écran, pour qu’il tienne quoi qu’il arrive.
Version 1.180.0
3 août 2026
L’outil sait maintenant préparer la simplification d’un modèle « en flocon » - regrouper deux tables liées en une seule - sans risquer de fausser vos totaux. Et notre jeu de rapports de test a doublé de variété.
Ajouté
Simplifier un modèle en flocon consiste à rapatrier les informations d’une table dans celle qui la référence, puis à supprimer le lien devenu inutile. L’opération n’est préparée que si l’outil peut DÉMONTRER qu’elle ne dupliquera aucune ligne - sans cette preuve, tous vos totaux seraient faux sans le moindre signe.
Sur nos rapports de test : 3 simplifications préparées et vérifiées, 23 refusées avec leur motif expliqué. L’outil refuse bien plus qu’il n’accepte, et c’est voulu.
Le jeu de rapports de test passe de 9 à 14 modèles, avec pour la première fois de vraies bases de données en source. Un de ces modèles sert de témoin : il est propre, et doit le rester - s’il se met à déclencher des alertes, c’est l’alerte qui a un problème.
Cette version prépare l’opération. Le choix et son application dans le fichier généré suivront.
Version 1.179.0
3 août 2026
L’alerte « structure en flocon » pouvait vous conseiller de fusionner une table de faits - ce qui n’a pas de sens. Elle vous met désormais en garde quand la table n’a pas la forme attendue.
Corrigé
Une table qui pointe vers trois autres tables ou plus est presque toujours une table de faits (elle référence ses dimensions), et non une dimension intermédiaire à aplatir. L’alerte le signale au lieu de conseiller une fusion absurde.
Elle avertit sans faire disparaître l’alerte : reconnaître une table de faits sans regarder les données reste un jugement, et c’est le vôtre qui tranche.
Version 1.178.0
3 août 2026
L’alerte « structure en flocon » se déclenchait sur des tables que Power BI fabrique lui-même : 4 des 7 cas de nos rapports de test. Et la brique qui permettra un jour de réorganiser votre modèle sans fausser vos chiffres est posée.
Corrigé
Power BI crée une table de dates cachée par colonne de date. Votre propre table de dates se retrouvait alors signalée « en flocon », avec le conseil de la fusionner - impossible, puisque la table en question n’est pas la vôtre. Ces cas ne sont plus signalés : 7 alertes deviennent 3, toutes réelles.
Le vrai remède dans ces cas-là, désactiver les tables de date automatiques, était déjà appliqué tout seul par l’outil.
Ajouté
Une réorganisation du modèle (fusionner deux tables, par exemple) peut multiplier des lignes et fausser tous vos totaux, sans aucun signe visible. L’outil sait désormais démontrer, à partir de votre fichier seul, qu’une fusion donnée ne peut pas le faire.
La démonstration s’appuie sur ce que Power BI a déjà vérifié pour vous : une liaison « plusieurs vers un » n’aurait pas pu se charger si le côté « un » contenait des doublons.
Quand la démonstration n’est pas possible, l’outil répond « je ne sais pas » - jamais « c’est bon ». C’est ce qui permettra d’automatiser ces transformations sans jamais parier sur vos chiffres.
Version 1.177.0
3 août 2026
Un de nos conseils pouvait casser vos calculs de dates sans le dire. Il est maintenant assorti de sa mise en garde, et un autre indique où se trouve le bouton qui le règle.
Corrigé
Le conseil « préférez une clé entière » s’applique presque toujours à des dates. Or remplacer une clé de date sans précaution casse les calculs de périodes (cumul annuel, comparaison avec l’an dernier) - et sans aucun message d’erreur. Le conseil précise désormais quoi conserver, quel format employer, et quand le gain ne vaut pas le risque.
Quand une colonne à forte volumétrie sert de clé de liaison en texte, l’alerte indique maintenant que l’outil sait la convertir tout seul, et sur quelle carte se trouve le bouton.
Ces deux règles n’ont volontairement PAS été automatisées : la conversion automatique aurait pu abîmer vos calculs de dates. Nous préférons un conseil complet à une correction risquée.
Version 1.176.0
3 août 2026
Les optimisations qu’une autre correction rend possibles apparaissent maintenant dans votre liste, dès la première analyse - au lieu de se découvrir après coup.
Ajouté
Ces optimisations portent une pastille « Débloquée » et une phrase qui explique qu’elles n’existent pas encore dans votre fichier, et ce qui les rend possibles.
Si vous renoncez à la correction dont elles dépendent, elles disparaissent avec elle : la phrase le dit clairement sur la carte.
Vous voyez donc la liste complète avant de choisir, et rien ne sera appliqué que vous n’ayez vu.
Version 1.175.0
2 août 2026
Certaines optimisations en débloquent d’autres : retirer une relation inutilisée libère sa colonne, qui devient à son tour optimisable. Ces pistes n’apparaissaient qu’en relançant une analyse sur le fichier corrigé. Le moteur qui les révèle d’avance est en place.
Ajouté
Les optimisations débloquées par d’autres sont calculées dès l’analyse, pour que vous voyiez la liste complète avant de choisir - au lieu de les découvrir après coup et de devoir tout recommencer.
Chacune indique ce qui l’a rendue possible (« suppression de la relation X ») : si vous renoncez à cette correction-là, celle qu’elle débloquait tombe avec elle. Rien ne sera appliqué que vous n’ayez vu et accepté.
Sur nos rapports de test : 9 optimisations révélées sur 3 rapports, toutes en une seule vague supplémentaire, en moins de trois dixièmes de seconde par rapport.
Cette version livre le moteur et sa vérification. L’affichage dans l’écran des optimisations suivra.
Version 1.174.0
2 août 2026
Rien ne prouvait, jusqu’ici, que le fichier corrigé qu’on vous remet s’ouvre encore dans Power BI : le contrôle final utilisait notre propre lecteur, plus indulgent que Power BI lui-même. Un contrôle indépendant a été mis en place.
Ajouté
Toutes les corrections automatiques sont rejouées sur de vrais rapports, puis chaque fichier produit est soumis à l’outil officiel de Microsoft. Premier passage : 161 corrections sur 9 rapports, aucune écartée, et les 9 fichiers s’ouvrent sans erreur.
La vérification contrôle aussi, une par une, que les corrections font bien disparaître le problème signalé - et non qu’elles se contentent d’annoncer « appliqué ».
Un cas de figure normal est désormais expliqué plutôt que subi : corriger certains problèmes en révèle de nouveaux. Retirer une relation inutilisée libère par exemple sa colonne, qui devient à son tour optimisable. Ce ne sont pas des erreurs revenues, ce sont de nouvelles pistes ouvertes par le travail déjà fait.
Version 1.173.0
2 août 2026
L’alerte sur la mémoire à l’actualisation comptait le nombre de tables mises en cache, jamais le nombre de mises en cache. Un rapport qui en empile huit dans une seule requête ne déclenchait donc rien.
Corrigé
Sur nos rapports de test, l’un empile huit mises en cache dans une seule requête et restait muet, pendant qu’un modèle de trois tables avec une seule mise en cache chacune déclenchait l’alerte. Le plus lourd passait pour le moins inquiétant.
L’alerte se déclenche désormais dans les deux cas, et indique la requête en cause ainsi que son nombre de mises en cache.
La correction proposée ne change pas : c’est la même réécriture, requête par requête. C’est la détection qui était en défaut, pas le remède.
Version 1.172.0
2 août 2026
Le rapport de test ajouté juste avant contenait lui-même une erreur de format, que notre lecteur de fichiers ne détectait pas. L’outil de contrôle officiel de Microsoft l’a trouvée immédiatement.
Corrigé
Notre lecteur de fichiers Power BI est plus indulgent que Power BI lui-même : un fichier qu’il accepte peut être refusé à l’ouverture. Il ne peut donc pas servir de preuve, et un contrôle indépendant a été remis en place.
Ce contrôle a d’abord été éprouvé sur vos 8 rapports de test, qui passent tous : quand il signale une erreur, c’en est une.
Version 1.171.0
2 août 2026
Les alertes qui concernent la façon dont vos données sont ramenées (l’extraction) n’étaient vérifiables sur aucun rapport de test : nos huit exemples n’attaquent presque aucune base de données. Ce rapport de test manquant existe désormais.
Ajouté
Nos 8 rapports de test contiennent 99 requêtes, dont 14 seulement interrogent une base de données - le reste vient de fichiers Excel, de CSV ou de données saisies à la main. Toute une famille d’alertes ne pouvait donc être éprouvée sur rien.
Un rapport de test branché sur une base a été fabriqué, avec des défauts posés volontairement. Les cinq alertes concernées s’y déclenchent, et le contrôle vérifie aussi qu’aucune AUTRE ne se déclenche par erreur.
Effet concret pour vous : les prochaines alertes sur l’extraction des données seront écrites avec une preuve, pas au jugé. C’est ce même réflexe qui a permis de corriger l’alerte « page surchargée » dans la version précédente.
Version 1.170.0
2 août 2026
L’alerte « Page surchargée de visuels » comptait les boutons, les zones de texte, les images et les formes - qui n’interrogent jamais vos données. Sur nos huit rapports de test, elle se déclenchait 7 fois pour 1 seul cas réel.
Corrigé
Seuls les visuels qui interrogent vraiment le modèle sont désormais comptés. Un rapport de test comptait 235 éléments sur ses pages, dont 225 de pur décor : il était signalé trois fois comme surchargé alors qu’il n’affiche que 10 visuels de données.
L’alerte annonce maintenant les deux nombres - « 25 visuels qui interrogent le modèle, sur 35 éléments au total » - pour que vous reconnaissiez votre page.
Si le format de votre fichier ne permet pas de faire la distinction, l’alerte se comporte exactement comme avant : elle compte tout. Mieux vaut une alerte de trop qu’un vrai problème passé sous silence.
Version 1.169.0
2 août 2026
Deux constats passés au crible d’une question simple : permettent-ils de déclencher une action ? L’un ne servait à rien et disparaît, l’autre avait un remède qu’il ne nommait pas. La part des problèmes que l’outil sait réparer passe de 55 % à 58 %.
Modifié
Le constat « Table chargée en colonnes calculées » disparaît. Il se contentait de compter : chacune de ces colonnes avait déjà sa propre carte, avec son bouton. Il ajoutait donc une alerte de plus, sans action, et souvent en tête de liste.
Le constat « Pression mémoire à l’actualisation » indique désormais où est le bouton. Il annonce une actualisation qui échoue - ce qu’aucun autre constat ne dit - mais laissait croire que la correction se faisait à la main. En réalité, chacune des tables qu’il cite porte le constat « Repli de requête cassé », que l’outil sait réécrire.
Ce même constat remonte de l’étape « Peaufiner » à l’étape « Affiner », auprès de sa correction. Il était rangé en fin de parcours alors qu’il signale un blocage pur et simple.
Un guide décrit ce qui reste à faire soi-même : les deux réglages de Power BI Desktop (évaluations simultanées, mémoire par évaluation). Ils appartiennent à votre poste et non au rapport, donc aucun fichier généré ne peut les emporter.
Version 1.168.0
2 août 2026
Toutes les corrections automatiques qui ne dépendent pas de l’IA sont désormais éprouvées de bout en bout : dégradées, détectées, corrigées, puis revérifiées. Aucune ne peut plus annoncer « appliqué » en laissant le problème en place.
Inclus
Le banc d’essai couvre 16 corrections sur 27 - c’est-à-dire la totalité de celles qui ne passent pas par l’IA. Les 11 restantes reposent sur une réécriture assistée, qui exige un appel réseau payant et n’a pas sa place dans une vérification lancée à chaque modification du code.
Nouvelles corrections éprouvées : désactivation des tables de date automatiques, suppression des colonnes et mesures inutilisées, remplacement d’un SELECT *, passage d’une relation en sens unique, conversion d’une table calculée en requête, et conversion d’une clé texte en clé entière.
Aucun nouveau défaut trouvé dans ce lot - y compris sur la conversion des clés de substitution, la plus délicate. Après trois corrections cassées mises au jour la veille, c’est une bonne nouvelle qui a désormais une preuve.
Version 1.167.0
2 août 2026
Troisième correction qui ne fermait pas son propre constat : une colonne date-heure ramenée à la date restait signalée. Cinq reproches infondés disparaissent au passage, dont celui fait à la colonne date d’un calendrier.
Corrigé
Une colonne date-heure ramenée à la date continuait d’être signalée après correction : tu corrigeais, et retrouvais le même reproche sur une colonne déjà traitée. La règle regardait le type déclaré, or Power BI n’a pas de type « Date » distinct - une date y est toujours stockée comme date-heure. La correction agit donc sur la requête, et la règle la lit désormais aussi.
Effet de bord bienvenu : cinq colonnes de vos rapports d’essai étaient signalées à tort, alors que leur requête les ramenait déjà à la date - dont la colonne de date d’une table de calendrier, qui n’a évidemment aucune heure à perdre.
Inclus
Le banc d’essai de la réparation couvre désormais aussi les montants en virgule flottante, les relations inactives et les colonnes date-heure. C’est lui qui a mis au jour ce troisième cas.
Version 1.166.0
2 août 2026
Deux corrections annonçaient « appliqué » sans rien corriger. Un banc d’essai qui rejoue la boucle entière - dégrader, détecter, corriger, revérifier - les a trouvées dès sa première exécution.
Corrigé
Les mesures en double ne se corrigeaient JAMAIS. La correction cherchait la mesure par sa formule, et refusait quand plusieurs correspondaient - or deux doublons ont la même formule par définition. Elle se refusait donc elle-même, en silence. Elle localise désormais la mesure par son nom.
Casser une boucle de relations ne la faisait pas disparaître. Le détecteur de boucles ignorait les relations désactivées : on appliquait la correction, et le constat revenait à l’analyse suivante. Une relation inactive ne crée aucun chemin de filtrage, elle n’est donc plus comptée.
Inclus
Un banc d’essai de la réparation : pour chaque correction automatique, un modèle volontairement dégradé est détecté, corrigé, puis relu pour vérifier que le défaut a bien DISPARU. Un « appliqué » qui laisse le problème en place est désormais impossible à livrer sans que la suite de tests ne le signale.
Version 1.165.0
2 août 2026
Une boucle de relations rend certains calculs ambigus. L’outil te propose désormais de la casser : tu choisis quelle relation désactiver, et chaque option t’annonce ce qu’elle toucherait avant que tu ne tranches.
Ajouté
Boucle de relations : le constat propose une option par relation de la boucle. Celle que tu retiens est désactivée dans le .pbip généré.
DÉSACTIVÉE, et non supprimée : la relation reste dans le modèle, reste utilisable ponctuellement dans une mesure, et le geste se défait d’un clic dans Power BI. C’est cette réversibilité qui rend l’automatisation acceptable pour une correction qui change, par nature, des résultats.
Chaque option affiche les visuels et les pages qu’elle toucherait - y compris dans les rapports connectés. Sans ça, choisir entre trois relations qui se ressemblent reviendrait à tirer au sort.
Une relation déjà inactive n’est jamais proposée : la désactiver ne ferait rien.
Inclus
Plus aucune règle de l’outil ne reste sans solution ni sans raison écrite de s’en passer. Sur 49 détections, 27 se corrigent désormais dans le fichier généré, 11 renvoient à un geste manuel décrit pas à pas, et 11 sont des diagnostics assumés - dont les alertes de cohérence, qui signalent des formules probablement fausses et ne doivent jamais être corrigées automatiquement.
Version 1.164.0
2 août 2026
Un changement de relation ne touche pas que le rapport qu’on optimise : il touche aussi tous ceux qui consomment le même modèle. Ceux-là ne sont pas sous tes yeux - l’outil va donc les regarder pour toi.
Ajouté
L’impact d’un changement de relation est désormais calculé aussi sur les rapports connectés que tu as déclarés : quels visuels, sur quelles pages, de quel rapport.
Chaque rapport connecté conserve maintenant, à son ingestion, le détail par visuel (page et tables interrogées). Aucune donnée nouvelle n’est gardée pour autant - des noms de pages et de tables, jamais de valeurs - et le fichier source continue d’être supprimé aussitôt.
Trois verdicts bien distincts, jamais confondus : « ce rapport est concerné », « aucun ne l’est », et « je n’ai pas pu regarder ». Le dernier arrive quand un rapport connecté a été ajouté avant cette version et que son fichier a depuis été supprimé : l’outil le dit et te propose de le re-téléverser, au lieu de te laisser croire qu’il est hors de cause.
Et quand aucun rapport connecté n’est déclaré, l’outil t’invite à en ajouter plutôt que de rester muet : c’est justement là que le risque est invisible.
Version 1.163.0
2 août 2026
Les mesures en double se corrigent maintenant toutes seules : tu choisis laquelle garder, les autres deviennent un simple renvoi vers elle dans le fichier généré.
Ajouté
Mesures en double : le constat propose une option par mesure du groupe. Celle que tu gardes reste telle quelle, les autres sont réécrites en « = [Mesure gardée] » dans le .pbip généré.
Le renvoi plutôt que la suppression, et c’est ce qui rend l’automatisation possible : tous les visuels qui utilisaient les doublons continuent de fonctionner, y compris ceux d’un rapport externe ou d’un classeur Excel que le fichier ne montre pas. Il ne reste qu’un seul endroit à corriger le jour où le calcul change.
Inclus
Le bloc de choix devient générique : la même mécanique sert l’alignement des types de relation et les mesures en double, et servira les prochaines règles du même motif. Une règle ne change jamais rien sans décision explicite, et aucune option n’est cochée d’avance.
Version 1.162.0
2 août 2026
Une relation bidirectionnelle a souvent une bonne raison d’exister : la décision de la changer t’appartient. Mais une décision sans information n’en est pas une - l’outil te montre désormais quels visuels, sur quelles pages, seraient à vérifier.
Ajouté
Chaque constat sur une relation bidirectionnelle indique maintenant ce que le changement toucherait dans le rapport : le nombre de visuels concernés et les pages où ils se trouvent, la plus chargée d’abord. C’est une liste d’endroits où regarder avant et après, pour comparer les totaux.
L’information est volontairement prudente. Quand rien n’est trouvé, l’outil écrit « aucun visuel trouvé » et non « aucun impact » : une mesure est rattachée à sa table d’accueil, pas aux tables que sa formule parcourt, donc un visuel qui n’affiche qu’une mesure peut dépendre de ces tables sans apparaître. Et quand le fichier envoyé ne contient pas la couche rapport, l’outil le dit au lieu de laisser croire à une absence d’impact.
Corrigé
La colonne calculée qui lit une autre table à travers une relation bidirectionnelle renvoyait à un constat sans action, alors que la même colonne pouvait déjà être déportée. Troisième correction du même défaut d’aiguillage - le remède existait, il n’était pas relié.
Version 1.161.0
2 août 2026
L’outil vérifiait que le fichier qu’il produit ne perd aucun objet. Il vérifie désormais aussi qu’il s’OUVRE : une correction peut très bien tout conserver et rendre le modèle inchargeable - c’est arrivé, et rien ne l’attrapait.
Ajouté
Contrôle de chargeabilité après génération : si une correction introduit une dépendance circulaire (une formule qui finit par dépendre d’elle-même), la génération est annulée avec le détail de la boucle, au lieu de livrer un fichier que Power BI refusera d’ouvrir sans expliquer pourquoi.
Le contrôle compare à l’ÉTAT D’AVANT, jamais à un idéal : un fichier déjà cassé à l’arrivée reste analysable et corrigeable. Seul l’ajout d’une rupture est refusé - sans quoi l’outil abandonnerait précisément les fichiers pour lesquels il est le plus utile.
Nouvelle détection : relation entre deux types différents (une colonne texte reliée à une colonne entière, par exemple). Le fichier s’ouvre et fonctionne tant que toutes les valeurs se laissent convertir - le risque est DIFFÉRÉ. Le jour où la source livre une valeur non convertible, l’actualisation échoue, ou la ligne cesse silencieusement de correspondre et les totaux baissent sans alerte.
Et sa correction est EMBARQUÉE, pas renvoyée à un geste manuel : le constat propose les deux façons d’aligner les types, et celle que tu choisis part dans le .pbip généré (type de stockage et requête Power Query mis à jour ensemble). Aucune n’est cochée d’avance, parce qu’elles n’ont pas le même solde - convertir en nombre allège mais peut perdre des lignes si une valeur n’est pas numérique, convertir en texte ne perd jamais rien mais alourdit la clé. Chaque option affiche donc son risque, et « sans risque » est écrit quand il n’y en a pas.
Modifié
Deux défauts que nous pensions bloquants ne le sont pas, vérification faite sur huit rapports réels qui s’ouvrent tous sans problème : une relation entre une colonne texte et une colonne entière, et une mesure créée puis laissée vide. Power BI les tolère. Ils sont donc écartés du contrôle : un seul faux positif et l’outil refuserait de produire un fichier sain.
Version 1.160.0
2 août 2026
Cinq nouvelles détections, choisies sur un critère unique : la correction devait être MÉCANIQUE, à résultat identique. Quatre d’entre elles arrivent donc avec leur réparation, plutôt que d’allonger la liste de ce qui est seulement signalé.
Ajouté
Hiérarchie Excel construite sur une colonne masquée : le moteur prépare, pour chaque colonne, une structure réservée aux tableaux croisés dynamiques Excel branchés sur le modèle. Sur une colonne invisible qui ne sert ni de clé, ni de tri, ni de niveau de hiérarchie, c’est de la mémoire et du temps d’actualisation dépensés pour un usage qui n’existe pas. Désactivation automatique à la génération, sans toucher ni aux valeurs ni aux formules.
Mesure appelée avec un nom de table devant : une mesure n’appartient à aucune table du point de vue du moteur. Cette écriture casse si la mesure est déplacée, et certains outils la refusent.
Colonne lue sans sa table dans une mesure : le calcul casse le jour où une colonne du même nom apparaît ailleurs.
Fonction de mise au point (EVALUATEANDLOG) restée dans le modèle : elle renvoie son argument sans le modifier, mais écrit une trace à chaque évaluation - donc à chaque requête de visuel. Un coût pur, sans contrepartie.
Mesures en double : deux mesures qui calculent exactement la même chose. Chacune est un objet de plus à énumérer à chaque édition de formule, et surtout un risque de divergence le jour où le calcul change. La suppression reste manuelle et guidée : une mesure peut servir un rapport externe que le fichier ne montre pas.
Inclus
Une détection a été volontairement ÉCARTÉE : la réécriture de la syntaxe « 1-(x/y) ». Sa correction change le résultat quand le dénominateur est vide ou nul - elle n’est donc pas mécaniquement réparable, et n’avait pas sa place dans ce lot.
Les cinq règles ont été éprouvées sur huit rapports réels avant livraison. Ce contrôle a révélé que trois quarts des « mesures en double » annoncées étaient fausses : deux mesures ne différant que par le texte filtré (« Vendu » contre « Retourné ») passaient pour identiques. Corrigé, et verrouillé par un test.
Version 1.159.0
2 août 2026
Une même colonne calculée peut cumuler plusieurs constats. Le plus fort - celui qui explique l’urgence - n’offrait aucun bouton, pendant que l’action vivait sur une carte voisine annoncée comme moins grave. L’outil savait réparer, mais ne le montrait pas au bon endroit.
Corrigé
Les constats portant la même formule arrivent désormais sur une SEULE carte, qui s’annonce par le motif le plus fort et porte l’action. Une colonne calculée volatile (TODAY, NOW) n’est plus un cul-de-sac : elle affiche son enjeu réel et le bouton de déport, au lieu de renvoyer à une carte voisine où elle se perdait.
L’enjeu affiché sur une carte groupée était le plus FAIBLE du groupe. L’ordre venait de la base, qui classait « moyen » avant « élevé ». Toutes les cartes regroupant plusieurs constats étaient concernées, pas seulement les colonnes volatiles.
Une carte groupée s’annonçait par un décompte (« 2 optimisations sur cette formule ») qui ne disait ni laquelle pressait, ni pourquoi. Elle porte maintenant le motif le plus fort, le décompte passant en second.
Version 1.158.0
31 juillet 2026
Retirer l’approbation d’un compte ne coupait pas la session en cours : la personne ne pouvait plus se reconnecter, mais continuait à travailler jusqu’à trente jours. Pour une application dont l’accès repose sur une approbation manuelle, on croyait avoir fermé la porte alors qu’elle restait ouverte un mois.
Corrigé
Retirer l’approbation d’un compte le déconnecte désormais immédiatement. Le droit d’accès est revérifié à chaque page, et plus seulement au moment de la connexion.
Un compte supprimé est traité de la même façon : sa session en cours cesse aussitôt de fonctionner.
Inclus
Deux choix de conception à ne pas défaire : cette vérification n’est jamais mise en cache (la fenêtre de cache serait exactement celle par laquelle passerait la personne révoquée, pour un coût d’une seule lecture en base), et le compte administrateur en est exclu (il n’existe pas dans la liste des utilisateurs, le contrôle le déconnecterait lui-même).
Version 1.157.0
30 juillet 2026
Un filtre pouvait annoncer « 15 à traiter » au-dessus d’une liste vide : les compteurs des filtres par type comptaient toute l’étape, alors que la liste ne montre que l’onglet choisi (« Embarquable » ou « À faire à la main »).
Corrigé
Un filtre par type ne s’affiche plus que dans l’onglet qui contient réellement ces constats, et son compteur compte dans cet onglet. Fini le filtre qui promet du travail invisible.
Le comportement voulu à l’origine est préservé : cliquer sur un type ne fait pas rétrécir les compteurs des autres types.
Version 1.156.0
30 juillet 2026
Troisième et dernier trou de la nouvelle détection : elle n’était rattachée à aucun objectif, donc elle disparaissait du parcours dès qu’un objectif était coché - même après une ré-analyse. Audit fait sur les 37 règles de l’outil.
Corrigé
Les formules volatiles servent désormais les objectifs « Fluidifier l’édition » (c’est leur raison d’être) et « Fiabiliser l’actualisation » (leur remède retire un recalcul). Elles ne servent PAS « Alléger le modèle » : le déport ne réduit pas la taille au repos, la colonne reste stockée.
« Trop de visuels sur une page » sert maintenant l’objectif « Accélérer les visuels ». Chaque visuel déclenche sa propre requête : le constat y avait sa place et en était absent.
Ajouté
Un garde-fou sur les objectifs, le troisième du genre : toute règle doit servir un objectif, ou être déclarée « hors objectifs » avec sa raison. Cinq le sont volontairement (quatre règles d’hygiène neutres sur tous les axes, et une alerte de justesse qui n’est jamais appliquée pour aller plus vite).
Inclus
Vérifié sur un modèle réel de 85 tables : 12 formules volatiles détectées, correctement rattachées à leur étape et à leurs objectifs.
Version 1.155.0
30 juillet 2026
La détection des colonnes calculées volatiles, ajoutée juste avant, apparaissait dans l’étape « Peaufiner » - au milieu de l’hygiène et de la gouvernance, tout au bout du parcours. Pour un constat qui explique 8 minutes d’attente à chaque geste, c’était le pire endroit.
Corrigé
Les colonnes et tables calculées volatiles s’affichent désormais dans l’étape « Alléger », avec les autres colonnes calculées - là où se trouve leur remède, le déport.
Ajouté
Un garde-fou empêche qu’une nouvelle détection retombe en fin de parcours sans qu’on l’ait voulu : chaque règle doit être rattachée à une étape, ou déclarée explicitement comme laissée à la fin, avec sa raison. Deux règles le sont volontairement (le constat de synthèse sur la mémoire d’actualisation, et une alerte de justesse).
Modifié
L’impact annoncé pour ces formules volatiles disait « édition plus courte » - le même niveau qu’un déport ordinaire, alors que le terrain a mesuré un facteur 15 à 20 sur ce seul axe. Il annonce désormais « nettement plus courte », et c’est la seule optimisation de l’outil dans ce cas. Le reste de son impact (taille, pic, visuels, extraction) reste celui d’un déport, puisque c’est le même remède.
Ces constats portent leur propre étiquette « Formule volatile » dans le tableau récapitulatif, pour ne plus être confondus avec un déport ordinaire.
Version 1.154.0
30 juillet 2026
Enquête sur un fichier où chaque geste d’édition prenait 7 à 8 minutes : la cause était 5 colonnes calculées utilisant TODAY(). Une fois neutralisées, 10 à 23 secondes. L’outil sait désormais détecter ce piège en une seconde d’analyse.
Ajouté
Nouvelle détection « colonne calculée volatile » : une colonne calculée dont la formule appelle TODAY(), NOW(), USERNAME()… est revérifiée par le moteur, avec tout ce qui en dépend, à chaque ouverture du fichier et à chaque modification du modèle. Symptômes : éditions de formule interminables, ouverture interminable, fichier qui demande d’enregistrer alors que rien n’a changé.
La détection couvre aussi les tables calculées volatiles. Les mesures ne sont pas signalées : elles ne stockent rien, ces fonctions y sont inoffensives.
Le remède recommandé est le déport en Power Query ou SQL : les valeurs sont identiques (une colonne calculée avec TODAY() gèle de toute façon à l’actualisation - elle dit en réalité « date de la dernière actualisation »), et la revérification disparaît.
Inclus
Chiffres du terrain, sur un modèle réel de 85 tables : 7 à 8 minutes par geste avant correction, 10 à 23 secondes après - un facteur 20, causé par 5 colonnes sur un millier. Le déport de l’outil en avait déjà éliminé 10 sur 15 sans le savoir.
Version 1.153.0
29 juillet 2026
Le réglage « évaluations simultanées » du simulateur faisait l’inverse de la réalité : le baisser faisait MONTER le pic annoncé, alors que c’est justement la parade à une actualisation qui sature la mémoire. En cause, le recalage sur ton pic mesuré, qui absorbait le réglage.
Corrigé
Le facteur de recalage se calcule désormais à un réglage de référence fixe, et non au réglage affiché. Il décrit l’écart entre le modèle de calcul et TA machine - pas le curseur qu’on est en train de bouger.
Conséquence concrète sur un modèle réel : à 6 évaluations au lieu de 8, le pic actuel passe de 42,2 à 35,4 Go, et le plan complet de 22,8 à 20,7 Go - soit tout près du budget, là où il en restait à plus de 2 Go.
Inclus
Contrepartie assumée : « aujourd’hui » ne colle à ta mesure qu’au réglage par défaut, celui auquel elle est censée avoir été prise. Simuler un autre parallélisme donne volontairement un autre chiffre - c’est tout l’intérêt du réglage.
Version 1.152.0
29 juillet 2026
La carte « Par où commencer » classait les colonnes bloquantes par le nombre de colonnes qu’elles libèrent. Mesure faite sur un modèle réel : les deux premières libéraient 20 colonnes… de 55 Mo au total, sur un pic d’actualisation de 42 Go. Un gros compte se lisait comme un gros gain.
Modifié
Le classement suit désormais le POIDS libéré, mesuré, et ce poids s’affiche à côté du nombre (« libère 10 · 35 Mo »). Dix colonnes légères peuvent ne rien changer, là où une seule colonne lourde compte vraiment.
Sans volumétrie importée, la carte garde le classement par nombre mais le DIT, et renvoie vers l’étape « Mesurer ». Elle ne fait plus passer un tri approximatif pour une priorité.
Version 1.151.0
29 juillet 2026
Préparation de l’import des relevés que Power BI Desktop sait exporter (vitesse des visuels, durée d’extraction). En les relisant avant leur première utilisation réelle, un défaut sérieux est apparu : sur un Windows français, une durée de 3 millisecondes pouvait être lue 3 secondes, sans le moindre message.
Corrigé
Une durée écrite « 0,003 » était lue comme trois mille, soit mille fois trop. La virgule française était prise pour un séparateur de milliers. La convention se décide maintenant sur la colonne entière : une seule valeur claire suffit à trancher pour toutes les autres.
Les relevés collés sont plafonnés à 4 Mo, et le dépassement est annoncé tout de suite au lieu d’échouer après l’envoi. La limite précédente (8 Mo) était supérieure à ce que le réseau laisse passer : elle ne pouvait pas s’appliquer.
Modifié
Quand un relevé n’est pas reconnu, le message dit désormais ce qu’il a VU (colonnes trouvées, ou noms d’événements rencontrés dans le fichier .json), pas seulement ce qu’il attendait. Ces deux lecteurs n’ont encore jamais vu d’export réel : c’est ce qui permettra de les corriger du premier coup si ton relevé a une forme inattendue.
Version 1.150.0
29 juillet 2026
Le contrôle qui vérifie que le fichier généré donne les mêmes chiffres que l’original entre dans le parcours. Il existait depuis longtemps, mais dans l’onglet Outils : rien ne disait quand s’en servir, et rien ne gardait la trace qu’il avait été fait.
Modifié
L’étape « Finaliser » s’ouvre désormais sur le contrôle des valeurs, avant la liste de ce qui reste à faire à la main. C’est l’ordre réel : on vérifie que le fichier est juste, puis on travaille dedans.
Le contrôle reste accessible dans l’onglet Outils, à sa place habituelle.
Ajouté
L’état du dernier contrôle est conservé et affiché : « contrôle passé le 29/07, aucun écart », ou la liste des objets qui divergent. Sans cette trace, une page rouverte le lendemain ne disait pas si le fichier avait été vérifié - et « je ne sais pas » se lit spontanément « tout va bien ».
Un contrôle est marqué périmé dès que tu régénères : un verdict vert sur le fichier d’hier ne dit rien de celui de ce matin.
Une pastille d’attention sur l’étape « Finaliser » tant qu’un fichier généré n’a pas été contrôlé. Elle ne s’allume jamais avant la première génération, pour ne pas devenir un décor qu’on apprend à ignorer.
Inclus
Aucune de tes valeurs ne quitte ton navigateur : seuls les NOMS des objets qui divergent sont mémorisés, sur ta machine, à côté du relevé du fichier généré.
Version 1.149.0
28 juillet 2026
Deux colonnes calculées du .pbip généré restaient en erreur (« l’expression contient des colonnes provenant de plusieurs tables »). En cause : pour rendre la formule plus lisible, la réécriture remplaçait EARLIER(...) par la colonne elle-même - or Power BI refuse qu’un filtre écrit en test vrai/faux cite deux tables à la fois.
Corrigé
Une réécriture qui met des colonnes de deux tables différentes dans un même filtre de CALCULATE est désormais refusée à la génération, avec son motif et le nom des deux tables. Elle vaut aussi pour les mesures, pas seulement les colonnes calculées.
L’assistant sait maintenant qu’on ne retire pas un EARLIER en le remplaçant par la colonne : il doit passer par une variable intermédiaire, la seule forme équivalente. L’optimisation est donc conservée au lieu d’être perdue.
Le contrôle ajouté hier ne pouvait pas attraper celui-ci : il compte les filtres, et leur nombre ne changeait pas. C’est le CONTENU d’un filtre existant qui devenait invalide.
Modifié
Les commentaires des formules ne sont plus lus comme du code par ces contrôles : un nom de table cité dans un commentaire ne déclenche plus rien.
Version 1.148.0
28 juillet 2026
Un .pbip généré refusait de s’ouvrir : « Une dépendance circulaire a été détectée ». En cause, des réécritures de formules qui remplaçaient un FILTER(...) par un filtre direct dans CALCULATE. Même résultat, mais la colonne se met alors à dépendre de TOUTE sa table - et deux colonnes finissent par s’attendre l’une l’autre.
Corrigé
Une réécriture de colonne calculée qui élargirait ses dépendances à toute la table est désormais REFUSÉE à la génération, avec son motif, plutôt que d’être écrite dans un fichier qui ne s’ouvrira pas. Sur le modèle de test, 13 réécritures sur 153 sont dans ce cas.
Deux formes sont couvertes, parce que les deux étaient présentes : le filtre direct (« 'Table'[Colonne] = valeur ») et le retrait de filtre (ALLEXCEPT, ALL, REMOVEFILTERS).
Le garde-fou existant ne pouvait pas le voir : il vérifie que la réécriture utilise les mêmes champs, et ici elle utilise exactement les mêmes. Le piège est dans le sens de l’opérateur, pas dans les noms cités.
Ajouté
Les colonnes utilisées par un rôle de sécurité (sécurité au niveau des lignes) ne sont plus jamais proposées à la suppression : leurs expressions de filtre étaient tout simplement invisibles à l’analyse. Protection préventive - ce n’était pas la cause du problème du jour.
Version 1.147.0
28 juillet 2026
En DAX, une case vide vaut zéro dans une comparaison. En Power Query, non. Une colonne déportée pouvait donc basculer dans la mauvaise branche - sans erreur, sans message, avec des chiffres faux. L’outil rétablit désormais la règle DAX tout seul.
Corrigé
Les comparaisons d’une colonne déportée à zéro (ou à une chaîne vide) sont protégées automatiquement, de même que les comparaisons entre deux colonnes de même type. Constaté sur un vrai rapport : un verdict passait de 235 lignes à 9, et 150 lignes changeaient de catégorie.
La correction ne touche QUE ce qu’elle peut prouver : un test de vide (« = null »), une comparaison à une valeur non nulle, ou deux colonnes de types inconnus ou discordants sont laissés strictement intacts.
Le type manquant des colonnes calculées (que Power BI ne stocke pas) est retrouvé dans la requête elle-même, là où la fusion vient de déclarer la colonne - sans quoi la moitié des cas resterait non réparable.
La règle est aussi enseignée à l’IA, mais la protection ne repose plus sur elle : sur le fichier de terrain, elle avait appliqué l’idiome correct deux colonnes plus haut et l’avait oublié ici.
Version 1.146.0
28 juillet 2026
La page d’accueil décrivait l’outil d’il y a plusieurs semaines. Elle passait sous silence ce qui est devenu le cœur du produit : les jointures qui remplacent une recherche dans une autre table, l’anticipation du pic d’actualisation, et le fait que tes propres relevés puissent remplacer nos estimations.
Modifié
Quatre capacités absentes sont désormais décrites : rapatrier une valeur d’une autre table par une jointure, anticiper le pic mémoire de l’actualisation, préparer les déports dans le bon ordre en un clic, et ce qui reste à faire à la main avec son plan d’action.
Une carte dit maintenant que tu gardes la main sur les coûts IA et sur la durée de conservation de tes fichiers.
Le parcours décrit correspond à nouveau au parcours réel : l’étape finale « Finaliser » y figure, et deux cartes redondantes ont été fusionnées plutôt qu’empilées.
Version 1.145.0
28 juillet 2026
« Le FILTER ne porte pas sur la table agrégée » : exact, et parfaitement inutile. Ni quelle table, ni pourquoi c’est un problème, ni s’il y a quelque chose à faire. Ce message unique recouvrait trois situations différentes ; il en dit désormais trois choses différentes.
Modifié
Le motif nomme la table en cause et distingue les deux cas réels : un filtre posé sur la table de départ (le calcul regroupe par les attributs de la ligne courante) et un filtre posé sur une table tierce (il restreint en passant par les relations du modèle).
Sur le modèle de test, un seul message couvrant 6 colonnes se sépare en 4 diagnostics distincts, chacun nommant sa table.
Là encore, aucune colonne de plus n’est déportable : ces formes demandent de reproduire la propagation par les relations, ce qui est un chantier à part entière et non un détail de message.
Version 1.144.0
28 juillet 2026
Un calcul peut cacher ses agrégats dans des variables intermédiaires (VAR). L’outil ne regardait que le résultat final : deux colonnes du modèle de test cachaient ainsi DIX-HUIT agrégats chacune, et passaient pour n’en contenir aucun. Il les voit désormais, et dit précisément ce qui manque pour les déporter.
Modifié
Les agrégats enfouis dans une variable intermédiaire sont maintenant relevés. Un calcul qui en cache ne peut donc plus être pris pour un cas « pur » et traité en oubliant une partie de lui-même.
Les motifs de refus deviennent précis : sur le modèle de test, 7 colonnes sur 10 passent d’un « forme non reconnue » générique à un diagnostic exact (clé de jointure, forme du filtre, OU logique…).
À noter : aucune colonne de plus n’est déportable pour l’instant. Ce qui bloque les deux colonnes les plus importantes est désormais nommé - leur clé de jointure est un calcul, pas une colonne - et c’est le prochain chantier.
Version 1.143.0
28 juillet 2026
Certaines colonnes annonçaient « possible via une fusion », puis n’affichaient plus rien : ni recette, ni refus, ni motif. Impossible de savoir s’il fallait attendre, agir ou renoncer. Elles disent maintenant pourquoi.
Corrigé
Une forme de fusion non reconnue affiche désormais « Fusion non générée » et son motif, au lieu de laisser la carte vide. Sur le modèle de terrain, dix colonnes étaient dans ce cas - dont les deux qui en bloquent dix-neuf autres à elles seules.
Le motif dit aussi ce qu’il n’est pas : ces formes ne sont pas un défaut de ton modèle, mais un cas que l’outil ne couvre pas encore.
Version 1.142.0
28 juillet 2026
Un refus de l’IA n’était mémorisé nulle part : la campagne du lendemain reproposait les mêmes colonnes, au même prix. Le refus est maintenant retenu avec l’empreinte de ce qui a été soumis - assez pour ne pas repayer deux fois la même question, pas assez pour figer une colonne qui deviendra traduisible.
Corrigé
Une fusion mixte refusée par l’IA n’est plus resoumise à l’identique lors d’une campagne suivante. Sur le modèle de terrain, huit colonnes refusées la veille étaient reproposées le lendemain pour ~0,17 $.
Le refus reste PÉRISSABLE : dès qu’une colonne dont le calcul dépend est déportée, le contrat annoncé à l’IA change et la tentative se rouvre toute seule. Un simple drapeau « déjà refusé » aurait cassé le mécanisme des vagues successives.
Ces colonnes sont comptées sur une ligne à elles dans l’écran de confirmation (« Déjà refusées à l’identique, non refacturées ») : les fondre dans « sans recette applicable » les aurait fait changer de case sans explication.
Version 1.141.0
28 juillet 2026
« 187 sur 471 » : un tiers du chemin, alors que le travail faisable était aux deux tiers. 181 de ces 471 colonnes agrègent des lignes ou dépendent du contexte de filtre - une colonne Power Query, calculée ligne à ligne, ne peut pas les reproduire, et aucune action de ta part n’aurait jamais comblé l’écart. Elles sortent du compte, sans disparaître du décor.
Modifié
Le compteur de déport ne rapporte plus qu’aux colonnes réellement déportables : « 187/290 (+181 hors de portée) » au lieu de « 187/471 ». Le verdict est le même que celui affiché depuis toujours sur chaque carte (« À garder en DAX / à la source »), simplement additionné.
Les colonnes hors de portée restent annoncées et explicables au survol : elles sortent du ratio, pas de la vue - une colonne qui disparaîtrait d’un compte sans explication serait pire que le chiffre décourageant qu’on corrige.
Les textes de conservation annonçaient « 7 jours » partout alors que tu règles la durée jusqu’à 90 jours depuis la v1.134 : ils disent maintenant que 7 jours est le défaut, et les messages d’expiration ne citent plus de durée en dur (ils la citaient fausse au moment précis où tu cherchais à comprendre).
Ajouté
Un bouton « Tout afficher » dans les listes de constats : les parcourir par paquets de 20 demandait 23 clics sur un gros modèle. Le pas de 20 reste le défaut (monter des centaines de cartes d’un coup ralentit la page) - la version lente devient un choix annoncé.
Version 1.140.0
28 juillet 2026
Une colonne calculée ne peut sortir en Power Query que si celles dont elle dépend en sont déjà sorties. Chaque carte savait te dire « celle-ci dépend de X » - mais pour savoir PAR OÙ COMMENCER, il fallait toutes les lire. L’information t’est maintenant donnée dans le bon sens, en tête du bloc de déport.
Ajouté
Une carte « Par où commencer » qui liste les colonnes bloquantes, classées par nombre de colonnes qu’elles libèrent. Sur un modèle réel : 5 colonnes en bloquent 26 autres, dont une seule qui en libère 10.
Les colonnes qui attendent PLUSIEURS dépendances sont comptées à part (« + N partiellement ») : traiter un seul bloqueur ne les libère pas, et te le promettre serait faux.
Un bloqueur lui-même bloqué est signalé comme tel, et ceux que tu peux traiter tout de suite passent devant.
Version 1.139.0
28 juillet 2026
Quand une de tes fusions va chercher une valeur dans une table qu’une autre fusion est justement en train de fabriquer, elle doit passer après elle. Le calcul de cet ordre ne regardait qu’une partie de ce qu’une fusion lit : certaines étaient refusées pour une raison fausse, un instant avant que la colonne attendue n’apparaisse.
Corrigé
L’ordre dans lequel tes tables sont traitées tient désormais compte de TOUT ce qu’une fusion lit ailleurs : plusieurs colonnes d’une même table, jointures multiples, tables traversées par une chaîne de relations, et colonnes agrégées avec leurs filtres.
Version 1.138.0
28 juillet 2026
La nouveauté annoncée hier - les colonnes qui vont chercher une valeur à travers plusieurs relations en cascade - ne fonctionnait en fait jamais. L’outil savait l’écrire dans le fichier, mais ces colonnes étaient écartées avant d’y arriver, sans le dire. C’est corrigé, et le vrai compte sur ton rapport est de 7 colonnes.
Corrigé
Les fusions qui traversent une chaîne de relations sont maintenant réellement appliquées. Le contrôle qui vérifie qu’une colonne existe avant d’écrire une jointure ne reconnaissait pas la clé fabriquée par le premier passage : il la prenait pour une colonne manquante et écartait la colonne entière.
Le compte annoncé hier (15 colonnes) n’a pas été retrouvé en rejouant l’analyse sur ton rapport : il y en a 7. Trois sont générables tout de suite ; les quatre autres attendent que la colonne qu’elles vont chercher soit elle-même sortie du calcul DAX, et l’indiquent désormais avec ce motif précis.
Modifié
Une colonne en cascade ne pénalise plus les autres colonnes de sa table. Elle est écrite à part : sans cela, une seule d’entre elles faisait basculer toutes les fusions de la même table vers la méthode la plus lente, celle qui relit la source une seconde fois.
Inclus
Les refus sont maintenant motivés par la vraie raison. Une colonne écartée te dit quelle clé ou quelle colonne lui manque et sur quelle table, au lieu d’un message qui désignait une colonne inexistante.
Version 1.137.1
28 juillet 2026
Chaque étape sépare ce qui part tout seul dans le fichier généré de ce qui reste à faire à la main dans Power BI. Ce choix te suivait d’une étape à l’autre, même quand l’étape d’arrivée n’avait rien de ce côté-là : la page s’ouvrait vide, sans les onglets pour revenir. Une étape qui n’a qu’une seule catégorie affiche désormais celle-là.
Corrigé
Choisir « À faire à la main » sur une étape puis passer sur une étape 100 % automatique donnait un écran vide et sans issue : le travail de l’étape était invisible et elle semblait terminée. La bascule retombe maintenant sur le côté qui a quelque chose à montrer.
Inclus
Ton choix est conservé partout où il a un sens : sur une étape qui a bien les deux, tu restes sur l’onglet que tu avais sélectionné.
Version 1.137.0
28 juillet 2026
Quand une de tes colonnes va chercher une valeur à travers plusieurs relations en cascade (ton modèle est « en flocon »), l’outil savait le reconnaître depuis hier mais s’arrêtait là. Il sait maintenant l’écrire dans le fichier généré : un premier passage ramène la clé, le second va chercher la valeur.
Ajouté
Les fusions qui traversent une chaîne de relations sont désormais appliquées dans le .pbip généré. Sur le rapport qui a servi au diagnostic, cela concernait 15 colonnes calculées jusqu’ici bloquées.
Inclus
Quand la table de départ lit une requête SQL, ce cas précis reste traité en Power Query plutôt qu’à la source : la clé intermédiaire n’existe pas dans ta requête d’origine, et l’y référencer ferait échouer l’actualisation.
Version 1.136.0
27 juillet 2026
Certaines fusions étaient refusées avec un message qui accusait ton modèle à tort (« RELATED ne devrait pas fonctionner non plus »). C’était faux : ta formule marche très bien, elle passe simplement par une chaîne de relations. Le message dit maintenant la vérité, nomme la chaîne, et indique quoi faire. Au passage, les relations écrites « à l’envers » dans le modèle ne sont plus ignorées.
Corrigé
Une relation déclarée « un-à-plusieurs » n’est plus invisible : la fusion correspondante était refusée alors que la relation existait.
Quand ta formule va chercher une valeur à travers plusieurs relations en cascade (modèle « en flocon »), l’outil te dit désormais quelle est la chaîne et pourquoi il ne sait pas encore la traiter, au lieu de te faire croire à un défaut de ton modèle.
Version 1.135.0
27 juillet 2026
Jusqu’ici, l’outil ESTIMAIT la vitesse de tes visuels et la durée de tes actualisations : il ne peut pas exécuter ton modèle à ta place. Tu peux maintenant lui donner deux relevés que Power BI Desktop sait exporter, et il remplace ses estimations par de vraies mesures - à condition de lui donner le même relevé sur ton fichier d’origine ET sur l’optimisé. C’est la comparaison qui prouve un gain, jamais une mesure seule.
Ajouté
L’import de l’Analyseur de performances de Power BI Desktop (onglet Affichage), qui donne la durée réelle des requêtes derrière chaque visuel.
L’import des durées des diagnostics Power Query : le temps réellement passé à extraire et transformer chaque table. C’est le même geste que pour la mémoire, sur une autre table du dossier Diagnostics.
Un verdict chiffré avant/après une fois les deux relevés donnés, avec le détail des durées.
Modifié
Quand une durée d’extraction a été mesurée sur une table, la carte du constat affiche la MESURE au lieu de l’estimation.
Une durée mesurée sur les visuels reste affichée au niveau du rapport, jamais sur une carte : elle se rapporte à un visuel, alors que les constats portent sur des formules et des colonnes. L’attribuer à une optimisation précise serait plus flatteur, mais faux.
Corrigé
Importer une mesure pouvait en effacer une autre en silence (par exemple ta volumétrie effaçant ta mesure de mémoire). Tout ce qui n’est pas explicitement remplacé est désormais conservé.
Les nombres à virgule des relevés collés étaient mal lus : « 1,5 » devenait 15.
Version 1.134.0
27 juillet 2026
Tu décides maintenant combien de temps on garde ton fichier .pbip : de 7 à 90 jours, rapport par rapport. Tu peux aussi le supprimer tout de suite, te faire prévenir avant l’échéance, et consulter le journal de tout ce qui s’est passé sur ce fichier - y compris les suppressions automatiques.
Ajouté
Une durée de conservation réglable par rapport (7, 14, 30, 60 ou 90 jours), dans l’écran « Outils ». Le plafond de 90 jours se compte depuis l’envoi du fichier : il ne peut pas être repoussé indéfiniment.
Un bouton « Supprimer le fichier maintenant », sans attendre l’échéance. Ton analyse reste, comme toujours.
Une alerte avant suppression, réglable sur ta page « Mon compte » (jamais, 1, 2, 3, 7 ou 14 jours avant). Elle arrive dans la cloche en haut de l’écran.
Un journal, par rapport, de tout ce qui a touché à la durée de vie du fichier : tes propres gestes ET les suppressions automatiques, avec la date et l’échéance avant/après.
Une vraie section « Durée de conservation » dans la politique de confidentialité : ce qui est gardé, combien de temps, et comment le vérifier.
Corrigé
Quand la suppression d’un fichier échoue (incident chez l’hébergeur du stockage), tu es maintenant prévenu au bout de trois nuits. Avant, la tentative se répétait indéfiniment en silence et le fichier restait au-delà de la durée annoncée sans que personne ne le sache.
Version 1.133.0
27 juillet 2026
« Date/heure automatique » affichait un impact nul, comme un simple réglage d’affichage. C’est pourtant souvent le plus gros gain du modèle : Power BI fabrique une table de dates cachée pour CHAQUE colonne date, et les désactiver les supprime toutes. Tu vois maintenant combien de mémoire tu récupères, en chiffres réels dès que tu as importé la volumétrie.
Corrigé
« Date/heure automatique » affiche son vrai impact : mémoire libérée (chiffrée), pic d’actualisation en baisse, et surtout une attente bien plus courte quand tu écris une formule dans Power BI Desktop - c’est le seul geste qui retire des centaines d’objets cachés d’un coup.
Les visuels et la durée d’extraction restent annoncés à « inchangé » pour cette optimisation : ces tables cachées ne sont ni interrogées par tes visuels, ni extraites de ta source. Rien n’est promis qui ne soit vrai.
Version 1.132.0
27 juillet 2026
Ménage dans les modes d’emploi « comment l’appliquer ». Six d’entre eux décrivaient des gestes que l’outil fait désormais tout seul : plus aucun écran ne pouvait les montrer, ils ont été retirés. Le septième, en revanche, manquait là où il servait vraiment : quand la génération renonce à réécrire un « SELECT * », elle t’explique maintenant comment le faire toi-même.
Ajouté
La marche à suivre s’affiche sous une optimisation que la génération n’a pas pu appliquer, quand le geste reste faisable à la main (cas du « SELECT * » laissé tel quel).
Modifié
Les modes d’emploi devenus inutiles ont été supprimés : ils décrivaient des réglages (format d’affichage, résumé par défaut, date/heure automatique, relation inactive) et des suppressions d’objets que le fichier généré applique désormais sans toi.
Version 1.131.0
27 juillet 2026
Le parcours ne mélange plus ce qui part tout seul dans le fichier généré et ce que tu devras faire toi-même dans Power BI. Chaque étape s’ouvre désormais sur ce que tu peux préparer et embarquer ; ce qui reste à faire à la main est à un clic, et rassemblé dans une nouvelle étape « Finaliser », placée après « Générer » - c’est-à-dire au moment où tu le feras vraiment.
Ajouté
Une bascule « Embarquable dans le .pbip » / « À faire à la main » en tête de chaque étape, avec le nombre de chaque côté.
Une étape « Finaliser » qui rassemble tout ce qui restera à faire dans Power BI, avec son plan téléchargeable.
Modifié
L’étape « Générer » ne parle plus que du fichier : elle renvoie vers « Finaliser » pour le reste.
La liste de « Finaliser » se réduit d’elle-même dès qu’une formule reçoit une proposition de réécriture ou qu’un déport est coché - la page l’explique, pour que cette disparition ne passe pas pour un défaut.
Version 1.130.0
27 juillet 2026
Une série de corrections d’interface. Les plus utiles : le bouton qui effaçait tes mesures importées demande maintenant confirmation, trois panneaux qui disparaissaient sans un mot en cas de coupure réseau affichent l’erreur et un bouton « Réessayer », et les traitements IA en masse peuvent enfin être arrêtés en cours de route. Le vert des gains a aussi été assombri : il était deux fois moins lisible que nécessaire en thème clair.
Corrigé
Effacer les mesures importées demande confirmation : c’est une collecte manuelle que l’app ne sait pas refaire à ta place.
L’impact de ta sélection, le simulateur d’actualisation et les clés de substitution ne disparaissent plus en silence quand leur chargement échoue : ils l’annoncent et proposent de réessayer.
Les champs du simulateur se saisissent enfin au clavier (taper 128 était impossible), et le pic mesuré accepte la virgule française (39,8).
Un traitement IA en masse peut être arrêté en cours de route : ce qui est déjà fait est conservé.
Le vert des gains est lisible en thème clair (il était sous la moitié du seuil recommandé).
« Déporter » et « Convertir » ne désignent plus la même action par deux mots différents.
Version 1.129.0
27 juillet 2026
Renforcements de sécurité, sans rien de visible à l’usage. Le principal concerne la réinitialisation de mot de passe : la vérification d’un lien devenait de plus en plus coûteuse à mesure que des demandes s’accumulaient, ce qu’un tiers pouvait provoquer volontairement en noyant quelqu’un d’emails. Les liens sont maintenant vérifiés directement, un seul est valide à la fois, et les anciens sont nettoyés chaque jour.
Modifié
Demander un nouveau lien de réinitialisation annule le précédent : un seul lien valide à la fois.
Un lien de réinitialisation ne peut réellement servir qu’une fois, même si on le soumet deux fois en même temps.
L’adresse technique du compte administrateur ne peut plus être utilisée à l’inscription.
Les fichiers dont le contenu compressé annonce une taille irréaliste sont refusés plus tôt.
Les liens périmés et les réservations d’analyse IA abandonnées sont nettoyés chaque jour.
Version 1.128.0
27 juillet 2026
Relancer l’analyse ne fait plus disparaître les alertes de la revue de cohérence. Ces alertes viennent d’une analyse IA payante, et l’analyse classique ne sait pas les reproduire : elles étaient effacées à chaque relance, et il fallait repayer la revue. Elles sont maintenant conservées telles quelles, y compris celles que vous aviez écartées.
Corrigé
Les alertes de la revue de cohérence (IA) survivent à une relance d’analyse, avec leur statut - plus besoin de relancer la revue.
Exception volontaire : si la formule concernée a changé dans le nouveau fichier, l’alerte est abandonnée. Elle décrivait l’ancien calcul, la garder induirait en erreur ; relance la revue pour analyser le nouveau.
Version 1.127.0
27 juillet 2026
Cinq corrections sur ce que contient réellement le fichier généré. Deux réparent des cas où il sortait cassé : deux colonnes dont le nom commence pareil (« Prix Total » et « Prix Total HT ») empêchaient la table de s’actualiser, et une façon d’écrire la source confondait le nom de la base de données avec la requête. Les trois autres alignent le fichier sur vos décisions : une case cochée sans validation n’était pas appliquée mais rien ne le disait, tandis qu’à l’inverse une carte remise à « ignoré » partait quand même.
Corrigé
Deux colonnes dont l’une contient l’autre dans son nom ne cassent plus la requête générée (l’actualisation de la table entière échouait).
Les tables dont la source est écrite en une seule ligne sont de nouveau reconnues : leur requête était confondue avec le nom de la base, ce qui rendait le déport et la fusion indisponibles sans explication, et pouvait abîmer le fichier généré.
Règle unique et affichée : cocher propose, valider engage. Une option cochée sur une carte non validée n’est pas appliquée - et elle est désormais LISTÉE dans le récapitulatif, au lieu de disparaître en silence.
À l’inverse, une carte remise à « ignoré » n’est plus appliquée quand même (c’était le cas des fusions et des conversions de tables).
Cocher un déport marque bien la carte comme validée à l’écran, sans recharger le rapport.
Relancer la traduction d’une table calculée ne décoche plus sa conversion.
Version 1.126.1
27 juillet 2026
Une correction d’affichage qui pouvait coûter de l’argent. Depuis la 1.124, les textes écrits par l’IA sont chargés séparément du reste de la page. Tant qu’ils n’étaient pas arrivés - et pour toujours si leur chargement échouait -, une formule déjà réécrite réaffichait le bouton « Proposer une réécriture (IA) » : un clic relançait une analyse IA payante sur un travail déjà fait.
Corrigé
Une formule déjà réécrite ne repropose plus de la réécrire pendant le chargement de sa proposition : la carte annonce l’attente.
Si le chargement des propositions échoue, la carte le dit et offre un bouton « Réessayer », au lieu de rester silencieusement sur le bouton payant.
Version 1.126.0
27 juillet 2026
Trois garde-fous, invisibles dans l’usage normal. Le premier empêche que le plafond de dépense IA soit dépassé quand beaucoup d’analyses partent en même temps : le compteur ne voyait que les analyses déjà terminées, donc des appels lancés ensemble se croyaient tous les premiers. Les deux autres protègent votre travail lors d’une relance d’analyse : deux relances simultanées ne peuvent plus se marcher dessus, et une relance ne peut plus vider un rapport si elle est interrompue en cours de route.
Corrigé
Le plafond de dépense IA tient désormais aussi quand plusieurs analyses partent en même temps : chaque appel met de côté son budget avant de commencer, et pas plus de 12 analyses IA tournent à la fois sur un compte.
Relancer l’analyse deux fois en même temps (deux onglets, un double-clic) n’est plus possible : la seconde attend son tour, avec un message clair.
Une analyse interrompue ne laisse plus le rapport bloqué en « analyse en cours » : il redevient analysable au bout d’un quart d’heure.
Une relance d’analyse ne peut plus vider un rapport de ses constats si elle échoue en cours de route, y compris sur les très gros modèles (au-delà de 4 000 constats, l’enregistrement échouait d’un bloc).
Version 1.125.0
27 juillet 2026
Deux corrections de fond issues d’un audit complet du code. La première touche la justesse des chiffres : quand deux colonnes calculées résumaient la même table avec des filtres différents (les positifs d’un côté, les négatifs de l’autre), le fichier généré pouvait appliquer le filtre de la première aux deux - une colonne fausse, sans aucun message d’erreur. La seconde touche vos données : le ménage automatique du 7e jour effaçait le rapport en entier au lieu du seul fichier d’origine, alors que l’app annonçait partout que l’analyse était conservée.
Corrigé
Deux résumés d’une même table avec des filtres différents ne sont plus confondus : chacun garde son propre périmètre dans le fichier généré. Les filtres concernés sont ceux ajoutés récemment (plus grand que, différent de, listes de valeurs, cases vides).
Le ménage du 7e jour ne supprime plus que le fichier Power BI d’origine : l’analyse, les validations, les réécritures et les mesures importées restent en place, comme l’app l’a toujours annoncé.
Si la suppression du fichier échoue, elle est retentée le lendemain au lieu d’être abandonnée.
Version 1.124.0
27 juillet 2026
Trois corrections de consommation, après le dépassement du quota de transfert réseau de la base en juillet. La plus importante ne se voit pas dans l’interface : le développement de l’app se faisait jusqu’ici contre la base de PRODUCTION, ce qui consommait le quota à chaque rechargement de page. Les deux autres suppriment du transport inutile : les textes écrits par l’IA ne repartent plus sur le réseau à chaque changement de statut, et le traitement groupé des réécritures ne relit plus tout le rapport à chaque paquet de quatre formules.
Modifié
Les propositions et explications de l’IA sont chargées à part : elles ne sont plus retéléchargées à chaque changement de statut ou déport (une trentaine de points de rechargement dans la page).
Le traitement groupé des réécritures ne relit plus la totalité des constats à chaque paquet : il ne charge que les formules qu’il va traiter.
Une base de données locale pour le développement, pour ne plus travailler contre la base de production (et ne plus en consommer le quota).
Version 1.123.0
27 juillet 2026
Le plus gros déblocage du chantier de déport. Sur ton modèle, le premier motif de refus des fusions était « le filtre n’est pas une conjonction d’égalités simples » : 39 colonnes. Il tombe à zéro, et le nombre de recettes générées passe de 101 à 178. La vraie cause n’était pas une comparaison compliquée, mais deux fonctions très courantes - ALLCROSSFILTERED et REMOVEFILTERS - qui servent justement à ne garder que le rapprochement écrit noir sur blanc : on refusait la formule à cause de la ligne qui la rendait la plus sûre. Au passage, le périmètre d’un regroupement accepte maintenant les comparaisons (plus grand que, différent de, dans une liste, valeur vide), avec un garde-fou important sur les cellules vides.
Ajouté
Les formules qui neutralisent les relations pour ne garder que leur rapprochement explicite (ALLCROSSFILTERED, REMOVEFILTERS, ALL) sont enfin déportables : c’est exactement ce que fait le déport.
Le périmètre d’un regroupement accepte les comparaisons : plus grand que, plus petit que, différent de, dans une liste, vide ou non vide.
Garde-fou sur les cellules vides : Power BI compte une cellule vide comme un zéro avant de comparer, une base de données non - sans correction, des lignes auraient disparu du calcul en silence. Chaque condition emporte désormais son verdict et la requête est complétée quand il le faut.
Restent volontairement refusées : les comparaisons d’ordre sur du texte (Power BI et le serveur ne trient pas pareil), les fonctions appliquées à la colonne, et les comparaisons entre deux colonnes.
Corrigé
Une liste de valeurs entre accolades ne coupe plus la formule en deux : ses virgules étaient prises pour des séparateurs.
Quand une condition n’est pas déportable, le message cite la condition en cause au lieu d’un motif générique.
Version 1.122.0
27 juillet 2026
Deux corrections de justesse. D’abord, les pages « Mesurer » et « Générer » annonçaient deux chiffres différents pour le même modèle : seule la seconde recalait ses estimations sur le pic réel que tu as mesuré. Les deux le font désormais, avec le même calcul - tu peux enfin comparer ce que promet la page Mesurer et ce qu’affiche la page Générer. Ensuite, une forme d’écriture DAX courante (un CALCULATE qui enveloppe un comptage, sans filtre) est maintenant comprise au lieu d’être écartée d’un mot vague ; à noter qu’elle ne débloque aucune colonne supplémentaire sur le modèle de test, mais l’outil dit désormais précisément pourquoi il refuse.
Corrigé
Les pages « Mesurer » et « Générer » utilisent le même recalage sur ta mesure réelle : leurs chiffres sont enfin comparables.
La double copie du modèle n’est jamais recalée (c’est une quantité sûre), et une mesure prise sur un fichier déjà optimisé ne fausse plus la page Mesurer.
Un CALCULATE enveloppant sans filtre est compris pour ce qu’il est - un filtrage par la ligne courante à travers les relations - et non confondu avec son contenu, ce qui aurait compté toute la table.
Version 1.121.0
27 juillet 2026
Dernier gros morceau du chantier des fusions : une colonne peut maintenant à la fois aller CHERCHER une valeur dans une autre table et COMPTER des lignes d’une troisième, en une seule opération. C’était le blocage concret rencontré sur le terrain - la partie « aller chercher » passait, mais le comptage restait en DAX et l’outil refusait, à raison : aucun calcul Power Query ligne par ligne ne sait faire un comptage sur une autre table. Il devient un regroupement calculé par le serveur. Sur le modèle de test, 8 colonnes en bénéficient. Point d’attention important : un comptage ne peut s’écrire qu’en SQL, et l’ancien comportement aurait fait perdre TOUTES les fusions d’une table dès qu’une seule colonne en contenait un sans SQL disponible. Désormais seule la colonne concernée est laissée de côté, avec son motif.
Ajouté
Une colonne qui lit une valeur ailleurs ET compte des lignes dans une autre table est désormais traitée en entier, au lieu de laisser le comptage en DAX.
Plusieurs comptages différents sur une même colonne (tables, clés ou filtres distincts) sont acceptés : chacun devient son propre regroupement.
Corrigé
Une colonne à comptage qui ne peut pas partir en SQL n’entraîne plus le refus de toutes les autres fusions de sa table : elle seule est écartée, et l’outil le dit.
Une colonne écartée n’est plus marquée comme provenant de la requête : elle serait apparue vide après actualisation.
Version 1.120.0
27 juillet 2026
Les fusions qui joignent plusieurs tables savent maintenant se faire « à la source », directement dans la requête SQL, au lieu de retomber sur Power Query. Concrètement : une seule lecture de la source au lieu de plusieurs, et le travail part sur le serveur plutôt que sur ton poste. Ce lot était aussi un passage obligé pour la suite du chantier : les comptages qui parcourent une autre table ne peuvent s’écrire qu’en SQL, et ils demandent deux jointures à la fois - sans cette étape, ils n’auraient pu passer par aucun des deux chemins.
Ajouté
Une colonne qui joint plusieurs tables produit plusieurs jointures dans la requête SQL, avec une seule lecture de la source.
Deux colonnes qui joignent la même table de la même façon continuent de partager une seule jointure.
Corrigé
Les clés de toutes les jointures entrent dans les vérifications de sûreté, et plus seulement celles de la première : un oubli n’aurait pas déclenché d’erreur, mais aurait donné des valeurs fausses.
Quand une seule des tables concernées n’est pas éligible au SQL, tout le lot repart proprement en Power Query - jamais une requête à laquelle il manquerait une jointure.
Version 1.119.0
27 juillet 2026
Les fusions savent désormais joindre PLUSIEURS tables pour une seule colonne. Jusqu’ici, une colonne calculée qui va chercher des valeurs dans deux tables différentes était refusée sèchement : l’outil ne savait poser qu’une jointure à la fois. C’était le plus gros gisement restant. Sur le modèle de test, 6 colonnes deviennent traitables et le motif de refus « cette colonne lit dans 2 ou 3 tables différentes » disparaît complètement. Deux précautions importantes : chaque jointure supplémentaire passe le même contrôle de sûreté que la première (une jointure qui réclamerait une colonne absente casserait l’actualisation), et le chemin « à la source (SQL) », qui ne sait pas encore écrire ces jointures multiples, les refuse franchement et laisse la main à Power Query plutôt que de produire un résultat faux en silence.
Ajouté
Une colonne qui lit plusieurs tables reçoit une jointure par table, au lieu d’être refusée.
Deux recherches vers la même table mais sur des clés différentes deviennent deux jointures, au lieu d’en laisser une dans le calcul restant.
Deux colonnes qui joignent la même table de la même façon continuent de partager une seule jointure : rien n’est écrit en double.
Corrigé
Le contrôle de sûreté qui vérifie que chaque colonne utilisée existe bien dans la requête couvre maintenant les jointures supplémentaires.
Le chemin « à la source (SQL) » refuse explicitement ces fusions et se replie sur Power Query, au lieu de les ignorer sans le dire.
Inclus
Prochaine étape du chantier : les comptages qui parcourent une autre table ligne par ligne, encore laissés en DAX.
Version 1.118.0
27 juillet 2026
Trois améliorations de l’écran d’optimisation. Le déport gagne une troisième étape : les tables calculées, traitées en lot. Une table calculée est reconstruite entièrement à chaque actualisation, c’est l’un des plus gros postes du pic mémoire - et elle arrive en 3e position parce que sa traduction a besoin des colonnes déportées aux étapes 1 et 2. Les changements de type regroupent maintenant les colonnes concernées dans leur propre carte, avec un avertissement clair : ces conversions font PERDRE de l’information (l’heure d’une date, les décimales au-delà de la 4e), donc il faut décocher les colonnes où tu en as besoin. Enfin, chaque clé de relation en texte affiche son propre impact : ce sont des compromis, et ils ne se valent pas tous.
Ajouté
Étape 3 du déport : « Déporter les tables calculées en Power Query », en lot, avec le nombre exact et le coût annoncés avant de lancer.
Les tables dont le refus ne dépend pas des déports sont écartées du lot et annoncées comme telles, au lieu de dépenser de l’IA pour un échec certain.
Modifié
Les colonnes concernées par un changement de type sont désormais listées DANS leur carte d’action groupée, à côté du réglage qui les gouverne, au lieu d’être ailleurs sur la page.
L’avertissement dit franchement ce qui est perdu : « date-heure → date » supprime l’heure, « flottant → nombre décimal fixe » ne garde que 4 chiffres après la virgule. Chaque cas indique quand il faut décocher.
Chaque clé de relation en texte affiche son propre impact (taille, pic d’actualisation, visuels, extraction, édition), au lieu du seul total de toutes les clés.
Corrigé
Le bouton « Tout préparer » renvoyait vers la mauvaise étape pour cocher la conversion d’une table calculée.
Version 1.117.0
26 juillet 2026
Un cinquième objectif entre dans le parcours : « Fluidifier l’édition ». Il répond à une gêne bien réelle que l’outil ignorait complètement - quand on crée une colonne calculée dans Power BI Desktop, l’attente avant de pouvoir simplement taper sa formule. C’est un coût de conception, invisible sur le rapport publié, et il ne dépend pas du volume de données : il dépend du nombre d’objets que Desktop doit passer en revue pour l’autocomplétion, et de la densité des liens entre colonnes calculées qu’il doit revérifier (ajouter une colonne calculée modifie la structure du modèle). Une nouvelle analyse chiffre les deux causes et dit laquelle domine, parce que les remèdes ne sont pas les mêmes. Effet de bord agréable : supprimer une mesure affiche enfin un bénéfice - elle ne pèse rien en mémoire, mais c’est un objet de moins à passer en revue.
Ajouté
Nouvel objectif « Fluidifier l’édition » et nouvel axe d’impact « Attente à l’édition d’une formule » : le confort de conception devient un sujet à part entière, à côté de la mémoire, de l’actualisation, des visuels et de l’extraction.
Nouvelle analyse qui compte les objets du modèle (tables de dates cachées de « Date/heure automatique » incluses) ET la densité des liens entre colonnes calculées, en nommant la cause dominante et en classant les remèdes du plus rentable au moins rentable.
Supprimer une mesure affiche désormais un gain : celui du confort d’édition, le seul qu’une mesure puisse apporter puisqu’elle n’occupe pas de mémoire.
Corrigé
Le décompte par axe de la page « Générer » se déduit maintenant de la liste des axes : tel qu’il était écrit, il aurait oublié le nouvel axe sans rien signaler.
Inclus
Les rapports déjà analysés doivent être ré-analysés pour voir la nouvelle analyse apparaître. Le nouvel objectif, lui, fonctionne tout de suite : il regroupe des recommandations déjà présentes.
Version 1.116.1
26 juillet 2026
Correctif d’affichage sur les clés de relation : celles que l’outil ne sait pas convertir automatiquement étaient listées plusieurs fois. La cause : l’analyse passe en revue les relations une par une, donc une clé utilisée dans trois relations était signalée trois fois, avec le même motif. Le compte affiché était gonflé (14 annoncées pour 9 réelles) et la liste pouvait perdre ou dupliquer une ligne à l’écran. Chaque clé n’apparaît plus qu’une fois par motif - deux motifs différents sur la même clé restent bien deux informations.
Corrigé
Une clé de relation non convertible n’est plus listée qu’une seule fois par motif, au lieu d’une fois par relation où elle apparaît.
Le nombre affiché de clés non convertibles est désormais juste (il comptait les doublons).
Version 1.116.0
26 juillet 2026
Nouveau levier, le dernier de la chaîne : réécrire en masse les formules DAX qui ne peuvent PAS sortir du modèle - les mesures (du DAX par nature) et les colonnes dont le déport a été refusé. Jusqu’ici il fallait cliquer formule par formule, impraticable quand il y en a des dizaines. Point important : rien n’est validé automatiquement, tu obtiens des propositions à relire. Une réécriture de formule n’a pas de recette prouvée, contrairement à un déport - elle ne s’applique donc jamais sans ton accord. Au passage, un vrai piège évité : un premier essai proposait 290 colonnes à réécrire pour ~8 $, alors que la quasi-totalité attendaient en réalité un déport (bien meilleur levier : la colonne disparaît de la mémoire au lieu d’être calculée plus proprement). L’outil fait maintenant le tri et te dit combien de colonnes il écarte pour cette raison.
Ajouté
« Tout réécrire en DAX » (étape Affiner) : traite d’un coup les formules qui ne peuvent pas sortir du modèle, avec le nombre exact et le coût annoncés avant de lancer, et une reprise automatique des échecs passagers.
Le récapitulatif distingue les formules écartées par le garde-fou de fidélité (la réécriture changeait les champs lus, donc le résultat aurait pu bouger : c’est un refus volontaire) des vraies pannes techniques.
Corrigé
Les colonnes encore déportables sont écartées du lot de réécriture et annoncées comme telles : mieux vaut les déporter que les réécrire. Sans ce tri, l’outil proposait de dépenser de l’IA à contresens de son propre conseil.
Le bandeau de l’action groupée n’affiche plus de total : il annonçait un chiffre que l’aperçu contredisait ensuite (477 contre 191).
Version 1.115.0
26 juillet 2026
Le travail de déport se fait par vagues : une colonne ne peut sortir du modèle que si celle dont elle dépend est déjà sortie, donc chaque passage débloque le suivant. C’était une règle interne de l’outil, jamais dite - il fallait deviner qu’il fallait relancer, et dans quel ordre. Trois changements : les deux actions groupées sont remises dans l’ordre utile et numérotées (les fusions d’abord, elles rendent des colonnes disponibles pour la suite) ; après chaque exécution, l’outil annonce le nombre exact de colonnes que cette vague vient de débloquer, avec un bouton pour enchaîner ; et un bouton « Tout préparer » déroule seul toute la série jusqu’à épuisement, arrêtable à tout moment. Au passage, une conversion de table calculée refusée à cause d’une colonne qui n’était pas encore disponible le signale dès que le blocage saute, au lieu de rester périmée en silence.
Ajouté
Bouton « Tout préparer » : déroule seul les fusions puis les déports, en boucle, jusqu’à ce qu’une vague n’apporte plus rien - avec le coût annoncé au fur et à mesure, un arrêt possible à tout moment sans rien perdre de ce qui est déjà coché, et les conversions de tables calculées retentées au passage.
Une conversion de table calculée refusée parce qu’une colonne n’était pas disponible en Power Query le dit maintenant dès que cette colonne est déportée : le blocage est nommé, les colonnes concernées listées, et un bouton propose de retenter.
Les conversions refusées AVANT cette nouveauté sont proposées elles aussi à une nouvelle tentative dès que des colonnes ont été déportées, avec un libellé qui dit franchement qu’on ne connaît pas le motif d’origine - sans quoi les campagnes déjà commencées auraient gardé des refus dépassés sans le savoir.
Modifié
Les deux actions groupées de déport sont numérotées et remises dans l’ordre utile : les fusions (1) avant le déport Power Query (2). Elles étaient affichées à l’envers, ce qui invitait à travailler à contresens.
Après chaque déport, l’aperçu est recalculé immédiatement (gratuit) et le récapitulatif annonce combien de colonnes cette vague vient de débloquer, avec un bouton pour enchaîner - ou dit explicitement que la chaîne est allée au bout.
Le récapitulatif des fusions propose d’enchaîner directement sur le déport Power Query, au lieu de laisser deviner que c’est l’étape suivante.
Version 1.114.0
26 juillet 2026
Le déport en masse des fusions venait de refuser 13 colonnes sur 13 : « reste de calcul non traduisible ». En creusant, 11 de ces colonnes lisent PLUSIEURS colonnes de la même table (jusqu’à 4 lectures RELATED vers la même dimension) - et la fusion ne remplaçait que la première lecture, laissant les autres dans le calcul restant, que l’IA refusait à juste titre. Désormais chaque lecture reçoit son propre champ de travail sur une seule et même jointure : le calcul restant devient local à la ligne et se traduit. Vérification sur le lot réel : 11 des 13 refus d’aujourd’hui deviennent traduisibles. En prime, les deux flux (bouton individuel et déport en masse) partagent maintenant le même constructeur de champs - le flux en masse annonçait des types faux à l’IA - et chaque refus affiche son motif.
Corrigé
Une fusion substitue désormais TOUTES les lectures RELATED / LOOKUPVALUE vers la même table (un champ d’appoint par colonne lue, une seule jointure) : le reste du calcul devient local à la ligne et la traduction aboutit.
Le déport en masse annonce à l’IA les mêmes champs d’appoint, avec les mêmes types, que le flux individuel (constructeur partagé) - il annonçait un seul champ typé « texte » par défaut, d’où les refus en série.
Chaque refus de traduction affiche maintenant son motif dans le récapitulatif, au lieu d’un libellé générique.
Version 1.113.0
26 juillet 2026
Débouchage des chaînes de dépendances entre optimisations. Beaucoup de colonnes « facilement déportables » restaient bloquées parce que leur calcul lit une colonne… déjà déportée par fusion : le filtre de sûreté ne le savait pas et les écartait. Sur le rapport réel, deux fusions non cochées bloquaient à elles seules 19 colonnes. Le filtre en tient compte, l’ordre d’écriture des transformations a été inversé pour le permettre (les fusions d’abord, les déports ensuite - ce qui répare au passage des fusions qui rataient silencieusement leur chemin SQL), et un garde-fou vérifie au moment d’écrire le fichier que chaque référence existe réellement - une colonne douteuse est écartée seule, avec son motif, jamais tout le lot.
Corrigé
Les colonnes déportées par fusion ou en SQL comptent comme disponibles pour les déports Power Query qui les lisent : les chaînes « colonne facile → colonne fusionnée » se débloquent, à la génération comme dans la carte « Déporter en masse ».
Les fusions s’écrivent désormais avant les déports Power Query - condition du déblocage ci-dessus, et correction d’un défaut discret : sur une table ayant les deux, la fusion retombait silencieusement en jointure Power Query au lieu du chemin SQL.
Nouveau garde-fou à l’écriture du fichier : toute référence vers une colonne absente de la requête écarte cette seule colonne avec un motif visible dans le récapitulatif - plus aucun scénario où un fournisseur qui échoue casse l’actualisation en cascade.
Libellé corrigé sur la carte « Déporter en masse » : « déjà cochées pour le déport (rien à refaire) » au lieu de « déjà marquées (ignorées) ».
Version 1.112.0
26 juillet 2026
Deux nouveautés nées d’une enquête de terrain. Une colonne montrait un écart de 4 331 lignes entre le rapport d’origine et sa version optimisée, à l’identique sur deux actualisations. La cause n’était ni l’un ni l’autre : la requête de la table consultée supprime les doublons en gardant une ligne AU HASARD par clé, et la source contenait pour ces articles deux lignes contradictoires. Autrement dit, la colonne n’avait jamais eu de valeur définie - elle pouvait changer à chaque actualisation sans que personne ne le voie. pbi-optimizer détecte désormais ce piège tout seul, fournit la requête qui le confirme sur ta base, et le signale dans le contrôle de fidélité pour ne plus accuser une optimisation innocente.
Ajouté
Nouvelle alerte « Valeurs lues dans une table dédoublonnée arbitrairement » : quand une requête supprime les doublons sur une clé, toutes les colonnes calculées qui y lisent une autre valeur ont un résultat potentiellement instable. L’alerte est groupée par table consultée (une vérification par table, pas une par colonne) et liste les colonnes concernées.
Requête de vérification fournie et copiable : elle interroge la base, seul endroit où l’ambiguïté est encore visible - dans le modèle chargé, le dédoublonnage a déjà eu lieu, une requête DAX répondrait toujours « rien à signaler ». Quand la requête source ne s’y prête pas, la marche à suivre dans Power Query est expliquée.
Guide d’application : vérifier d’abord, puis remplacer la lecture par une règle explicite (« existe-t-il au moins une ligne avec la valeur attendue ? », ou un maximum assumé). Ces deux formes redeviennent reproductibles - et pbi-optimizer sait les déporter en SQL.
Contrôle de fidélité : un écart sur une de ces colonnes est désormais étiqueté « compatible avec un dédoublonnage arbitraire » et affiché avant la liste des optimisations suspectes, pour ne plus perdre de temps à en désactiver une qui n’y est pour rien.
Version 1.111.0
26 juillet 2026
Étape 3 du chantier « colonnes qui agrègent » : plusieurs agrégats dans une même colonne. Certaines colonnes consultent plusieurs agrégats à la fois (le maximum de deux colonnes différentes de la même table, par la même clé) avant de rendre leur verdict. Quand tous les agrégats partagent la même table, les mêmes clés et les mêmes filtres, ils partent ensemble sur le serveur SQL en une seule jointure, chacun avec son champ de travail, et le calcul autour reste en Power Query ligne à ligne. Des agrégats sur des tables ou clés différentes restent refusés avec un motif clair - une seule jointure par colonne, c’est la garantie de fidélité.
Ajouté
Une colonne peut désormais déporter PLUSIEURS agrégats différents (MAX de deux colonnes distinctes, MIN et MAX de la même colonne…) en une seule jointure GROUP BY, à condition qu’ils partagent table, clés et filtres.
Chaque agrégat reçoit son propre champ d’appoint, nettoyé en fin de requête ; le reste du calcul les référence individuellement, avec le type produit par chaque agrégat.
Toutes les preuves sont étendues : chaque colonne agrégée supplémentaire est vérifiée en sortie de requête à la planification ET à l’application du fichier.
Version 1.110.0
26 juillet 2026
Étape 2 du chantier « colonnes qui agrègent » : les cas mixtes. Beaucoup de colonnes n’agrègent pas directement - elles enrobent l’agrégat dans un petit calcul (« si le nombre de lignes trouvées dépasse zéro, alors 1, sinon 0 »). Désormais, l’agrégat part sur le serveur SQL (une seule passe, GROUP BY) et le petit calcul autour reste en Power Query, ligne à ligne. Le reconnaisseur gère aussi les filtres constants (« site = S099 »), l’argument RELATEDTABLE quand la relation du modèle prouve qu’il est redondant, et les variables DAX qui portent l’agrégat. Toujours la même règle : un doute = refus motivé, la colonne reste en DAX à l’identique.
Ajouté
Fusion-agrégat mixte : une colonne « SI compte > 0 ALORS 1 SINON 0 » est déportée en deux morceaux - l’agrégat en SQL (GROUP BY côté serveur), le reste traduit en Power Query ligne à ligne, comme les fusions mixtes classiques.
Filtres constants reconnus et poussés en SQL (WHERE avant l’agrégat), RELATEDTABLE accepté seulement si la relation du modèle le prouve redondant, agrégat répété remplacé partout par un seul champ d’appoint.
Cas limite verrouillé : un compte sans correspondance est livré 0 (pas vide) quand un calcul le compare ensuite - un vide ferait échouer l’actualisation ; le compte « pur » garde le vide, fidèle au DAX.
Version 1.109.0
26 juillet 2026
Première étape du grand chantier « colonnes qui agrègent ». Certaines colonnes calculées re-balayent une autre table entière pour CHAQUE ligne à la fin de l’actualisation (chercher le maximum, compter, sommer par clé) : c’est le principal gouffre mémoire mesuré sur les gros modèles. Quand les deux tables viennent du même serveur SQL, ces colonnes deviennent déportables : le serveur calcule l’agrégat en une seule passe (GROUP BY), dans la même requête, et la colonne arrive toute prête. La reconnaissance est déterministe (sans IA) et n’accepte que les formes prouvables ; les cas ambigus restent en DAX avec un motif clair. Les particularités sont respectées à la lettre : moyennes non tronquées, « valeur unique sinon vide » (SELECTEDVALUE) avec ses cas limites, et déduplication amont reproduite pour agréger exactement les mêmes lignes que la table chargée.
Ajouté
Fusion-agrégat : les colonnes qui agrègent une autre table par clé (MAX, MIN, SOMME, MOYENNE, COMPTE, valeur unique) sont proposées comme fusions et déportées en SQL (GROUP BY côté serveur, une seule lecture de la source). Reconnaissance déterministe des formes DAX du terrain, y compris les VAR et les commentaires.
Prudence sur preuve : tout ce qui n’est pas une conjonction d’égalités simples (OU logique, comparaisons, formes mixtes IF/SWITCH, agrégat sur la table elle-même) est refusé avec son motif - la colonne reste en DAX, résultat inchangé. Pas de repli Power Query pour les agrégats : SQL ou rien.
Le panneau d’assistance affiche la recette d’agrégat (fonction, clés, table) avant l’opt-in, comme pour les fusions classiques.
Version 1.108.0
26 juillet 2026
Les fusions passent en SQL quand c’est possible. Diagnostic du jour sur un rapport réel : une colonne fusionnée (« Article centralisé ? ») différait de 4 331 lignes entre l’ancien calcul et le nouveau, sans qu’aucune logique soit fausse. La cause : une fusion Power Query relit la source une seconde fois pendant l’actualisation, et si la base bouge entre les deux lectures (réplique resynchronisée, chargement en cours), les deux photos divergent. Désormais, quand la table de départ et la table jointe sont des requêtes SQL du même serveur et de la même base, la jointure est écrite directement dans la requête SQL : une seule lecture de la source, le travail fait par le serveur (moins de mémoire au refresh), et un appariement insensible à la casse comme l’était le calcul DAX d’origine. Chaque condition est vérifiée sur preuve ; au moindre doute, la fusion Power Query actuelle s’applique comme avant.
Ajouté
Fusion déportée en SQL : la jointure (LEFT JOIN dédupliqué sur la clé, comparaison tolérante aux vides) est injectée dans la requête SQL native de la table de départ quand les deux tables viennent du même serveur et de la même base. La ligne de génération l’indique : « (jointure déportée en SQL) ».
Éligibilité prouvée, jamais devinée : requête SQL native unique de chaque côté, clés et colonne rapatriée démontrées présentes dans les sorties des requêtes (alias AS sous toutes leurs formes, étoiles sur nos propres enveloppes suivies récursivement), étapes Power Query limitées à la déduplication et au retypage inoffensif. Quatorze scénarios à risque identifiés et testés (CTE, ORDER BY final, doublons de noms, re-téléversement…).
Cas mixte : seul le reste du calcul (déjà row-local) demeure en Power Query ; la lecture de l’autre table, elle, ne se fait plus qu’une fois.
Version 1.107.1
26 juillet 2026
Le correctif du matin (v1.106.0) ne suffisait pas : un fichier généré avec lui a encore bloqué 32 requêtes sur une colonne introuvable. La cause profonde est désormais fermée. Le contrôle qui autorise une fusion faisait confiance à des opérations « prévues » (un déport, une conversion) qui peuvent encore échouer au moment précis où le fichier s’écrit ; le fournisseur échouait, la jointure s’écrivait quand même. Une vérification a maintenant lieu au dernier moment, contre l’état réel du fichier : si la colonne n’y est pas, la fusion est refusée avec un motif précis et la colonne reste en DAX. Quoi qu’il arrive en amont, une jointure vers une colonne absente ne peut plus être écrite.
Corrigé
Une fusion vérifie désormais, au moment exact où sa jointure s’écrit dans le fichier, que chaque colonne qu’elle référence existe réellement dans la requête de l’autre table - y compris quand un déport prévu en amont a échoué entre-temps. À défaut : refus motivé, colonne conservée en DAX, actualisation préservée.
Les fusions qui dépendent l’une de l’autre s’appliquent dans le bon ordre (celle qui fournit une colonne avant celle qui la consomme), pour ne pas refuser à tort un enchaînement légitime.
Version 1.107.0
26 juillet 2026
Jusqu’ici, quand une colonne importée était supprimée du modèle, la requête SQL continuait de l’extraire de ta base : la mémoire était gagnée, mais l’extraction transportait pour rien, et c’était à toi de nettoyer les requêtes à la main. Une option (décochée par défaut) le fait maintenant automatiquement - mais seulement quand c’est prouvable sans risque. Une colonne citée deux fois, utilisée par une autre requête, ou cachée derrière un SELECT * n’est jamais touchée : elle reste listée « à retirer à la main », avec la raison. Chaque retrait laisse un commentaire daté dans la requête.
Ajouté
Option « Retirer aussi ces colonnes des requêtes SQL » à la génération : la ligne de chaque colonne supprimée est retirée du SELECT de sa requête source, uniquement sur preuve (colonne citée une seule fois, dans la liste du SELECT, aucune autre requête ne la consomme, aucune autre colonne du modèle ne lit la même colonne source). Seize scénarios à risque identifiés et testés, du style de virgule aux identifiants à crochets contenant une apostrophe.
Traçabilité : un commentaire en tête de requête indique la date, le compte et les colonnes retirées.
Le rappel « à retirer de tes requêtes » se synchronise : une colonne retirée automatiquement n’y figure plus, les refus y restent avec leur motif.
Version 1.106.0
26 juillet 2026
Correction d’un défaut sérieux du fichier généré. Un « déport par fusion » pouvait écrire une jointure qui va chercher une colonne dans la requête d’une autre table, alors que cette colonne n’y existe pas. Résultat à l’actualisation : « Nous n’avons pas trouvé la colonne … de la table », et toutes les requêtes qui en dépendent bloquées avec elle (32 sur un rapport réel). Le contrôle qui devait l’empêcher existait, mais il raisonnait à l’envers : il gardait la fusion tant que rien ne prouvait le problème. Il exige maintenant la preuve que la colonne sera bien là.
Corrigé
Une fusion n’est plus appliquée que si l’outil peut PROUVER que la colonne cherchée et les clés de jointure existeront dans la requête de l’autre table. Dans le doute, la colonne reste en DAX et la raison est affichée : on renonce à une optimisation plutôt que de casser l’actualisation.
Les noms de colonnes et de tables sont désormais comparés en ignorant les espaces en trop, la casse et la façon dont les accents sont encodés. Un nom irrégulier faisait échouer la recherche dans le modèle, et une colonne introuvable était prise pour une colonne source, donc supposée disponible.
Une colonne que la requête expose sous un autre nom que celui du modèle fait aussi renoncer à la fusion : la jointure écrirait un nom que la requête ne connaît pas.
Version 1.105.1
26 juillet 2026
Ménage interne : le « combo table lourde » n’était plus relié à aucune page depuis la réorganisation du parcours. Il est retiré plutôt que laissé à traîner - du code injoignable finit toujours par faire croire qu’une fonctionnalité existe.
Modifié
Retrait du « combo table lourde » (optimiser la source puis déporter), devenu injoignable : ni page ni bouton n’y menait plus.
Version 1.105.0
26 juillet 2026
Relecture complète de ce que l’application te raconte, page d’accueil comprise. La réorganisation du parcours en huit étapes avait laissé derrière elle des indications devenues fausses : des « ci-dessus » qui désignaient des cartes désormais en dessous, ou sur une autre page. Cinq de ces renvois sont corrigés, et la page d’accueil ne promet plus un réglage qui n’existe plus.
Corrigé
« Génère le .pbip depuis la barre en bas d’écran » : cette barre n’existe plus, la génération se fait à la dernière étape du parcours.
Les avertissements sur les colonnes supprimables renvoyaient « ci-dessus » vers les rapports connectés, qui vivent maintenant à l’étape Mesurer.
Sur l’étape Mesurer, trois renvois désignaient « plus haut » ou « plus bas » des cartes situées à l’inverse (le simulateur d’actualisation, les cartes Tables et Colonnes, l’import des mesures).
Page d’accueil : « un réglage table par table pour les grosses tables » décrivait le seuil de déport, supprimé à la version précédente.
Modifié
Page d’accueil : le parcours décrit correspond de nouveau à l’application (mesure d’abord, puis objectif, puis cinq étapes ordonnées avec l’impact sur quatre axes). La liste de ce que contient le fichier généré était incomplète : les tables calculées, les changements de type et les clés de substitution y figurent désormais.
Page d’accueil : le contrôle des réécritures de requêtes ne se contente plus d’un verdict « identique », il mesure le gain réel - c’est dit.
Page d’accueil : l’invitation finale annonce que chaque inscription est validée manuellement, au lieu de promettre une analyse « en quelques minutes ».
Version 1.104.0
25 juillet 2026
Le seuil qui bloquait le déport des grosses tables disparaît. Il partait d’une bonne intention mais s’y prenait mal : une colonne que tu avais cochée pouvait ne pas être déportée dans le fichier généré, sans que tu l’aies décidé, et il a fallu ajouter un compteur de « reportées » et un réglage de dérogation juste pour rattraper l’opacité. Le vrai danger - un calcul Power Query ligne à ligne sur une grosse table - est maintenant affiché sur chaque colonne : le coût sur l’extraction grandit avec la taille de la table, et devient rouge vif exactement au volume où l’ancien seuil coupait. L’outil informe, tu décides. Au passage, l’étiquette « Expérimental » cède la place à ce qu’elle voulait vraiment dire.
Modifié
Le seuil de déport (« ne pas déporter au-delà de N lignes ») est retiré, avec son réglage et ses tables « forcées ». Ce que tu coches est appliqué, sans exception.
Le coût d’un déport sur l’extraction suit désormais la taille de la table : « nettement plus longue » sur une grosse table, là où toutes s’affichaient pareil. Le déport « à la source (SQL) » reste au coût le plus faible, car c’est le serveur qui calcule.
Une colonne traduisible « à la source (SQL) » annonce son coût réel dès avant d’être cochée, au lieu du coût d’un calcul Power Query.
L’étiquette « Expérimental » est remplacée par « Hors fidélité garantie » là où elle manquait, et retirée là où le texte le disait déjà. Elle faisait douter d’une fonction qui marche sans dire quoi faire ; la nouvelle formulation nomme le seul risque qui subsiste (DAX et Power Query peuvent différer) et l’action qui le lève (actualiser, puis lancer le contrôle de fidélité).
Version 1.103.0
25 juillet 2026
Les cinq blocs qui agissent sur un LOT (colonnes supprimables, déport en masse, changements de type, clés de relation, requêtes SQL) se distinguent enfin des optimisations à l’unité : même cadre, même fanion « Action groupée », même bandeau de résumé, et tous repliables. Surtout, ils répondent maintenant au filtre d’impact - trois d’entre eux l’ignoraient et restaient affichés même quand plus aucun de leurs éléments ne correspondait à ce que tu cherchais. Quand un filtre en écarte un, une ligne te le dit et te permet de l’afficher quand même : rien ne disparaît en silence.
Corrigé
Le déport en masse, les changements de type et les clés de relation ignoraient le filtre d’impact : ils restaient à l’écran alors qu’aucune de leurs colonnes ne passait le filtre. Les cinq blocs suivent désormais la même règle.
Un bloc qui commande des cartes déjà listées (le déport, par exemple) ne s’ajoute plus au décompte de l’étape : ses colonnes y étaient comptées deux fois.
Ajouté
Un cadre commun « Action groupée » pour les cinq blocs de traitement en masse : on voit d’un coup d’œil ce qui agit sur un lot et ce qui agit à l’unité.
Chaque bloc est repliable et se souvient de son état, avec un bandeau de résumé qui reste lisible replié (« 89 cochées pour le déport, dont 55 à la source SQL ») et son impact estimé sur les 4 axes.
Ligne « N actions groupées masquées par ton filtre - afficher quand même » : une action écartée par un filtre est annoncée, jamais escamotée.
Version 1.102.0
25 juillet 2026
Deux corrections liées. D’abord, les encadrés d’avertissement (« À vérifier : DAX et Power Query peuvent différer… ») étaient tout simplement illisibles en thème sombre - du texte presque noir sur un fond presque noir. C’est réparé partout dans l’application, et ce sont justement les messages qu’il ne faut pas rater. Ensuite, l’application distingue enfin « pas encore essayé » de « refusé » : c’est ce qui faisait afficher « Déport non recommandé » sur des colonnes pourtant déportées. Sur un rapport réel, il ne reste plus qu’un seul message de ce type, et il est justifié.
Corrigé
Lisibilité des encadrés d’avertissement en thème sombre : ils étaient à la limite de l’invisible (contraste mesuré à 1,1 pour 1, désormais 8,6 à 9,4). Corrigé dans les 20 fichiers concernés.
« Déport non recommandé » ne s’affiche plus que sur les colonnes réellement refusées, avec la raison du refus.
Ajouté
Un verdict de déport unique, partagé par l’affichage et par la génération : les deux ne peuvent plus se contredire sur ce qu’une colonne sait faire.
Version 1.101.2
25 juillet 2026
Des colonnes bel et bien déportées affichaient « Déport non recommandé ». Le message ne regardait que la voie Power Query, alors que le déport peut aussi passer — et c’est même préférable — par la requête SQL source. Quand la voie SQL aboutissait en premier, la voie Power Query n’était jamais tentée, et son état initial « non traduisible » était affiché comme un refus. Sur un rapport réel, 55 colonnes étaient concernées : elles montraient l’inverse de la vérité.
Corrigé
« Déport non recommandé » ne s’affiche plus que si aucune voie n’aboutit, ni Power Query ni SQL.
La carte montre désormais la voie réellement retenue (souvent le SQL, calculé par le serveur) avec son expression et son explication, ainsi que la case à cocher du déport — tout cela était masqué.
Quand un refus n’a aucune raison enregistrée, la carte le dit au lieu d’afficher une alerte vide.
Version 1.101.1
25 juillet 2026
Les étiquettes « Impact réel élevé » deviennent « Enjeu élevé ». Depuis l’arrivée de l’impact sur 4 axes, deux choses différentes portaient le même mot : l’enjeu, qui dit la taille de ce qui est en jeu (« cette colonne pèse 320 Mo ») et sert à classer, et l’impact, qui dit ce que le remède va changer et sert à décider. Le mot « enjeu » est celui déjà utilisé pour les requêtes SQL : on s’aligne dessus plutôt que d’en inventer un.
Modifié
« Impact réel critique / élevé / moyen / faible » devient « Enjeu critique / élevé / moyen / faible », y compris sur les rapports sans mesures importées.
Le chiffre qui accompagne l’étiquette (poids en mémoire, valeurs distinctes) et le classement des optimisations sont inchangés.
Corrigé
Lisibilité des étiquettes rouges en thème clair : elles étaient sous le seuil de contraste recommandé (mesuré à 3,6:1, désormais 4,9:1). Le correctif profite aussi aux autres étiquettes rouges de l’app (« Calculée morte », « Erreur », enjeu des requêtes SQL, alertes mémoire).
Version 1.101.0
25 juillet 2026
Le filtre par impact laissait de côté les blocs groupés - les colonnes supprimables et les requêtes SQL - alors que ce sont souvent les plus gros gains. Résultat : l’étape Nettoyer annonçait « 0 optimisation » avec 174 colonnes à supprimer affichées juste en dessous, et le compteur du fil, censé indiquer où se trouve le travail, faisait exactement l’inverse. Ces blocs sont désormais filtrés, comptés pour tous leurs éléments, et annoncent leur impact sur les 4 axes comme les autres optimisations.
Corrigé
Le compteur d’étape ignorait les colonnes supprimables et les requêtes SQL : il pouvait afficher 0 alors que 174 optimisations et 49 Mo de gain étaient sur la page.
Une liste vidée par le filtre ne contredit plus le bloc affiché au-dessus : le message distingue « rien à traiter ici », « ton filtre ne laisse rien passer » et « seules les cartes sont écartées ».
Ajouté
Les blocs groupés affichent leur impact estimé sur les 4 axes, calculé à partir de leurs propres éléments (donc toujours cohérent avec ce qu’ils contiennent).
Ils sont pris en compte par le filtre et par le compteur de chaque étape.
Version 1.100.0
25 juillet 2026
Il n’y a plus qu’un seul bouton pour optimiser une requête SQL. Il y en avait deux : un rapide mais fragile (tout en un seul appel, perdu s’il dépassait la durée maximale) et un sûr mais lent. Choisir entre les deux demandait de comprendre le fonctionnement interne, ce qui n’est pas ton travail. Le bouton restant traite maintenant 4 sous-requêtes en même temps : il est aussi rapide que l’ancien tout en gardant ce qui fait sa valeur - la reprise après interruption, l’avancement visible, et le contrôle de ton budget avant chaque sous-requête.
Modifié
Un seul bouton « Optimiser avec l’IA », qui traite 4 sous-requêtes à la fois.
L’ancien mode « tout en un appel » est retiré : au-delà de la durée maximale il perdait la totalité du travail, et il ne vérifiait ton plafond de dépense qu’une seule fois avant de lancer jusqu’à une centaine d’appels.
Le bandeau d’avancement indique le nombre de sous-requêtes en cours de traitement.
Version 1.99.2
25 juillet 2026
Les trois alertes de sécurité les plus graves, qui concernaient la brique de connexion, sont fermées. Elles annonçaient un correctif dans une version « stable » qui n’existe pas encore : en réalité deux montées de version suffisaient, publiées il y a quelques jours. Le parcours de connexion a été testé de bout en bout avant mise en ligne (mauvais mot de passe, bon mot de passe, accès à l’espace admin, déconnexion). Il ne reste que deux alertes techniques sans effet sur ton usage : un outil de traitement d’images qui ne voit jamais d’image envoyée par un utilisateur, et un outil qui ne tourne qu’au moment de la construction du site.
Corrigé
Brique de connexion mise à jour : les 3 alertes critiques et 1 alerte importante sont fermées. L’audit passe de 11 à 4 alertes, sans plus aucune critique.
Les correctifs portent sur la validation des adresses email, la gestion d’un jeton d’authentification mal formé, et le fait qu’une session en erreur ne doit jamais compter comme une session valide.
Vérification faite : ton application n’était pas exposée à la faille la plus grave, car tous ses verrous exigent un utilisateur identifié et pas seulement la présence d’une session.
Version 1.99.1
25 juillet 2026
Mise à jour de sécurité des briques logicielles utilisées par l’application. L’audit remontait 30 alertes, il en reste 11. La plus grosse part venait d’un outil de développement (celui qui sert à ajouter des composants d’interface) classé par erreur parmi les briques livrées en ligne : il embarquait tout un arbre de dépendances que le site n’exécute jamais. Le framework du site (Next.js) est par ailleurs passé à sa version corrigée, ce qui ferme trois failles importantes. Les alertes restantes concernent la brique d’authentification, dont la correction demande une migration à part entière, planifiée.
Corrigé
Un outil de développement était livré avec l’application alors qu’il n’y sert pas : retiré du paquet déployé (17 alertes de sécurité en moins, et un déploiement plus léger).
Framework du site mis à jour vers sa version corrigée : fermeture de trois failles importantes (dont une permettant de faire émettre des requêtes non prévues par le serveur) et de cinq alertes moyennes.
Outil de mise en forme des styles mis à jour.
Version 1.99.0
25 juillet 2026
La taille de tes requêtes n’est plus une limite pour l’optimiseur intégré. Jusqu’ici, tout se jouait en un seul appel, et un appel a une durée maximale : au-delà, il était coupé et ne rendait rien du tout - le travail et la dépense étaient perdus. Désormais chaque sous-requête est traitée dans son propre appel, l’une après l’autre, et chaque résultat est acquis dès qu’il arrive. Un bandeau en haut de page montre l’avancement (« 12 sur 37 ») et tu peux continuer à travailler dans les autres étapes pendant que ça tourne. Si tu arrêtes, si tu fermes l’onglet, ou si ton budget quotidien est atteint, rien n’est perdu : la reprise repart exactement là où ça s’est arrêté, sans repayer ce qui est déjà fait.
Ajouté
Traitement sous-requête par sous-requête des grosses requêtes SQL : la durée d’un appel ne limite plus la taille de ce qui est traitable.
Bandeau de progression visible depuis toutes les étapes du parcours, avec arrêt et reprise. Le traitement continue pendant que tu navigues.
Reprise exacte après une interruption : seule la sous-requête interrompue est refaite, jamais celles déjà traitées.
Les propositions déjà trouvées sont consultables même si le traitement n’est pas terminé.
Un traitement retrouvé après un rechargement de page ne redémarre jamais tout seul : il attend ton clic, car chaque sous-requête a un coût.
Version 1.98.0
25 juillet 2026
L’optimiseur SQL intégré se relit désormais lui-même. Ce qui lui manquait face à un agent sans limite, ce n’était pas la connaissance mais les allers-retours : il proposait une seule fois, sans jamais vérifier son propre travail. Chaque proposition passe maintenant une série de contrôles (les colonnes de sortie sont-elles les mêmes, dans le même ordre ? le SQL est-il complet ? la réécriture introduit-elle un défaut qui n’existait pas ?), et tout échec repart en correction. Après deux tentatives infructueuses, la proposition est abandonnée plutôt que de t’être soumise : mieux vaut rien qu’une réécriture dont on sait déjà qu’elle change le résultat. Les contrôles passés sont affichés sous chaque proposition, avec leur limite dite franchement - ils éliminent les fautes grossières, seule l’exécution du script de validation sur ta base prouve l’équivalence.
Ajouté
Vérification automatique de chaque réécriture proposée par l’IA : colonnes de sortie identiques (nombre, noms et ordre), texte SQL complet, aucun défaut introduit.
En cas d’échec, la critique est renvoyée à l’IA pour correction (jusqu’à 2 fois). Rien ne quitte la confidentialité : la critique parle en noms masqués, aucun nom réel de ta base ne repart.
Une proposition qui échoue encore après correction est abandonnée, et l’explication te le dit.
L’IA est autorisée à être plus ambitieuse là où l’équivalence est vérifiable (fusionner des sous-requêtes réévaluées, factoriser des branches identiques), et reste prudente là où elle ne l’est pas.
Les contrôles passés sont affichés sous chaque proposition.
Version 1.97.0
25 juillet 2026
Jusqu’ici, le gain d’une réécriture SQL était la seule chose que l’app ne pouvait pas chiffrer : elle ne voit pas ta base, elle annonçait donc une direction (« extraction plus courte ») calée sur le volume de la table. Le script de validation, lui, exécute déjà tes deux requêtes côte à côte sur la vraie base : il les chronomètre désormais et compte les données réellement lues. Tu recolles son code dans l’app, et l’estimation est remplacée par ton chiffre réel, par exemple « -64 % de données lues, 2 Go → 734 Mo ». La nouvelle requête est mesurée en premier, cache froid : le gain affiché est donc un plancher, jamais une vitrine.
Ajouté
Le script de validation mesure les deux requêtes : durée, temps CPU et données réellement lues (la mesure la plus fiable, car elle ne dépend pas du cache du serveur).
Un code compact à recopier du script vers l’app (« Reporter ta mesure ») : il ne contient que des compteurs, aucune donnée métier. Un code abîmé ou incomplet est refusé plutôt que deviné.
La mesure remplace l’estimation partout : le tableau « Détail par optimisation » affiche alors le gain réel au lieu d’un ordre de grandeur.
Une réécriture dont le verdict n’est pas IDENTIQUE ne se voit créditer aucun gain, et l’écart est affiché en clair.
Corrigé
Le script échouait au lieu de répondre DIFFERENT quand la réécriture renvoyait un nombre de colonnes différent.
Dans le tableau de mesure, un écart de lignes ou de colonnes ne se lit plus comme un gain : c’est précisément ce qui rend une réécriture invalide.
Version 1.96.0
25 juillet 2026
Ton filtre par impact te suit désormais d’une étape à l’autre. Tu poses une fois la question (« qu’est-ce qui fait baisser mon pic mémoire ? ») et elle reste posée jusqu’à l’étape Générer, au lieu de repartir de zéro à chaque page. Le fil des étapes en haut affiche directement combien d’optimisations correspondent à ton filtre sur chacune d’elles : tu vois d’un coup d’œil où est le travail, sans ouvrir les pages une par une. Le filtre est aussi inscrit dans l’adresse de la page, donc il survit à un rechargement et le lien peut se partager tel quel.
Modifié
Le filtre par impact est maintenant unique pour tout le rapport : posé sur une étape, il vaut encore sur les suivantes et sur l’étape Générer. Le filtre par type, lui, reste propre à chaque page (ses catégories changent d’une page à l’autre).
Le fil des étapes indique le nombre d’optimisations correspondant au filtre sur chaque étape, pour aller droit là où il y a du travail.
Quand un filtre vient d’une autre page, le bandeau le dit (« hérité de l’étape Alléger ») : une page qui n’affiche plus que 2 cartes sur 12 ne peut plus passer pour vide ou cassée.
Une liste vidée par le filtre affiche un message explicite avec le nombre d’optimisations sans le filtre, au lieu du « rien à traiter » habituel.
Le filtre est inscrit dans l’adresse de la page : il survit au rechargement et le lien est partageable.
Corrigé
Lisibilité du compteur « 0 » dans le fil des étapes, trop pâle sur fond sombre.
Version 1.95.0
25 juillet 2026
Les filtres par impact arrivent sur les 5 pages d’optimisation (Nettoyer, Alléger, Restructurer, Affiner, Peaufiner). Comme à l’étape Générer, une puce par axe à trois états (peu importe / gains / coûts), et elles se cumulent : tu peux par exemple demander en deux clics « ce qui fait baisser mon pic mémoire » et traiter directement ces optimisations, sans parcourir toute la liste. Les filtres se combinent avec le filtre par type déjà présent, un compteur indique combien d’optimisations restent affichées, et tout se réinitialise en un clic.
Ajouté
Filtres par impact sur les 5 pages d’étape : une puce par axe (Taille, Pic refresh, Visuels, Extraction) à trois états, cumulables entre elles et avec le filtre par type existant. Un bandeau récapitule les filtres actifs et affiche « X sur Y optimisations ».
Le composant de filtrage est désormais partagé avec le tableau de l’étape Générer : le filtrage se comporte et se lit exactement pareil aux deux endroits.
Version 1.94.0
25 juillet 2026
Les cartes d’optimisation des étapes Nettoyer, Alléger, Restructurer, Affiner et Peaufiner affichent désormais leur impact estimé sur les 4 axes, avec exactement le même vocabulaire que l’étape Générer. Et la contradiction apparente que tu avais relevée est levée : une actualisation a DEUX phases (extraction, puis chargement et recalcul), et un déport ne rallonge pas l’actualisation « en bloc » - il déplace du calcul de la seconde phase vers la première. L’extraction s’allonge, le recalcul et son pic mémoire s’allègent. La carte globale explique ces deux phases et devient le strict miroir du tableau, alimentée par les mêmes chiffres.
Ajouté
Impact sur les 4 axes directement sur les cartes des 5 étapes d’optimisation : des pastilles au-dessus de chaque carte (taille, pic d’actualisation, visuels, extraction), avec les mêmes niveaux et les mêmes mots que le tableau de l’étape Générer.
Nouvelle catégorie « Mise en cache » : le retrait d’un Table.Buffer est chiffré comme le levier majeur qu’il est (forte baisse du pic mémoire ET extraction plus courte, puisque le repli vers la source revient).
Quand une optimisation est neutre sur les 4 axes (réglages de format, tri, résumé), c’est écrit : « aucun effet sur les 4 axes, donc sans risque ». Et quand le remède dépend de ton choix (par exemple une forte cardinalité, qui se traite au cas par cas), aucun impact n’est affiché plutôt qu’un chiffre inventé.
Corrigé
Carte « Vitesse & durée » de l’étape Générer : « Extraction plus rapide » et « Actualisation plus longue » se contredisaient visuellement, car « Actualisation » n’était pas un axe mais une notion introduite sans être définie. La carte affiche désormais les mêmes axes que le tableau (vitesse des visuels, durée de la phase d’extraction), avec le décompte des optimisations qui améliorent et qui dégradent chacun, et une explication des deux phases d’une actualisation.
Les déports sont présentés comme un transfert entre les deux phases, et non comme un pur coût : un coût sur l’extraction qui va de pair avec un gain sur le pic mémoire n’est pas une contradiction, et c’est maintenant expliqué.
Sur les pastilles, plus de flèches : « ↓ » signifiait « la quantité baisse » sur les axes mémoire mais « la durée baisse » sur les axes de vitesse. La couleur et les mots suffisent et ne peuvent pas se lire à l’envers. Un montant n’est affiché que lorsqu’il est non ambigu (le détail chiffré reste dans l’infobulle et dans le tableau).
Version 1.93.0
25 juillet 2026
Les réécritures de requêtes source rejoignent le tableau « Détail par optimisation » : il couvre désormais la TOTALITÉ de ce que la génération applique. Il manquait deux familles, toutes deux liées aux requêtes : les réécritures SQL embarquées (une ligne par table) et le réglage global « Optimisation des requêtes ». Leur impact est honnête : gain sur la durée d’extraction (d’autant plus net que la table est volumineuse), et aucun effet prétendu sur les trois autres axes - l’outil ne compare pas les deux versions du SQL, il ne peut donc pas affirmer un gain de taille. Décocher une réécriture depuis le tableau est réversible : le SQL est conservé, seule la génération l’ignore.
Ajouté
Famille « Requête source » dans le tableau des 4 axes : une ligne par réécriture SQL embarquée, plus une ligne pour le réglage global « Optimisation des requêtes ». Le tableau couvre maintenant les 10 familles appliquées à la génération (il en couvrait 8).
Décocher une réécriture SQL depuis le tableau l’exclut de la génération sans perdre le SQL : la ligne reste visible et re-cochable. Le récapitulatif « Requêtes embarquées » et la carte d’impact globale reflètent cette exclusion.
Version 1.92.0
25 juillet 2026
Correction de trois défauts de lisibilité dans le tableau « Détail par optimisation », signalés à partir d’un constat juste : le même message « plus longue » apparaissait tantôt noir, tantôt marron. Explication : la couleur des coûts était quasi noire en thème clair (indiscernable du texte normal), et sur une ligne décochée - affichée en transparence - ce noir prenait une teinte brune. Les coûts s’affichent désormais dans un ambre franc, lisible et reconnaissable dans les deux thèmes. Deux autres incohérences ont été corrigées au passage : un montant en « + » (donc un coût) pouvait s’afficher en vert, et un même libellé changeait de couleur selon qu’il accompagnait un chiffre ou non.
Corrigé
Couleur des coûts : en thème clair elle était quasi noire (impossible de distinguer un coût d’un texte ordinaire), et la transparence des lignes décochées la faisait paraître marron - d’où deux couleurs apparentes pour le même message. Les coûts utilisent désormais un ambre dédié, franc et lisible en clair comme en sombre.
Un montant précédé de « + » (un coût, par exemple les colonnes ajoutées par une clé de substitution) pouvait s’afficher en vert lorsque le bilan global de la cellule était favorable. Chaque montant est maintenant coloré selon son propre signe : « + » en ambre, « - » en vert.
Un même libellé (« forte baisse », « forte hausse »…) s’affichait en gris quand il accompagnait un chiffre, et en couleur quand il était seul. Il garde désormais toujours la couleur de son sens ; seule la taille du texte marque la hiérarchie.
Version 1.91.0
25 juillet 2026
Le tableau « Détail par optimisation » (étape Générer) se filtre désormais par axe, et ces filtres se CUMULENT. Chaque axe a sa puce à trois états : un clic pour ne garder que les optimisations qui l’améliorent, un second pour celles qui le dégradent, un troisième pour retirer le filtre. Exemple concret : « coûts sur le pic d’actualisation » + « gains sur les visuels » isole en un geste les clés de substitution - celles qui accélèrent l’affichage mais font monter la mémoire. Un compteur indique combien d’optimisations sont affichées sur le total, et si aucune ne satisfait tous les critères, le tableau le dit clairement au lieu d’afficher une liste vide.
Ajouté
Filtres par axe cumulables à l’étape Générer : une puce par axe (Taille, Pic refresh, Visuels, Extraction) à trois états (peu importe / gains / coûts). Plusieurs filtres actifs se combinent : seules les optimisations qui satisfont tous les critères en même temps restent affichées, avec une phrase qui l’explique.
Compteur « X sur Y optimisations (filtres actifs) », bouton « Tout réinitialiser », et message dédié quand aucune optimisation ne cumule les effets demandés (c’est une information, pas une erreur).
Corrigé
Lisibilité du tableau : les textes de coût (« plus longue », « forte hausse »…) étaient presque invisibles en thème sombre, et les noms d’optimisations étaient tronqués trop tôt (« Calc… », « M… »). Les couleurs de coût s’adaptent désormais au thème et la colonne des noms est nettement plus large.
Version 1.90.0
25 juillet 2026
Le tableau « Détail par optimisation » de l’étape Générer montre désormais l’impact de chaque optimisation sur les 4 axes du parcours, et non plus seulement sur deux : taille du modèle au repos, pic mémoire à l’actualisation, vitesse d’affichage des visuels, et durée d’extraction des données. Les 8 familles d’optimisations y sont maintenant cochables une par une (suppressions, clés de substitution, déports, réécritures DAX, tables calculées, relations, changements de type, réglages). Chaque colonne d’axe est triable : un clic classe les plus gros gains en tête, un second clic les plus gros coûts. Les axes de vitesse sont exprimés en mots gradués (« nettement plus rapide », « durée plus longue »…) calés sur tes mesures réelles - aucune milliseconde inventée.
Ajouté
Impact sur les 4 axes par optimisation : aux deux axes mémoire (taille au repos, pic d’actualisation) s’ajoutent la vitesse d’affichage des visuels et la durée d’extraction des données. Un tiret « – » signifie « aucun effet attendu », ce qui est aussi une information utile (l’optimisation est sans risque de ce côté).
Tri par axe : chaque en-tête de colonne est cliquable (1er clic = plus gros gains d’abord, 2e clic = plus gros coûts d’abord), pour repérer d’un coup d’œil les leviers d’un axe précis.
Les 8 familles d’optimisations sont désormais dans le tableau et cochables individuellement : suppressions, clés de substitution, déports, réécritures DAX, tables calculées converties, relations bidirectionnelles, changements de type et réglages déterministes. Une ligne décochée reste visible (et peut être recochée).
Clés de substitution : le coût certain (colonnes entières ajoutées) et le gain potentiel (suppression de la clé texte remplacée, non automatique) sont affichés séparément et clairement étiquetés - le bénéfice principal de la conversion n’est plus invisible.
Version 1.89.0
25 juillet 2026
Correction importante : relancer l’analyse d’un rapport effaçait tout le travail accumulé - les traductions de déport (Power Query et SQL) produites par l’IA, les déports cochés, les réécritures DAX payées à l’IA, et tous tes statuts (validé / ignoré). Le travail est désormais repris automatiquement après une ré-analyse. Seule exception, volontaire : un calcul dont la formule a changé depuis repart de zéro, car réutiliser une traduction périmée produirait des résultats faux sans le dire. Un message indique combien d’optimisations ont été reprises, et le bouton précise ce qui est conservé.
Corrigé
Relancer l’analyse ne détruit plus le travail accumulé : traductions de déport (Power Query / SQL), déports cochés, conversions de tables calculées, réécritures DAX de l’IA, cases « include » du crossfiltrage et statuts (validé / ignoré) sont repris sur les constats équivalents.
Garde-fou : si la formule d’origine d’un calcul a changé depuis la dernière analyse, sa traduction et sa réécriture ne sont PAS réutilisées (elles seraient périmées et donneraient de faux résultats) et son statut repart à « détecté » pour une re-validation consciente.
Le bouton « Relancer l’analyse » indique désormais que le travail est conservé, et le message de fin précise combien d’optimisations ont été reprises.
Version 1.88.0
25 juillet 2026
Les déports rejoignent le tableau « Détail par optimisation » de l’étape Générer. Tu peux désormais cocher ou décocher chaque déport directement depuis le tableau, aux côtés des suppressions et des clés de substitution, avec le chemin utilisé (à la source SQL, en Power Query, ou par fusion) et le sens de son effet sur le pic d’actualisation. Un nouveau filtre « Déports » permet de les isoler. Les déports encore reportés (grosse table sous le seuil) sont signalés comme tels.
Ajouté
Tableau « Détail par optimisation » : les déports sont désormais cochables directement dans le tableau (avec le chemin : à la source SQL, en Power Query, ou par fusion), avec filtre « Déports » dédié. La carte d’impact globale se recalcule en direct quand tu en coches ou décoches un.
Version 1.87.0
25 juillet 2026
Étape Générer : nouveau tableau « Détail par optimisation ». Chaque optimisation y est cochable une par une, avec son effet propre affiché - taille du modèle (chiffre exact) et sens de l’effet sur le pic d’actualisation (▲ hausse pour une clé de substitution, ▼ baisse pour une suppression). Décocher une ligne recalcule en direct la carte d’impact globale au-dessus. Tri par impact (les plus gros leviers en tête) et filtre par type. C’est l’outil pour ajuster consciemment ta sélection et faire baisser le pic.
Ajouté
Tableau « Détail par optimisation » à l’étape Générer : coche/décoche unitaire des suppressions et des clés de substitution, avec pour chaque ligne son effet propre sur la taille du modèle (exact) et le sens/magnitude de son effet sur le pic d’actualisation. La carte d’impact globale reste la référence du pic combiné exact (les recalculs se chevauchent, l’effet propre ne s’additionne pas au centime). Tri par impact et filtre par type.
Version 1.86.0
25 juillet 2026
Étape Générer : l’impact sur la vitesse est désormais explicite. Les flèches ambiguës (↑) sont remplacées par des mots clairs rattachés à une métrique nommée - « Affichage des visuels : plus rapide », « Actualisation : durée possiblement plus longue » - avec une légende qui précise que « plus rapide = durée plus courte ». Le compromis des déports (calcul déplacé vers la source, donc actualisation potentiellement plus longue mais pic mémoire plus bas) est expliqué noir sur blanc.
Modifié
Carte « Impact estimé de ta sélection » (étape Générer) : l’effet sur la vitesse n’utilise plus de flèches ambiguës mais des libellés explicites (« plus rapide » / « durée plus longue ») avec la métrique concernée (affichage des visuels, chargement des données, durée d’actualisation) et une légende « plus rapide = durée plus courte ».
Version 1.85.0
25 juillet 2026
Étape Mesurer réorganisée autour de l’action. En haut, un indicateur « Complétude des mesures » montre combien de mesures tu as fournies sur celles possibles (mémoire par colonne, lignes par table, cardinalité, pic réel d’actualisation), avec une barre de progression et un clic pour aller fournir chaque mesure manquante. Toutes les cartes qui demandent une saisie (pack de mesure, mesure d’actualisation, rapports connectés) sont regroupées en haut ; les résultats (contexte, poids, recommandations, simulateur) suivent en dessous. La mesure du vrai pic est simplifiée : seule la méthode PowerShell (la plus fiable) est conservée, la méthode Gestionnaire des tâches a été retirée.
Ajouté
Indicateur « Complétude des mesures » en tête de l’étape Mesurer : X/4 mesures fournies, barre de progression, et chaque ligne cliquable amène à la carte pour fournir la mesure manquante - pour t’inciter à fournir ce qui rend les estimations plus fidèles.
Modifié
Étape Mesurer : les cartes qui demandent une action (pack de mesure, mesure d’actualisation, rapports connectés) sont regroupées en haut ; les résultats (contexte, tables, colonnes, clés lourdes, simulateur) suivent.
Mesure du vrai pic mémoire : seule la méthode PowerShell est conservée (la plus fiable et sans surveillance) ; la méthode Gestionnaire des tâches, redondante, a été retirée.
Version 1.84.0
25 juillet 2026
Mise en page de l’étape Mesurer rééquilibrée. Auparavant tout l’analytique s’empilait dans une seule colonne et le pack de mesure occupait seul l’autre. Désormais : le pack de mesure (l’import) et le contexte du modèle se répartissent sur deux colonnes en haut ; les tableaux Tables et Colonnes sont côte à côte ; le Simulateur d’actualisation et la mesure réelle prennent toute la largeur pour respirer.
Modifié
Étape Mesurer : nouvelle mise en page équilibrée (pack de mesure + contexte sur 2 colonnes, Tables et Colonnes côte à côte, Simulateur et mesure réelle en pleine largeur) au lieu d’une colonne surchargée face à une carte isolée.
Version 1.83.0
25 juillet 2026
Nettoyage : la carte « Pic mémoire à l’actualisation (estimation) » de l’étape Mesurer a été retirée. Elle ne comptait que la copie du modèle et les caches, sans le recalcul VertiPaq qui est pourtant la vraie cause de saturation - elle affichait donc un pic très en-dessous de la réalité (par exemple 2 Go pour un pic réel de 40 Go) et contredisait le Simulateur d’actualisation juste au-dessus. Le Simulateur (qui, lui, chiffre toutes les phases dont le recalcul, avec le bon nombre de recalculs simultanés) et la carte « Impact estimé de ta sélection » de l’étape Générer la remplacent avantageusement.
Modifié
Étape Mesurer : suppression de la carte « Pic mémoire à l’actualisation (estimation) », trompeuse (elle ignorait le recalcul VertiPaq). L’estimation du pic est désormais portée uniquement par le Simulateur d’actualisation (toutes les phases) et par l’avant / après de l’étape Générer (recalé sur ta mesure réelle si tu l’as saisie).
Version 1.82.0
25 juillet 2026
L’estimation du pic mémoire d’actualisation devient nettement plus juste, suite au constat d’un écart (33,4 Go estimés vs 39,8 Go réellement mesurés). Deux améliorations : (1) le modèle est moins optimiste - il compte désormais le bon nombre de recalculs simultanés selon le réglage « évaluations simultanées » de Power BI, au lieu d’en supposer toujours 3 (sur un très gros modèle réglé à 8, l’estimation passe de 31 à 37 Go, tout près des 39,8 réels) ; (2) tu peux désormais SAISIR ton pic réellement mesuré (la valeur « PIC » du script PowerShell, étape Mesurer) : l’estimation de l’étape Générer est alors ancrée sur ta réalité et ton matériel, plus sur un modèle générique.
Ajouté
Recalage sur mesure réelle : à l’étape Mesurer (guide PowerShell), un champ permet d’enregistrer ton pic mémoire réellement mesuré. L’avant / après de l’étape Générer est alors recalé dessus, avec la mention « estimation recalée sur ton pic réel mesuré ».
Modifié
Estimation du pic d’actualisation moins optimiste : le nombre de recalculs lourds tenus en même temps suit le réglage « évaluations simultanées » de Power BI (moitié du réglage, entre 3 et 6) au lieu d’être fixé à 3. Sur les très gros modèles, l’estimation ne sous-évalue plus le pic d’un cran - le garde-fou alerte plus justement.
Version 1.81.0
25 juillet 2026
Le vecteur d’impact signé devient visible dans le parcours. À l’étape Objectif, l’outil recommande désormais les 1 ou 2 objectifs les plus payants d’après tes mesures réelles (et il ne recommande rien tant que rien n’est mesuré - pas de faux aplomb). À l’étape Générer, une nouvelle carte « Impact estimé de ta sélection » affiche l’avant / après chiffré de ce que tu as coché : taille du modèle, pic de mémoire d’actualisation (gains ET coûts, y compris celui des clés de substitution), et sens attendu sur la vitesse. Un garde-fou t’alerte AVANT de générer si ta sélection fait dépasser le budget mémoire du poste - l’alerte qui aurait évité le pic surprise de 39,8 Go.
Ajouté
Étape Objectif : bloc « Suggestion d’après tes mesures » - les axes les plus payants sont mis en avant avec leur justification chiffrée (Go récupérables, pic au-dessus du budget), avec un bouton « Suivre la suggestion ». Les arbitrages sont affichés honnêtement (alléger le modèle peut augmenter le pic d’actualisation).
Étape Générer : carte « Impact estimé de ta sélection » - delta de taille du modèle (suppressions moins colonnes ajoutées par les clés de substitution), pic d’actualisation avant → après avec verdict, part du pic due aux jointures des clés de substitution, et sens attendu sur la vitesse des visuels et de l’extraction.
Garde-fou budget mémoire : si la sélection augmente le pic estimé au-delà du budget du poste (~60 % de la RAM), une alerte s’affiche avant le bouton Générer, avec les leviers concrets (décocher des clés de substitution, réduire le parallélisme d’actualisation).
Version 1.80.0
25 juillet 2026
Nouveau moteur d’estimation d’impact signé (fondation technique, visible à la prochaine version) : l’outil sait désormais chiffrer, pour la sélection exacte d’optimisations cochées, le pic de mémoire d’actualisation avant / après et le delta de taille du modèle - en comptant aussi les COÛTS, pas seulement les gains. Une clé de substitution, par exemple, ajoute une jointure qui augmente le pic d’actualisation et des colonnes entières qui pèsent en mémoire : ces coûts sont maintenant chiffrés au lieu d’être ignorés. C’est la réponse de fond au pic de 39,8 Go constaté sur un fichier optimisé.
Ajouté
Moteur d’impact signé : chaque axe (taille au repos, pic d’actualisation) peut être positif OU négatif selon la sélection. Les suppressions retirent des octets mesurés ; les déports allègent le recalcul ; les clés de substitution ajoutent leur coût réel (jointure de la dimension pendant l’actualisation des faits + colonnes entières ajoutées).
Simulation avant / après sur la sélection exacte : le pic d’actualisation est recalculé avec précisément les optimisations cochées (et plus seulement des scénarios théoriques « tout ou rien »), avec verdict contre le budget mémoire du poste.
Version 1.79.0
25 juillet 2026
Le parcours commence désormais par la mesure : l’étape « Mesurer » passe avant l’étape « Objectif », car on ne peut pas choisir une cible pertinente sans connaître l’état de départ du modèle. La collecte des chiffres réels est réorganisée en un pack de 2 blocs : un bloc A « essentiel » ultra-léger (mémoire réelle par colonne + nombre de lignes par table, sans balayage des données - il suffit pour estimer le pic mémoire d’actualisation), et un bloc B « affinage » optionnel (valeurs distinctes par colonne, plus lourd, à lancer requête par requête sur les gros modèles). Tous les résultats se collent dans un champ unique, en une ou plusieurs fois : les imports successifs se cumulent, rien n’est écrasé.
Modifié
Parcours inversé : « Mesurer » devient l’étape 1 et « Objectif » l’étape 2. Un bandeau explique la logique (on mesure d’abord, on choisit sa cible ensuite) ; passer la mesure reste possible, l’outil fonctionne alors avec des estimations.
Pack de mesure en 2 blocs : bloc A « essentiel » (mémoire par colonne + lignes par table, requêtes légères sans balayage des données) et bloc B « affinage » optionnel (cardinalité, requêtes lourdes découpées). Fini les 3 zones d’import séparées : un seul champ de collage accepte tous les résultats, dans n’importe quel ordre.
Les imports de mesure se cumulent désormais : coller le bloc A après le bloc B (ou l’inverse, ou en plusieurs fois) ne perd plus jamais les valeurs déjà importées.
Version 1.78.0
25 juillet 2026
Les objectifs d’optimisation ont été resserrés autour de 4 axes clairs et mesurables : Alléger le modèle (RAM une fois chargé), Fiabiliser l’actualisation (pic de mémoire pendant le rafraîchissement - un axe nouveau, jusqu’ici aucun objectif ne le couvrait), Accélérer les visuels (rapidité des graphiques) et Accélérer l’extraction (chargement des données). La fiabilité des formules n’est plus un objectif à choisir : elle est surveillée en permanence, quel que soit ton choix. Le rechercher / remplacer de texte, qui est un outil et non un objectif, vit désormais uniquement dans l’annexe « Outils ».
Modifié
Étape Objectif : 4 objectifs clairs alignés sur des axes mesurables - Alléger le modèle, Fiabiliser l’actualisation (pic mémoire au refresh, nouvel axe), Accélérer les visuels, Accélérer l’extraction. Les optimisations qui pèsent sur le pic de mémoire à l’actualisation (tables mises en cache, repli de requête cassé, colonnes calculées recalculées au refresh) sont désormais rattachées à l’objectif « Fiabiliser l’actualisation ».
La cohérence des formules n’est plus un objectif à sélectionner : les alertes restent affichées en permanence (carte « Cohérence des formules »), quel que soit l’objectif choisi.
« Rechercher / remplacer du texte » quitte la liste des objectifs : l’outil reste accessible dans l’annexe « Outils ».
Version 1.77.0
25 juillet 2026
Correction : un rapprochement de tables (déport par fusion) pouvait échouer sur toutes les lignes (« Nous n’avons pas trouvé le champ … de l’enregistrement ») quand son calcul s’appuyait sur une colonne dont le nom contient des espaces ou des caractères spéciaux et qui était restée en calcul (DAX). Un défaut d’analyse rendait cette dépendance invisible, si bien que le rapprochement n’était pas écarté alors qu’il aurait dû l’être. C’est corrigé : ces rapprochements sont maintenant correctement détectés et écartés (la colonne reste inchangée). Regénère le fichier pour en profiter.
Corrigé
Rapprochement de tables (déport par fusion) : plus d’échec « Nous n’avons pas trouvé le champ … » quand le calcul dépend d’une colonne au nom contenant des espaces/caractères spéciaux restée en DAX. La dépendance est de nouveau détectée et le rapprochement correctement écarté.
Version 1.76.0
24 juillet 2026
Correction : une colonne déplacée vers la source ou rapprochée d’une autre table pouvait provoquer une erreur de type sur toutes les lignes (« Le type de la valeur ne correspond pas à celui de la colonne ») quand son calcul ne renvoyait aucune valeur (résultat vide). La colonne était déclarée comme n’acceptant pas les valeurs vides, alors qu’elle en produit. Les colonnes générées acceptent désormais les valeurs vides. Regénère le fichier pour en profiter.
Corrigé
Déplacement de calculs / rapprochement de tables : plus d’erreur « Le type de la valeur ne correspond pas à celui de la colonne » quand une colonne générée renvoie une valeur vide sur certaines (ou toutes) les lignes. Les colonnes générées acceptent désormais les valeurs vides.
Version 1.75.0
24 juillet 2026
Correction : la conversion d’une clé de relation en clé de substitution pouvait planter à l’actualisation (« Nous n’avons pas pu convertir la valeur 2 en type Text ») quand la clé, bien que déclarée comme du texte, contenait en réalité des nombres (par exemple un index de page). La conversion en texte est désormais faite en amont, ce qui évite le plantage. Regénère le fichier pour en profiter.
Corrigé
Conversion des clés de relation en texte : plus de plantage « impossible de convertir la valeur … en type Text » quand une clé déclarée comme du texte contient en réalité des nombres. La valeur est convertie en texte avant comparaison, des deux côtés de la relation.
Version 1.74.0
24 juillet 2026
Correction : quand une même table recevait à la fois une « clé de substitution » et un déplacement de calculs vers la source de données, le fichier généré pouvait bloquer à l’actualisation (« Nous n’avons pas trouvé la colonne … »). En cause : un rapprochement de tables (déport par fusion) qui s’appuyait sur une colonne censée être déplacée vers la source, mais qui ne l’était finalement pas à cause de la clé de substitution. pbi-optimizer détecte désormais ce cas et écarte automatiquement le rapprochement concerné (la colonne reste inchangée). Regénère le fichier pour en profiter.
Corrigé
Rapprochement de tables (déport par fusion) : plus de blocage « colonne introuvable » à l’actualisation lorsqu’une table combine une clé de substitution et des déplacements de calculs. Un rapprochement qui s’appuierait sur une colonne finalement non déplacée est automatiquement écarté ; les rapprochements sur les tables non concernées sont conservés.
Version 1.73.0
24 juillet 2026
Correction : le fichier généré pouvait bloquer à l’actualisation avec « Nous n’avons pas trouvé la colonne … de la table ». Quand une colonne calculée déplacée vers la source (SQL) s’appuyait sur une AUTRE colonne calculée, la requête envoyée à la base référençait une colonne qui n’existe pas côté source. Désormais, une telle colonne n’est plus déplacée vers la source : soit elle reste inchangée (clé de relation), soit elle est traitée par l’autre méthode (Power Query, qui range les étapes dans le bon ordre). Rien à voir avec les clés de substitution. Regénère le fichier pour en profiter.
Corrigé
Déplacement de calculs vers la source de données : plus de blocage « colonne introuvable » à l’actualisation. Une colonne calculée qui dépend d’une autre colonne calculée n’est plus envoyée à la base de données (où la colonne dont elle dépend n’existe pas) ; elle reste inchangée ou passe par Power Query.
Version 1.72.0
24 juillet 2026
Correction (suite) : le fichier généré avec des « clés de substitution » pouvait bloquer à l’actualisation avec l’erreur « une référence cyclique a été détectée ». Pour retrouver le bon numéro, une table doit aller lire sa table de référence : sur un modèle très interconnecté (ou une table reliée à elle-même, comme les nomenclatures), cela crée une boucle interdite. pbi-optimizer détecte maintenant ces boucles et écarte automatiquement les seules conversions qui en créeraient une (en l’indiquant, avec la raison). Le reste est converti normalement, et le fichier s’actualise toujours. Regénère le fichier pour en profiter.
Corrigé
Conversion des clés de relation en texte : plus de blocage « une référence cyclique a été détectée » à l’actualisation. Les conversions qui créeraient une boucle (table reliée à elle-même, chaînes de tables qui bouclent) sont détectées et écartées automatiquement, avec la raison affichée ; les autres sont converties. Le fichier généré s’actualise toujours.
Version 1.71.0
24 juillet 2026
Correction (suite) : après ouverture, le fichier généré avec des « clés de substitution » pouvait bloquer à l’actualisation des données quand une même table est reliée à plusieurs autres par des clés en texte. Une étape de calcul portait deux fois le même nom interne. Chaque étape reçoit désormais un nom unique. Regénère le fichier pour bénéficier de la correction.
Corrigé
Conversion des clés de relation en texte : l’actualisation ne bloque plus (« Le nom … est défini plusieurs fois ») lorsqu’une table est reliée à plusieurs autres par des clés en texte. Les étapes de calcul générées portent maintenant des noms uniques.
Version 1.70.0
24 juillet 2026
Correction : quand PBI Optimizer transformait des clés de relation en texte en clés numériques (« clés de substitution »), le fichier Power BI généré pouvait refuser de s’ouvrir avec une erreur de format (« mise en retrait non valide »). La nouvelle colonne de clé était insérée à un endroit interdit du fichier, juste avant une information technique de la table. Elle est maintenant placée au bon endroit. Les fichiers concernés s’ouvrent de nouveau normalement.
Corrigé
Conversion des clés de relation en texte : le fichier Power BI généré ne refuse plus de s’ouvrir (erreur « mise en retrait non valide »). La nouvelle colonne de clé numérique est désormais insérée à un emplacement valide dans le fichier du modèle.
Version 1.69.0
24 juillet 2026
Correction : une colonne utilisée uniquement par une mesure définie dans un rapport CONNECTÉ pouvait encore être considérée comme inutile. La v1.66 avait appris au serveur à lire ces mesures, mais l’envoi d’un rapport connecté filtrait les fichiers côté navigateur AVANT l’envoi et jetait justement celui qui contient ces mesures - le serveur ne le recevait donc jamais. C’est corrigé. Important : re-connecte le rapport concerné (retire-le puis rajoute-le) pour que ses mesures internes soient enfin prises en compte.
Corrigé
Import d’un rapport connecté : le fichier des mesures définies dans le rapport (reportExtensions.json) est désormais conservé à l’envoi. Une colonne consommée uniquement par une de ces mesures n’est plus proposée à la suppression.
Action requise : re-connecte les rapports connectés concernés (leurs champs utilisés sont figés au moment de l’ajout).
Version 1.68.0
16 juillet 2026
Import des rapports connectés en une fois : tu peux désormais déposer plusieurs fichiers (.pbix, .zip, ou rapports paginés .rdl) d’un seul coup, au lieu de les ajouter un par un. Ils sont traités l’un après l’autre avec une progression, et un bilan final indique combien ont été ajoutés (un fichier en erreur n’interrompt pas les autres).
Ajouté
Import multiple de rapports connectés : sélectionne plusieurs fichiers (.pbix, .zip, .rdl) en une fois. Progression affichée, bilan récapitulatif, et un échec n’arrête pas le lot.
Version 1.67.0
16 juillet 2026
Nouveau : l’outil convertit automatiquement les clés de relation en TEXTE en clés entières de substitution - une des tâches d’optimisation les plus fastidieuses (écrire du Power Query, refaire des jointures, rebrancher des relations), désormais en un clic. Une relation sur du texte coûte cher (stockage et vitesse) ; une clé entière réduit les deux. Coche les clés à convertir sur l’étape « Restructurer », génère, et l’outil crée l’index, le rapatrie sur les faits et rebranche la relation. Gère les clés simples ET composées (COMBINEVALUES). À vérifier au contrôle de fidélité après génération.
Ajouté
Conversion automatique des clés de relation texte en clés entières de substitution (étape « Restructurer ») : opt-in par relation, avec la cardinalité pour prioriser.
Clés composées (COMBINEVALUES, concaténations) gérées : la substitution est bâtie directement sur le tuple des colonnes source, ce qui reproduit exactement l’appariement d’origine.
L’appariement est reproduit à l’identique (insensible à la casse, toutes les lignes de faits conservées) ; les colonnes texte d’origine sont conservées et masquées.
Rappel appuyé : « hors fidélité garantie » - lancer le contrôle de fidélité (et sa version stricte) après génération.
Version 1.66.0
16 juillet 2026
Correction de la détection des colonnes inutiles : elle pouvait proposer de supprimer une colonne (importée ou calculée) qui n’est utilisée que par une mesure créée DANS un rapport (pas dans le modèle). L’outil ne lisait que les noms des champs posés sur les visuels, jamais la formule de ces mesures - et écartait même le fichier qui les contient. Désormais il lit ces mesures et suit leur formule, donc les colonnes qu’elles consomment sont bien reconnues comme utilisées.
Corrigé
Une colonne utilisée uniquement par une mesure définie dans le rapport (report-level measure) n’est plus proposée à la suppression : l’outil lit maintenant la formule de ces mesures et en suit les colonnes.
Ajouté
Rapports connectés : rappel qu’un rapport connecté avant cette version doit être re-ajouté pour que ses mesures internes soient prises en compte (ses champs sont figés au moment de l’ajout).
Version 1.65.0
16 juillet 2026
Correction d’un bug sur l’optimisation des montants (nombre flottant → décimal fixe). Sur une colonne dont la source est du texte avec un point comme séparateur décimal (« 1234.56 »), l’actualisation plantait : l’outil réécrivait le type dans Power Query, ce qui relançait une conversion texte → nombre qui échoue quand la culture du modèle attend une virgule. Désormais l’outil change uniquement le type de stockage du modèle, sans toucher à Power Query : la valeur est déjà un nombre, donc plus aucune reconversion du texte - le séparateur décimal n’a plus d’importance.
Corrigé
Optimisation « montant en virgule flottante » : l’actualisation ne plante plus quand la source est du texte avec un point décimal. L’outil ne réécrit plus le type dans Power Query - il change seulement le type de stockage du modèle (la valeur étant déjà un nombre valide, il n’y a rien à reconvertir).
Bonus : les colonnes montant sans étape de type explicite en Power Query, jusque-là laissées de côté, sont désormais traitées aussi.
Version 1.64.0
16 juillet 2026
Réduction du transfert réseau depuis la base (l’alerte Neon « 80% du quota »). Rien à voir avec le stockage - on ne stocke toujours pas vos données : le compteur mesure ce qui CIRCULE, et l’app relisait toute la liste des optimisations d’un rapport (~1 Mo) beaucoup trop souvent, notamment à chaque retour sur l’onglet. L’app ne recharge plus passivement au simple retour d’onglet, et ne lit plus les optimisations qu’elle jetait aussitôt.
Modifié
Les données ne se rechargent plus toutes seules quand tu reviens sur l’onglet du navigateur (elles se rafraîchissent sur action, ou par un rechargement manuel de la page) : c’était la principale cause du transfert réseau.
La liste des optimisations n’est plus relue tant qu’elle est récente (5 min au lieu de 30 s).
Le chargement d’un rapport ne lit plus les optimisations « colonne/mesure inutilisée », qui étaient récupérées puis ignorées (elles sont gérées par l’écran de nettoyage) : autant de transfert en moins.
Version 1.63.0
16 juillet 2026
Le contrôle de fidélité raisonne enfin sur le BON fichier. Il désignait les coupables d’après les cases cochées à l’instant, alors que le .pbip testé a été généré plus tôt : une optimisation présente dans le fichier mais décochée depuis n’était jamais proposée comme cause. L’outil garde désormais le relevé de ce qu’il a réellement écrit dans chaque fichier, prévient quand les réglages ont changé depuis, remonte les dépendances entre colonnes (une colonne en écart dont la formule lit une colonne déportée accuse ce déport), et écarte les suspects dont la colonne n’a pas bougé.
Corrigé
Les causes d’un écart décrivent le fichier réellement généré, plus les cases cochées depuis : une optimisation présente dans le .pbip mais désactivée après coup est de nouveau proposée comme cause (elle est bel et bien dans le fichier testé).
Un avertissement signale quand les réglages ont changé depuis la génération du fichier testé, avec le détail par famille, et invite à régénérer.
Ajouté
Dépendances entre colonnes : quand une colonne en écart lit une colonne déportée dans sa formule, ce déport est proposé comme cause - même si la colonne en écart n’est pas déportée elle-même.
Les suspects dont la colonne lue ressort identique avant/après sont écartés dans un bloc replié (et non masqués : le contrôle compare des totaux, qui ne voient pas des valeurs justes posées sur les mauvaises lignes).
Version stricte de la requête de contrôle (optionnelle) : elle compte les combinaisons entre chaque colonne et une colonne source de sa table, ce qui rend visible une valeur qui change de ligne - le mode de défaillance typique d’un déport par fusion. Plus lente, à réserver au doute.
Version 1.62.0
15 juillet 2026
Filet de sécurité automatique sur la page d’analyse. Cette page étant protégée par la connexion, personne ne la vérifiait automatiquement : c’est pour ça que l’oubli des réglages de format dans le récap a dû être repéré à l’œil. Des tests la rendent désormais vérifiable à chaque modification, sans intervention.
Ajouté
Tests automatiques sur la page d’analyse : ils vérifient qu’aucun bouton « Générer le .pbip » ne réapparaît hors de la page Générer, et surtout que le récap « Ce qui sera appliqué » annonce bien CHAQUE famille d’optimisations - un oubli comme celui des réglages de format serait maintenant signalé tout seul.
Version 1.61.0
15 juillet 2026
La barre d’action collée en bas de page disparaît : le bouton « Générer le .pbip » vit désormais uniquement sur la page « Générer », son endroit logique. Et le récap « Ce qui sera appliqué » de cette page liste maintenant TOUTES les familles d’optimisations - dont les réglages de format, qui n’y apparaissaient pas.
Modifié
La barre horizontale collée en bas de page (récap + bouton « Générer le .pbip ») est supprimée : le bouton se trouve sur la page « Générer », et la page gagne l’espace correspondant.
Récap « Ce qui sera appliqué » : toutes les familles d’optimisations y figurent désormais - réglages de format/résumé/tri, réécritures DAX, relations bidirectionnelles, tables calculées converties, changements de type et optimisation des requêtes - en plus des suppressions, déports et requêtes embarquées déjà présents.
Version 1.60.0
15 juillet 2026
Correction d’un vrai bug : l’option « changements de type » pouvait faire échouer l’actualisation. Quand une source livre ses dates en texte (fichiers Excel/SharePoint, où une date ressemble à « 2026-01-05T00:00:00 »), l’outil remplaçait le type de lecture par « date » - or ce type ne sait pas lire un texte avec une heure collée derrière, et l’actualisation échouait sur chaque ligne. Désormais on ne touche plus à la lecture d’origine : on ajoute une étape qui coupe l’heure APRÈS, une fois la valeur correctement lue. Le gain mémoire est identique, sans le risque. Par sécurité, l’outil s’abstient dès que la colonne n’est pas lue explicitement en « date et heure ».
Corrigé
Changements de type (datetime → date) : l’actualisation échouait (« Le type de la valeur ne correspond pas à celui de la colonne ») sur les sources livrant leurs dates en texte. Le type de lecture d’origine est désormais préservé et l’heure est coupée dans une étape ajoutée après.
L’outil s’abstient de couper l’heure d’une colonne qui n’est pas explicitement lue en « date et heure » dans Power Query, et l’explique dans le récap de génération.
Déports par fusion : le type de la colonne copiée était déduit du format d’affichage avant d’examiner le calcul réel. Un format numérique resté sur une colonne de texte la typait en nombre (erreur à chaque ligne). L’ordre de confiance est aligné sur celui des autres déports - ce que le calcul produit prime, le format d’affichage ne sert qu’en dernier recours.
Version 1.59.0
14 juillet 2026
Le contrôle de fidélité trie désormais les écarts en deux familles pour lever le doute. Quand un objet en écart est sur une table que pbi-optimizer n’a jamais modifiée, l’outil l’affirme clairement : « aucune transformation appliquée à cette table - l’écart vient de la source, pas de l’outil » (au lieu de l’ancien message hésitant). Une synthèse en tête compte combien d’écarts viennent de la source et combien sont de vrais suspects à tester. Concrètement : on ne peut pas confondre une source qui a bougé entre deux actualisations avec un défaut de fidélité.
Ajouté
Comparateur de fidélité : synthèse en tête indiquant, parmi les objets en écart, combien portent sur des tables non modifiées par l’outil (écart venant de la source) et combien sur des tables optimisées (à tester).
Modifié
Un écart sur une table jamais touchée par une optimisation affiche un message affirmatif (« aucune transformation appliquée à cette table, l’écart vient d’un changement de la source entre les deux actualisations ») au lieu du message hésitant précédent.
Un écart sur une table optimisée dont le suspect vient d’être désactivé invite explicitement à régénérer le .pbip puis à recontrôler.
Version 1.58.0
10 juillet 2026
Le contrôle de fidélité fait moins de faux positifs. 1) Les écarts qui ne portent que sur les derniers chiffres après la virgule (bruit du calcul flottant, inévitable à chaque actualisation) ne sont plus comptés comme des écarts. 2) Les déports « différés » (Power Query sur grosses tables, laissés en DAX et donc jamais appliqués) ne sont plus proposés comme causes d’un écart. 3) Un rappel explique que, pour être valable, la comparaison exige que les deux fichiers aient été actualisés sur la même donnée source - sinon une source vivante qui bouge crée des écarts qui ne viennent pas des optimisations.
Modifié
Comparateur de fidélité : les écarts purement d’arrondi (calcul flottant non déterministe) sont ignorés et signalés à part (« N écarts négligeables ignorés »).
Causes d’un écart : les déports différés (grosses tables au-dessus du seuil, laissés en DAX) ne sont plus listés comme suspects - ils ne sont pas appliqués.
Ajout d’un rappel : pour une comparaison valable, actualiser les deux fichiers sur la même donnée source ; un écart sans optimisation active vient souvent d’une source qui a changé entre les deux actualisations.
Version 1.57.3
10 juillet 2026
Correction d’une course entre la désactivation d’optimisations et la génération : si tu cliquais « Générer » juste après avoir désactivé des optimisations (déports, réécritures…), le .pbip pouvait être produit AVANT que la désactivation soit enregistrée - et donc les inclure quand même. Le bouton « Générer » affiche maintenant « Enregistrement… » et attend que tes désactivations soient bien prises en compte avant de te laisser générer.
Corrigé
Le bouton « Générer le .pbip » est bloqué (« Enregistrement… ») tant qu’une désactivation d’optimisation à statut (déport, réécriture, conversion de table calculée) n’est pas enregistrée, pour que le fichier généré reflète toujours tes derniers choix.
Version 1.57.2
10 juillet 2026
Vrai correctif du récap des déports sur la page Générer : « Tout désactiver » (et « Désactiver » à l’unité) retire enfin le groupe des déports de la carte, immédiatement. Le correctif précédent (1.57.1) ne visait pas la bonne cause.
Corrigé
Page Générer : le groupe « Déports vers Power Query / SQL / fusion » disparaît bien du récap dès la désactivation (les déports étaient déjà correctement exclus de la génération - c’était un défaut d’affichage).
Version 1.57.1
10 juillet 2026
Correction : sur la page Générer, « Tout désactiver » sur le groupe des déports affichait bien le message de confirmation mais le groupe restait affiché dans le récap (les déports étaient pourtant bien désactivés pour la génération). Le récap se met désormais à jour immédiatement, comme les autres groupes.
Corrigé
Page Générer : le groupe « Déports vers Power Query / SQL / fusion » disparaît bien du récap quand on le désactive (en masse ou à l’unité).
Version 1.57.0
10 juillet 2026
Sur la page Générer, le récap des optimisations est devenu pilotable : chaque groupe (déports, réécritures, changements de type, suppressions…) a un bouton « Tout désactiver », et en dépliant un groupe, chaque optimisation a son propre « Désactiver ». Tu ajustes exactement ce que le .pbip appliquera, avant de générer, sans avoir à retourner dans les étapes.
Ajouté
Page Générer : bouton « Tout désactiver » par groupe d’optimisations (même type) et « Désactiver » par optimisation unitaire, directement dans le récap « Détail des optimisations appliquées ».
Version 1.56.2
10 juillet 2026
Repérage des causes d’écart désormais « cross-table » : une colonne calculée peut diverger parce qu’une AUTRE table qu’elle référence (via RELATED / LOOKUPVALUE) a été déportée, même si sa propre table ne l’a pas été. L’outil détecte ces dépendances et propose, sous ces colonnes, les déports de la table référencée. Ça couvre les derniers écarts « sans cause ».
Ajouté
Contrôle de fidélité : pour une colonne calculée, l’outil lit sa formule, repère les tables qu’elle référence (RELATED / LOOKUPVALUE…) et, si l’une d’elles a été déportée, la propose comme cause (« Déports sur la table X, référencée par cette colonne calculée ») avec désactivation groupée.
Version 1.56.1
10 juillet 2026
Correction du repérage des causes d’écart : beaucoup d’objets affichaient « aucune optimisation ne touche cet objet » alors que leur table avait été transformée. En cause : un déport par fusion (jointure) change les lignes et les valeurs de TOUTE la table, et une colonne déportée peut en alimenter d’autres - donc des colonnes non déportées elles-mêmes divergent. L’outil propose désormais, sous ces objets, un suspect « Déports sur la table X » qui les couvre, avec une désactivation groupée en 1 clic.
Corrigé
Sous un objet en écart, ajout d’un suspect au niveau table « Déports sur la table X (N colonnes) » qui couvre toutes les colonnes de la table et son nombre de lignes (cas d’une fusion ou d’une dépendance entre colonnes), avec « Désactiver » groupé. Fini le « aucune optimisation » sur une colonne d’une table pourtant déportée.
Version 1.56.0
10 juillet 2026
Le comparateur de fidélité t’aide maintenant à corriger les écarts : sous chaque objet en écart (table ou colonne), il liste les optimisations « hors fidélité garantie » qui le touchent (déport, conversion de table calculée, réécriture DAX/M ou SQL, changement de type, optimisation de requêtes) avec un bouton « Désactiver » en 1 clic. Un bandeau te rappelle de régénérer le .pbip et de relancer le contrôle. De quoi isoler la cause d’un écart sans chercher à la main.
Ajouté
Contrôle de fidélité : sous chaque objet en écart, la liste des optimisations qui pourraient en être la cause, chacune avec un bouton « Désactiver ». Seules les optimisations qui peuvent réellement changer une valeur sont listées (les optimisations sûres, comme la suppression de colonnes inutilisées, ne le sont jamais).
Bandeau récapitulatif « X optimisation(s) désactivée(s) - régénère le .pbip puis relance le contrôle » pour boucler la vérification.
Version 1.55.6
10 juillet 2026
Suite du correctif de fidélité : certaines erreurs de mesure (comme la comparaison texte/nombre) sont des erreurs de « script » que Power BI ne laisse intercepter par aucun garde-fou DAX - elles bloquent donc toute la requête, même avec la protection ajoutée en 1.55.5. La page Outils propose désormais une version « sans les mesures » : elle contrôle uniquement les tables et les colonnes, qui décrivent déjà entièrement tes données (une mesure étant un calcul déterministe de ces données, si les colonnes sont identiques, les mesures le sont aussi).
Ajouté
Contrôle de fidélité : requête de repli « sans les mesures » (dépliable sous la requête principale), à utiliser quand une mesure a une erreur de calcul latente qui bloque la requête complète. Contrôle tables + colonnes uniquement, toujours exécutable.
Version 1.55.5
10 juillet 2026
Correction du contrôle de fidélité : si une de tes mesures produit une erreur de calcul quand elle est évaluée au total (par exemple une comparaison texte/nombre - un souci propre à la mesure, présent avant comme après optimisation), la requête de contrôle échouait entièrement et ne renvoyait rien. Désormais la mesure fautive affiche « #ERREUR » et le contrôle se poursuit sur tous les autres objets. Comme l’erreur est identique avant et après, elle n’est pas comptée comme un écart.
Corrigé
Requête de contrôle de fidélité : chaque valeur est protégée (IFERROR) - une mesure qui échoue à l’évaluation renvoie « #ERREUR » au lieu de faire échouer tout le contrôle. Tu obtiens enfin la signature de toutes les tables, colonnes et mesures évaluables.
Version 1.55.4
10 juillet 2026
À la génération, le fichier .pbip contenu dans l’archive est maintenant renommé avec le même suffixe que l’archive (« .optimized » + horodatage). Après extraction, ton projet optimisé porte donc un nom distinct de l’original - plus de confusion ni de risque d’écraser ton fichier de départ.
Modifié
Génération : le fichier .pbip à l’intérieur de l’archive .zip est renommé comme l’archive (ex. « MonRapport.optimized.2026-07-10_14-30.pbip »). Les dossiers .Report / .SemanticModel restent référencés correctement (le projet s’ouvre normalement dans Power BI).
Version 1.55.3
10 juillet 2026
Les réécritures par IA conservent désormais tes commentaires. En DAX et Power Query, l’IA garde les commentaires existants à leur place (en plus de son résumé de changement). En SQL, où les commentaires étaient retirés par confidentialité, ils sont maintenant remplacés par des repères neutres que l’IA préserve, puis ton vrai texte est restauré au retour - sans que le contenu des commentaires soit jamais envoyé. Le brief « Confier à un agent sans limite » inclut aussi la consigne.
Modifié
Réécriture DAX / Power Query par IA : les commentaires existants sont conservés dans le résultat (l’IA les garde au plus près du code qu’ils annotaient).
Réécriture SQL par IA : les commentaires sont préservés via des repères neutres (leur contenu reste masqué à l’IA, comme les noms et les valeurs), puis restaurés dans la requête optimisée.
Carte « Confier la réécriture à un agent sans limite (requête lourde) » : le brief intègre la consigne de conserver les commentaires existants.
Version 1.55.2
10 juillet 2026
Robustesse : si l’affichage d’un rapport rencontre un problème, tu vois désormais un message clair avec un bouton « Réessayer » (et un retour vers tes rapports) au lieu d’une page blanche. En coulisses, un contrôle automatique a aussi été ajouté pour empêcher que ce type de bug ne revienne.
Ajouté
Page d’erreur propre pour la zone rapport : message rassurant (tes données sont conservées), bouton « Réessayer » et lien « Retour à mes rapports », au lieu de la page blanche « Application error ».
Version 1.55.1
10 juillet 2026
Correction d’un bug qui affichait une page blanche au chargement d’un rapport fraîchement téléversé (surtout un .pbip zippé). Une vérification interne des requêtes SQL était déclenchée trop tard dans le rendu de la page ; sur un rapport neuf (qui démarre toujours par un court temps de chargement), ça faisait planter l’affichage. La page se charge de nouveau normalement.
Corrigé
Page blanche (« Application error ») à l’ouverture d’un rapport neuf : la préparation de l’analyse des requêtes est désormais lancée au bon moment dans le rendu, ce qui supprime le plantage.
Version 1.55.0
10 juillet 2026
Centre de notifications : une cloche apparaît dans l’en-tête quand tu es connecté, avec une pastille indiquant le nombre de notifications non lues. Un clic ouvre la liste ; tu peux marquer une notification comme lue (ou tout marquer d’un coup) et cliquer dessus pour aller directement à la page concernée. Les notifications restent consultables dans l’app (historique).
Ajouté
Cloche de notifications dans l’en-tête (visible une fois connecté) : pastille du nombre de non-lues, panneau déroulant listant les notifications, marquage lu / tout lire, et clic pour ouvrir la page liée.
Base technique pour notifier un utilisateur depuis le serveur (une notification = titre, texte, lien). Prête à être branchée sur les événements de l’app (ex. « ton analyse est terminée »). Option future : notifications système sur le téléphone (push).
Version 1.54.4
10 juillet 2026
Les requêtes sont désormais classées par « enjeu » : les plus lourdes remontent en tête, avec une pastille Enjeu élevé / moyen / faible et une ligne « pourquoi » (les 2-3 facteurs qui pèsent). Le score combine le volume de la table, la complexité côté serveur (jointures, unions, anti-patterns SQL) et le repli de requête cassé côté extraction - et il te dit quel levier tirer : réécrire le SQL (charge serveur) ou réparer le repli (extraction / mémoire). C’est un ordre de priorité relatif, pas une durée en secondes (impossible à prédire sans exécuter la requête).
Ajouté
Score d’enjeu par requête sur la page Affiner : pastille de couleur (élevé / moyen / faible) + ligne « pourquoi » listant les facteurs dominants (ex. « 12 M lignes · repli cassé dès l’étape 2 · LIKE avec joker en tête »), avec la nature de l’enjeu (charge serveur, extraction / mémoire, ou les deux).
Deux axes distincts dans le calcul : coût serveur (réduit par la réécriture SQL) et coût extraction (réduit en préservant le repli). Utile car pousser le travail vers le serveur soulage ton PC mais charge le serveur - les deux comptent.
Modifié
Le panneau des requêtes trie maintenant par enjeu décroissant (au lieu du seul volume) : tu attaques d’abord ce qui pèse vraiment sur le rafraîchissement et le serveur.
Version 1.54.3
10 juillet 2026
Étape « Affiner » repensée pour l’objectif « Accélérer l’extraction ». Les tables générées par requêtes SQL étaient reléguées tout en bas de la page et le compteur d’optimisations comme les filtres par type les ignoraient. Désormais, quand « Accélérer l’extraction des données » fait partie de tes objectifs, le panneau des requêtes remonte en tête d’étape (c’est le levier n°1), il compte dans le « X sur Y traitées » de l’étape, et une pastille « Requêtes SQL » rejoint les filtres par type (un clic t’y amène directement).
Modifié
Étape Affiner : le panneau « Accélérer le chargement (requêtes) » - qui contient la réécriture SQL assistée par IA avec masquage des noms de serveur, base, table et champ - passe désormais en tête de page lorsque l’objectif « Accélérer l’extraction des données » est sélectionné, au lieu d’être sous la liste des constats DAX.
Le compteur « traitées » de l’étape Affiner inclut maintenant les requêtes SQL optimisables : une requête est comptée comme traitée quand sa réécriture est embarquée.
Ajouté
Une pastille de filtre « Requêtes SQL » aux côtés des types de constats de l’étape Affiner ; un clic fait défiler jusqu’au panneau des requêtes.
Version 1.54.2
8 juillet 2026
Comparateur de fidélité intégré : au lieu de comparer les deux résultats à la main dans Excel, colle-les dans l’outil - il repère tout seul les objets (tables, colonnes, mesures) dont les valeurs diffèrent, avec la valeur d’origine et la valeur optimisée côte à côte. Tout se fait dans ton navigateur, aucune donnée n’est envoyée.
Ajouté
Sur la page Outils, sous la requête de contrôle de fidélité : deux zones pour coller le résultat exécuté sur l’original et sur l’optimisé. Le comparateur affiche « fidélité confirmée » si tout est identique, ou la liste des objets en écart (avec, pour chaque, l’agrégat concerné et les deux valeurs) et le rappel de la marche à suivre : retirer l’optimisation qui touche l’objet, re-générer, recoller.
Parsing tolérant : tabulation, point-virgule ou virgule, en-tête optionnel, noms d’objets entre guillemets - de quoi coller directement ce qui sort de la vue Requête DAX ou de DAX Studio.
Version 1.54.1
8 juillet 2026
Conversion des tables calculées plus puissante : l’IA reçoit désormais, pour chaque colonne dont dépend la table, si elle est déjà disponible en Power Query (déportée) ou seulement en DAX - et dans ce dernier cas, sa formule pour la reproduire. C’était l’information qui manquait et qui faisait refuser l’IA sur les tables les plus imbriquées (comme les « Données HA préparée »). À vérifier ensuite avec la requête de fidélité, comme toujours.
Modifié
Lors de la conversion d’une table calculée en Power Query, l’IA connaît maintenant l’état de chaque colonne référencée (source / calculée déportée = disponible, ou calculée non déportée = à reproduire, avec sa formule DAX) et le fait qu’une table calculée référencée sera elle-même convertie. Elle peut donc traiter des tables qu’elle refusait faute de pouvoir résoudre leurs filtres.
Garde-fous renforcés dans les consignes : un CONCATENATEX sans ordre explicite (ordre non garanti) n’est traduit que si l’ordre est reproductible à l’identique, sinon la conversion est refusée - la fidélité prime.
Version 1.54.0
8 juillet 2026
La page Générer affiche désormais le récapitulatif COMPLET : le détail de toutes les optimisations appliquées automatiquement dans le .pbip (suppressions, déports, réécritures, conversions, changements de type…), et la liste de toutes les optimisations à réaliser manuellement dans Power BI après génération. Avant de générer, vous voyez le plan prévu ; après, le résultat réel (ce qui a été appliqué et ce qui a été laissé en DAX, avec la raison).
Ajouté
Carte « Détail des optimisations appliquées » : avant génération, le plan groupé par nature avec la liste des objets concernés (dépliable) ; après génération, la liste réelle des optimisations appliquées, plus celles non appliquées avec leur raison.
Carte « À réaliser manuellement dans Power BI (après génération) » : chaque étape manuelle avec son intitulé, l’objet concerné, son impact et son explication - de quoi tout traiter sans quitter la page.
Version 1.53.4
8 juillet 2026
Rangement du parcours : les deux options de traitement en masse (« Changements de type » et « Optimiser les requêtes ») quittent la page Générer pour rejoindre l’étape à laquelle elles se rapportent - « Changements de type » sur la page Alléger, « Optimiser les requêtes » sur la page Affiner. La page Générer en garde un récapitulatif en lecture seule, avec un lien direct vers la page où les régler.
Modifié
« Changements de type » (date-heure → date, flottant → décimal) se règle désormais sur la page Alléger, où vivent les colonnes concernées.
« Optimiser les requêtes » (réécritures à résultat identique) se règle désormais sur la page Affiner, auprès du panneau des requêtes.
La page Générer affiche l’état de ces deux options en lecture seule (activé / désactivé) avec un lien vers la page correspondante, au lieu des cases à cocher.
Version 1.53.3
8 juillet 2026
Nouveau : un script PowerShell prêt à copier, directement dans l’outil, pour mesurer le vrai pic mémoire de l’actualisation sans rester devant le Gestionnaire des tâches. Il affiche le pic en direct (rafraîchi toutes les 2 secondes) et ne demande ni installation ni droits administrateur.
Ajouté
Dans le guide « Mesurer le VRAI pic mémoire » (page Mémoire), une méthode « script PowerShell » avec bouton « Copier » : coller dans PowerShell, lancer l’actualisation, lire la valeur « PIC » à l’écran. Aucune installation, aucun droit administrateur, aucun fichier écrit sur le disque (évite les soucis de Bureau redirigé sur un poste pro). La méthode « Gestionnaire des tâches » (visuelle) reste disponible en alternative.
Version 1.53.2
8 juillet 2026
Clarification importante de la mesure mémoire. Les diagnostics Power BI que vous collez mesurent l’ÉTAPE D’EXTRACTION (Power Query tire les données) - pas la phase de chargement/recalcul qui provoque l’erreur « mémoire insuffisante ». Un chiffre de quelques centaines de Mo pouvait laisser croire à tort que le pic mémoire réel était minuscule. L’affichage l’explique désormais clairement, et un nouveau guide montre comment mesurer le VRAI pic avec le Gestionnaire des tâches.
Modifié
La section « Mémoire d’actualisation mesurée » distingue explicitement les deux phases (extraction Power Query vs chargement/recalcul VertiPaq) et précise que le chiffre issu des diagnostics ne concerne que l’extraction - avec un encart d’avertissement pour éviter la comparaison trompeuse avec l’estimation du simulateur (qui porte, elle, sur le recalcul).
Ajouté
Guide pas-à-pas pour mesurer le vrai pic mémoire (phase de chargement/recalcul) avec le Gestionnaire des tâches : suivre le processus « Microsoft SQL Server Analysis Services » (msmdsrv.exe) pendant une actualisation, ou à défaut la mémoire « Utilisée » totale. C’est ce chiffre qui se compare à l’estimation du simulateur.
Version 1.53.1
8 juillet 2026
Correction : les tables de dates que Power BI crée automatiquement (option « Date/heure automatique ») ne sont plus proposées au déport ni à la conversion. Ces tables cachées contiennent chacune 6 colonnes calculées (Année, Mois, Trimestre…) - sur un modèle sans aucune colonne calculée de l’utilisateur, l’outil en listait parfois des dizaines à tort. Elles sont désormais traitées uniquement par la recommandation « désactiver Date/heure automatique », qui les supprime toutes d’un coup.
Corrigé
Les colonnes et tables des tables de dates auto-générées par Power BI (noms « LocalDateTable… » / « DateTableTemplate… », cachées) ne sont plus comptées comme colonnes/tables calculées à déporter, convertir ou dont il faut affiner la granularité. Vérifié sur un modèle réel : de 60 déports proposés à tort à 0, et une seule recommandation pertinente (« désactiver Date/heure automatique »).
Version 1.53.0
7 juillet 2026
Déport intelligent des clés de relation. Ces clés sont souvent bâties avec la fonction DAX COMBINEVALUES, conçue exprès pour relier deux tables ; les déporter n’importe comment (un côté en SQL, l’autre en Power Query, ou avec des types différents) fait diverger les deux côtés, la relation ne se lie plus et toute formule RELATED() échoue au chargement. Désormais une clé n’est déportée que si c’est prouvé sûr - les deux bouts de la relation partent « à la source » (SQL), sur des clés texte, avec le même type - sinon elle reste en DAX à l’identique de l’original. On récupère ainsi une partie du gain sans jamais casser une relation. Re-génère ton .pbip après cette mise à jour.
Ajouté
Déport coordonné des clés de relation : une clé calculée n’est déportée que si, pour chaque relation dont elle fait partie, l’autre bout part lui aussi « à la source » (SQL) - ou est déjà une colonne source en texte - avec le même type forcé. Les deux clés produisent alors des valeurs identiques, la relation reste intacte. Toute clé qui ne remplit pas ces conditions reste en DAX, exactement comme dans l’original.
Corrigé
Une clé de relation n’est plus jamais déportée en Power Query ni par fusion (seul le déport coordonné « à la source » préserve la relation), et une clé bâtie sur un nombre ou une date reste en DAX (leur mise en forme texte diffère entre DAX et SQL). Sur le modèle réel : 35 clés de relation calculées, dont 4 déportées en toute sécurité et 31 conservées en DAX, avec zéro relation cassée (dont celle entre « Nomenclature Technique par Site affecté » et « Commandes Matières et composants en cours »).
Version 1.52.10
7 juillet 2026
Correction de fidélité des déports : un calcul déporté (Power Query ou reste d’une fusion mixte) qui référence une colonne de sa propre table restée en DAX - ou ajoutée plus tard dans la requête - produisait une erreur sur chaque ligne au chargement (constaté : 17 438 erreurs sur 19 003 lignes). La génération vérifie désormais que chaque référence de ligne existera réellement au moment où le calcul s’exécute ; sinon la colonne reste en DAX, avec explication. Re-génère ton .pbip après cette mise à jour.
Corrigé
Les calculs déportés en Power Query ne peuvent référencer que des colonnes sources, des colonnes déportées en SQL (présentes dans la requête native) ou d’autres colonnes déportées de la même table - une référence vers une colonne restée en DAX disqualifie le déport, de proche en proche (en écarter une peut en invalider une autre).
Les restes de calcul des fusions mixtes sont soumis à la même règle, avec une contrainte de plus : au moment de la jointure, les déports Power Query de la table n’existent pas encore - seules les colonnes sources, les déports SQL et le champ d’appoint de la fusion sont disponibles.
Sur le modèle réel : 7 déports Power Query et 4 fusions mixtes écartés avec la raison précise (la colonne référencée est nommée), le reste du plan est conservé.
Version 1.52.9
7 juillet 2026
Correction bloquante du typage des colonnes déportées : les colonnes calculées n’ont pas de type enregistré dans le fichier (le moteur le devine au chargement), et les déports « à la source (SQL) » et « fusion » leur assignaient « texte » par défaut - les formules restantes qui les comparent à des nombres échouaient au chargement (« comparaison Text avec Integer »), en cascade sur tout le modèle. Le type est désormais déduit de signaux fiables, et en cas de doute la colonne reste en DAX. Re-génère ton .pbip après cette mise à jour.
Corrigé
Le type d’une colonne déportée en SQL est déduit dans l’ordre : type déclaré, expression manifestement texte (CONCAT, concaténations, fonctions texte), format d’affichage, agrégation par défaut, littéraux de résultat (CASE … THEN 1 ELSE 0 → nombre entier). Si rien ne permet de conclure, la colonne bascule sur le déport Power Query (dont la traduction porte plus d’indices) au lieu de recevoir « texte » au hasard.
Même chaîne pour les fusions : format d’affichage, inférence sur le reste de calcul traduit (if … then 1 else 0 → nombre), type de la colonne rapatriée (y compris celui assigné par un déport de la même génération). Type indéterminable → la colonne reste en DAX, avec explication.
L’inférence du déport Power Query reconnaît désormais les colonnes « check » (if … then 1 else 0) comme numériques.
Vérifié sur le modèle réel : 57 colonnes à type inconnu reçoivent un type numérique/date correct (au lieu de « texte »), 3 restent prudemment en DAX.
Version 1.52.8
6 juillet 2026
Correction bloquante des fusions : quand deux jointures (avec des clés différentes) vers la même table rapatriaient la même colonne, les deux développements créaient le même champ d’appoint - la requête échouait au chargement (« Le champ … existe déjà dans l’enregistrement »). Les champs d’appoint sont désormais uniques par jointure. Re-génère ton .pbip après cette mise à jour.
Corrigé
Chaque jointure de fusion développe ses colonnes sous un nom d’appoint qui lui est propre (suffixe « (2) » à partir de la deuxième jointure rapatriant la même colonne), et chaque colonne copiée lit le champ de SA jointure.
Cas particulier des fusions « mixtes » (avec un reste de calcul traduit) : leur nom d’appoint doit rester exact - il est réservé en priorité, et une collision entre deux mixtes fait refuser proprement la fusion de la table (colonnes laissées en DAX) au lieu de produire un fichier cassé.
Version 1.52.7
6 juillet 2026
Correction bloquante : trois traductions IA stockées portaient un « jeton d’anonymisation » résiduel (un reste du masquage des noms envoyés à l’IA, du type col_64) - embarquées dans le fichier généré, elles cassaient la requête au chargement, voire auraient pu fausser des valeurs en silence. La génération refuse désormais toute traduction portant un tel jeton, et le masquage lui-même est corrigé pour ne plus en produire. Re-génère ton .pbip après cette mise à jour.
Corrigé
La génération vérifie chaque traduction (SQL, Power Query, fusion, conversion de table) avant de l’embarquer : un jeton d’anonymisation résiduel la disqualifie avec une explication, et la colonne reste en DAX (résultat inchangé). Trois colonnes de ce type sont concernées sur les traductions existantes.
Le masquage des noms envoyés à l’IA traite désormais les noms entre crochets en premier : un nom de colonne court (« Date ») ne peut plus être remplacé à l’intérieur d’un nom long qui commence pareil, ce qui créait des jetons hybrides.
Le dé-masquage des réponses de l’IA se fait en une seule passe : un remplacement ne peut plus réintroduire un jeton déjà traité.
Version 1.52.6
6 juillet 2026
Correction bloquante du déport SQL : le nettoyage de fin de requête (retrait du « ; » final) pouvait amputer un texte entre apostrophes qui terminait la requête (WHERE x = 'PF' devenait WHERE x =) - d’où « Incorrect syntax near ')' » au chargement. Vérifié sur les 18 requêtes réellement déportées : toutes les fins sont désormais intactes. Re-génère ton .pbip après cette mise à jour.
Corrigé
Le retrait du « ; » final et des commentaires de fin de requête ne traverse plus jamais un littéral réel : il recule segment par segment (blancs réels, « ; » réels, commentaires entiers) au lieu de s’appuyer sur une version masquée du texte où les littéraux ressemblaient à des espaces.
Version 1.52.5
6 juillet 2026
Correction bloquante des déports par fusion : une fusion qui utilisait comme clé ou comme colonne cherchée une colonne encore calculée en DAX faisait échouer la requête au chargement (« Nous n’avons pas trouvé la colonne… »), car cette colonne n’existe pas dans Power Query. La génération vérifie désormais la disponibilité réelle de chaque clé et colonne, de proche en proche. Re-génère ton .pbip après cette mise à jour.
Corrigé
Chaque fusion est validée avant d’être injectée : ses clés et sa colonne cherchée doivent exister dans les requêtes concernées - colonne source, ou colonne déportée dans la même génération (SQL, Power Query, autre fusion, table convertie). Une fusion irréalisable est refusée avec la raison précise et la colonne reste en DAX (résultat inchangé).
Le refus d’une fusion invalide automatiquement celles qui comptaient dessus (calcul de proche en proche), et côté table de départ seules les colonnes sources ou déportées en SQL comptent - la jointure s’exécute avant les ajouts Power Query.
Les tables dont la requête SQL n’est pas enveloppable (plusieurs instructions, DECLARE…) sont écartées du déport SQL dès la planification : leurs colonnes basculent sur le déport Power Query classique au lieu d’être perdues, et les fusions ne comptent plus sur des colonnes qui n’arriveraient jamais.
Version 1.52.4
6 juillet 2026
Correction bloquante du déport « à la source (SQL) » : quatre défauts empêchaient le chargement des tables déportées côté SQL Server (« src.X could not be bound », « Incorrect syntax near 'with' », « non-boolean type near… »). Re-génère ton .pbip après cette mise à jour.
Corrigé
L’enveloppe SQL nomme désormais la sous-requête « src », conformément à ce qui est annoncé à l’IA de traduction - ses expressions qualifiées (src.Colonne) retrouvent leurs colonnes.
Les requêtes d’origine qui commencent par WITH (une « CTE ») sont enveloppées correctement : le WITH est hissé au-dessus de la sous-requête au lieu d’y être enfermé (interdit par SQL Server).
Une colonne déportée qui en utilise une autre est calculée dans un étage de sous-requête supplémentaire (imbrication automatique par niveau de dépendance) au lieu d’être introuvable au même niveau.
Les noms de colonnes à espace ou caractère spécial oubliés sans crochets par l’IA ([UOMBuy SAP]) sont crochetés automatiquement à la génération, hors textes entre apostrophes.
Les requêtes non enveloppables (plusieurs instructions, DECLARE…) sont refusées proprement : les colonnes concernées restent en DAX et la génération l’explique, au lieu de produire un fichier cassé.
Version 1.52.3
6 juillet 2026
Les pages Contact, Connexion et Inscription ont désormais leur propre titre dans l’onglet du navigateur (par exemple « Connexion | PBI Optimizer ») au lieu du seul nom du site.
Ajouté
Titre d’onglet dédié pour les pages Contact, Connexion et Inscription : plus facile de s’y retrouver quand plusieurs onglets du site sont ouverts.
Version 1.52.2
6 juillet 2026
Correction du titre affiché dans l’onglet du navigateur : sur certaines pages (Nouveautés, Mentions légales, Politique de confidentialité), le nom du site apparaissait deux fois, par exemple « Nouveautés | PBI Optimizer | PBI Optimizer ».
Corrigé
Le nom du site n’apparaît plus qu’une seule fois dans le titre de l’onglet du navigateur, sur toutes les pages.
La page Politique de confidentialité affichait en plus un nom technique interne dans son titre ; elle affiche désormais « Politique de confidentialité | PBI Optimizer ».
Version 1.52.1
6 juillet 2026
Correction bloquante de la génération : quand une même table cumulait un déport par fusion ET un déport Power Query, le fichier généré définissait deux fois la même étape interne (« __PBIoptStable ») - Power Query refusait alors de charger la table, et toutes les requêtes qui s’appuyaient dessus tombaient en cascade (« Le nom __PBIoptStable est défini plusieurs fois »). Re-génère ton .pbip : le fichier précédent est inutilisable, tes validations sont intactes.
Corrigé
Chaque réécriture supplémentaire de la requête d’une même table utilise désormais des noms d’étapes uniques (suffixe automatique : __PBIoptStable2, __PBIoptBase2…). Cela couvre aussi le re-téléversement d’un fichier déjà optimisé, qui contenait déjà ces étapes.
Version 1.52.0
6 juillet 2026
Nouveau parcours en pages : au lieu d’un unique écran qui affichait tout (et redessinait des centaines de cartes à chaque clic), le rapport se traverse désormais page par page - Objectif, Mesurer, les 5 étapes d’optimisation, Générer - avec des boutons Précédent/Suivant. Chaque page ne charge que ce qui la concerne : l’affichage devient net et immédiat, même sur un très gros modèle.
Ajouté
Barre d’étapes en haut de page : Objectif → Mesurer → Nettoyer → Alléger → Restructurer → Affiner → Peaufiner → Générer, avec l’avancement en direct sur chaque pastille (reste à traiter, coche quand c’est fini) et un accès direct à la page Outils. Boutons Précédent/Suivant en bas de chaque page. L’adresse de la page retient l’étape ouverte (partageable).
Page « Objectif » : choix des objectifs, résumé du diagnostic, prochaine action recommandée et alertes de cohérence, réunis sur un seul écran d’entrée.
Page « Générer » : récapitulatif de ce qui sera appliqué, options, génération du .pbip et plan d’action au même endroit. La barre du bas devient un simple rappel compact avec un bouton vers cette page.
Modifié
Les longues listes d’optimisations s’affichent par groupes de 20 cartes (bouton « Afficher les 20 suivantes ») au lieu de centaines d’un coup : c’était la cause principale des lenteurs d’affichage.
Valider ou ignorer une optimisation est désormais instantané : l’interface se met à jour immédiatement sans re-télécharger toute la liste depuis le serveur (mise à jour « optimiste », annulée automatiquement en cas d’erreur).
Les filtres par type d’optimisation sont des pastilles en tête de chaque étape (l’ancien rail latéral et son zoom sont remplacés par la navigation en pages).
Version 1.51.0
6 juillet 2026
Grande accélération de la page rapport : le serveur ne relit plus votre fichier depuis le stockage à chaque affichage. Jusqu’ici, chaque requête de la page re-téléchargeait et re-décortiquait le .pbip complet, l’une après l’autre - d’où des attentes de plusieurs dizaines de secondes sur les gros modèles. Le fichier est désormais décortiqué une seule fois puis gardé en mémoire côté serveur (un « cache »).
Modifié
Le résultat du décorticage de votre fichier est gardé en mémoire côté serveur (cache) et réutilisé par tous les affichages de la page : classement mémoire, simulateur d’actualisation, analyse des requêtes, colonnes supprimables, déports, fusions, contrôle de fidélité, etc. Sur un gros modèle, l’ouverture de la page et les actions passent de plusieurs dizaines de secondes à quelques secondes au premier affichage, puis deviennent quasi instantanées.
Quand plusieurs affichages demandent le fichier au même moment, un seul téléchargement et un seul décorticage sont effectués puis partagés (dédoublonnage des demandes simultanées).
Version 1.50.3
6 juillet 2026
Correction importante pour la mémoire : une colonne cochée pour le déport mais reportée sur une grosse table (déport Power Query au-delà du seuil) n’était ni déportée NI supprimée si elle était inutilisée - elle survivait comme colonne calculée morte. Elle est désormais supprimée quand plus rien ne l’utilise, ce qui allège d’autant le recalcul à l’actualisation.
Corrigé
À la génération, seules les colonnes RÉELLEMENT déportées (présentes dans une opération de déport) sont protégées de la suppression. Une colonne dont le déport Power Query est reporté par le seuil de taille redevient supprimable si elle est inutilisée - au lieu de rester une colonne calculée morte, exclue à la fois du déport et du nettoyage. Sur un gros modèle, cela retire plusieurs dizaines de colonnes du recalcul de fin d’actualisation.
Version 1.50.2
6 juillet 2026
Correction du décompte des déports : les déports « à la source (SQL) » et les fusions, qui s’appliquent quelle que soit la taille de la table, n’étaient à tort pas comptés comme faits sur les grosses tables (marqués « reportés » par le seuil, qui ne concerne pourtant que le déport Power Query). Le compteur affichait donc bien moins que la réalité.
Corrigé
Le seuil de taille (qui reporte le déport d’une colonne sur une très grosse table) ne s’applique désormais qu’au déport Power Query, jamais au déport à la source SQL ni aux fusions - ceux-là sont calculés par le serveur ou par une jointure et s’appliquent quelle que soit la taille de la table. Résultat : ces déports comptent enfin comme « faits » (barre du bas, avancement des étapes, état des lieux du déport) au lieu d’apparaître à tort comme « à traiter ».
Version 1.50.1
6 juillet 2026
Le guide d’extraction des compteurs de performances devient un vrai pas-à-pas : où activer l’option quand elle est absente, pourquoi garder Power Query ouvert pendant l’actualisation, comment copier toute la table (l’icône de tableau en haut à gauche - Ctrl+A ne fonctionne pas), et le rappel que la mesure vaut AUSSI pour une actualisation qui échoue.
Modifié
Guide « Comment mesurer » du panneau Mémoire réécrit avec les pièges réels balisés : activation des diagnostics via Fichier → Options si l’onglet Outils ne montre pas la case, fenêtre Power Query à laisser ouverte pendant l’actualisation, mesure à poursuivre jusqu’à l’erreur mémoire (c’est elle qu’on veut chiffrer), copie de la table entière via l’icône de grille, et nettoyage après import (diagnostics à désactiver). Le guide est désormais déplié par défaut.
Version 1.50.0
6 juillet 2026
Contrôle de fidélité des données : l’onglet Outils fournit une requête DAX qui calcule une signature chiffrée (nombre de lignes, sommes, valeurs distinctes…) de chaque table, colonne et mesure que ton rapport utilise. Exécute-la sur l’original et sur l’optimisé, compare : identiques = tes données sont préservées. Entièrement déterministe, aucune donnée envoyée.
Ajouté
Nouveau panneau « Contrôle de fidélité des données » (onglet Outils) : une requête DAX prête à copier, couvrant uniquement les objets réellement utilisés (colonnes affichées, mesures, clés de relation) - COUNTROWS par table, COUNT/SUM/MIN/MAX pour les nombres, nombre de valeurs distinctes et somme des longueurs pour le texte, bornes pour les dates. Un guide en 3 étapes explique comment l’exécuter sur les deux fichiers et comparer.
Inclus
100 % déterministe (aucune IA, aucun coût) et exécuté chez toi : aucune donnée ne quitte ton poste. C’est le garde-fou qui accompagne les déports et conversions « hors fidélité garantie » : un écart sur une ligne pointe exactement l’objet à revérifier.
Version 1.49.0
6 juillet 2026
Les tables calculées peuvent enfin être CONVERTIES en requêtes, directement dans le fichier généré : l’IA traduit leur formule DAX en requête Power Query, l’outil la vérifie, et la table cesse d’être reconstruite à chaque actualisation - c’était le dernier gros poste du pic mémoire à l’enregistrement.
Ajouté
Assistant « Convertir en requête Power Query » sur chaque carte de table calculée : bouton « Proposer la conversion (IA) » (la formule DAX de la table - DISTINCT, SUMMARIZE, FILTER… - devient une requête M qui référence les requêtes des autres tables), aperçu de la requête, explication et points de vigilance, puis case « Convertir à la génération ».
Triple garde-fou déterministe : la requête proposée est refusée si elle utilise une fonction M inconnue ou Table.Buffer (la cause historique des saturations mémoire), et la table convertie est projetée STRICTEMENT sur ses colonnes actuelles - toute dérive de schéma fait échouer l’actualisation explicitement au lieu de charger des données fausses.
Dans le fichier généré : la partition calculée devient une vraie requête (bascule « = calculated » → « = m »), et les colonnes héritées de la formule deviennent des colonnes sources normales - relations, mesures et visuels qui les utilisent restent intacts.
Inclus
Comme les déports, la conversion est « hors fidélité garantie » : après actualisation, compare le nombre de lignes et quelques valeurs avec la version d’origine (doublons, vides, casse et tri sont les écarts classiques, listés par l’IA dans ses points de vigilance).
Version 1.48.0
6 juillet 2026
Les fusions ne sont plus des recettes à coller à la main : les colonnes RELATED / LOOKUPVALUE peuvent être déportées AUTOMATIQUEMENT à la génération - la jointure Power Query exacte est injectée dans la requête de la table (dédupliquée sur ses clés : aucune ligne multipliée possible) et la colonne calculée DAX disparaît du recalcul. Individuellement ou en masse.
Ajouté
Case « Déporter par fusion à la génération » sur chaque colonne à recette de fusion applicable : la jointure (clés déduites des relations du modèle ou de l’expression) est injectée dans le .pbip généré, partagée entre les colonnes qui lisent la même table, et la table jointe est réduite à ses colonnes utiles puis dédupliquée sur ses clés - le nombre de lignes de ta table ne peut pas changer. Cas mixte : le reste du calcul est traduit une fois en Power Query (IA).
« Tout déporter les fusions » dans la carte Déport : aperçu gratuit (fusions pures gratuites / mixtes avec coût IA estimé / sans recette), exécution par lots avec reprise, récapitulatif détaillé.
L’état des lieux du poste de commande et tous les compteurs (barre du bas, étapes) comptent désormais les fusions cochées - et, correction au passage, les déports « SQL seul » qui n’étaient pas comptés comme traités dans l’interface.
Corrigé
La recette de fusion affichée (à coller à la main) référençait la table jointe comme un texte au lieu d’une requête : le collage échouait dans l’éditeur avancé. Corrigé (référence # « Table »).
Inclus
Moteur validé sur un modèle réel de 85 tables : 26 fusions pures injectées sur 8 tables en une génération, fichier re-parsé intègre (toutes les colonnes conservées, converties en colonnes sourcées). Comme tout déport, compare quelques valeurs après actualisation (clés en double, valeurs vides, casse).
Version 1.47.0
5 juillet 2026
Le déport en masse tente désormais le SQL en priorité : pour chaque colonne facilement déportable dont la table lit une requête SQL, le calcul est traduit et confié à ton serveur de base de données (zéro coût local à l’actualisation), avec repli automatique en Power Query. Les colonnes autrefois refusées en Power Query sont repêchées via la voie SQL.
Modifié
« Tout déporter en Power Query » devient un déport en masse à deux voies : SQL à la source d’abord (tables à requête SQL native unique), Power Query en repli. Chaque proposition SQL passe les mêmes gardes de sécurité que le déport individuel (jamais d’instruction, de commentaire ou de point-virgule).
Repêchage : une colonne dont la traduction Power Query avait été refusée est retentée par la voie SQL si sa table y est éligible - l’écran de confirmation en tient compte dans ses compteurs et son estimation de coût.
Version 1.46.0
5 juillet 2026
Simulateur d’actualisation : avant de lancer Power BI Desktop, le panneau Mémoire rend un verdict phase par phase (« devrait passer / risque élevé / échec probable ») contre le budget mémoire de ta machine, et chiffre des scénarios cumulatifs d’optimisation - le chemin vers une actualisation qui passe, calculé sur tes octets réels.
Ajouté
Carte « Simulateur d’actualisation » dans le panneau Mémoire : renseigne la RAM de ton poste et tes réglages Desktop (évaluations simultanées, Mo par évaluation), et obtiens le verdict de chaque phase - chargement des données, transaction (double copie du modèle), recalcul final à l’enregistrement (la phase qui produit « La mémoire est insuffisante… »). Fourchettes calibrées sur un cas réel d’échec.
Scénarios « Et si… » cumulatifs et chiffrés : suppression des colonnes inutilisées → déport facile (SQL / Power Query) → déport des fusions (RELATED / LOOKUPVALUE) → conversion des tables calculées. Chaque palier recalcule le pic et son verdict : tu vois exactement quelles actions rendent l’actualisation possible sur ta machine.
Liste des « leviers » : les tables qui pèsent au recalcul, avec leur poids re-balayé, leurs colonnes calculées (dont full-scan), et combien sont déportables facilement ou par fusion.
Inclus
La simulation est entièrement déterministe (aucune IA, aucun coût) et se calcule depuis la structure du modèle, la volumétrie et la mémoire réelle importées. Elle raisonne prudemment : une table reste re-balayée tant qu’il lui reste une seule colonne calculée.
Version 1.45.2
5 juillet 2026
Correction : sur grand écran, la barre d’actions du bas ne recouvre plus le bas de la colonne latérale droite - le bouton d’import des mesures de mémoire réelle (VertiPaq) redevient accessible.
Corrigé
La colonne latérale de droite (contexte et imports) et le bandeau d’étapes de gauche ont leur propre zone de défilement : sa hauteur maximale tenait compte du haut de l’écran mais pas de la barre d’actions fixée en bas, si bien que le dernier bouton (import des compteurs de performances / mémoire réelle) passait sous cette barre. La hauteur retranche désormais la hauteur réelle de la barre, laissant le bouton toujours cliquable.
Version 1.45.1
5 juillet 2026
Le mode sombre retrouve l’identité visuelle « Corporate Data » : fonds bleu nuit et boutons bleu ardoise au lieu des gris neutres génériques, sans toucher aux codes couleur sémantiques (vert = gain, ambre = attention).
Modifié
Palette sombre réaccordée à la teinte bleu ardoise de la marque : fonds, cartes, boutons, bordures et couleurs de graphiques portent à nouveau la même tonalité que le mode clair. Les couleurs de sens (vert des gains, ambre des avertissements, rouge des erreurs) restent inchangées. Vérifié visuellement dans les deux modes.
Version 1.45.0
4 juillet 2026
Menu de navigation sur mobile et tablette : un bouton menu (burger) ouvre un panneau latéral avec tous les liens du site et le sélecteur de thème - jusqu’ici, ces liens disparaissaient purement et simplement sous 768 px.
Ajouté
Bouton menu (burger) dans l’en-tête sur mobile et tablette : panneau latéral avec Fonctionnalités, Comment ça marche, Contact, l’accès à ton espace (ou l’espace admin) quand tu es connecté, et le sélecteur de thème clair/sombre (lui aussi inaccessible sur mobile jusqu’ici).
Corrigé
Entre 768 et 1024 px, les liens de l’en-tête se disputaient la place avec les boutons et « Comment ça marche » s’étalait sur trois lignes : la barre de liens ne s’affiche plus qu’au-delà de 1024 px, le menu burger prenant le relais en dessous.
Version 1.44.1
4 juillet 2026
Page d’accueil reformulée pour sa vraie cible : le jargon technique (VertiPaq, CTE, query folding, handoff…) laisse place au langage courant, le terme technique restant entre parenthèses quand il aide à s’y retrouver.
Modifié
Les 8 cartes « Ce que PBI Optimizer fait » et les 4 étapes « Comment ça marche » sont réécrites en langage clair : « rupture du repli de requête » expliquée (la requête cesse d’être exécutée par la base et bascule sur ton poste), « relations à double sens repassées en sens unique », « colonnes inutilisées » plutôt que « mortes », « volumétrie » définie (tailles réelles de tables), « passage de relais à un assistant externe » plutôt que « handoff ».
La carte « Alléger la mémoire » mentionne désormais le déport à la source (le calcul confié directement à ta base de données SQL), disponible depuis la v1.40.0.
Version 1.44.0
4 juillet 2026
Accueil des nouveaux venus : à la première visite de l’espace de travail (aucun rapport encore déposé), un guide « Bienvenue ! Voici comment ça marche » présente le parcours complet en 4 étapes - déposer, choisir son objectif, valider, télécharger le rapport optimisé.
Ajouté
Mini-guide d’accueil sur l’espace de travail tant qu’aucun rapport n’est déposé : les 4 étapes du parcours en langage clair (dépôt du .pbip avec données restées sur ta machine, choix de l’objectif, validation de chaque proposition, téléchargement du .pbip optimisé et du plan d’action), plus le rappel de la conservation 7 jours en Europe. Il s’efface dès le premier rapport analysé.
Version 1.43.1
4 juillet 2026
La validation en deux temps des réécritures IA est enfin explicite : après « Proposer une réécriture (IA) », la carte affiche noir sur blanc l’étape restante (« Valider » pour que la proposition soit appliquée), et le bouton d’annulation dit clairement ce qu’il annule.
Modifié
Sous chaque proposition IA non validée, un encart « Étape restante » précise que la réécriture ne sera appliquée au .pbip généré qu’après un clic sur « Valider » (et qu’« Ignorer » l’écarte). L’encart disparaît une fois la carte validée ou la colonne déportée.
Le message de confirmation après génération d’une proposition annonce aussi l’étape restante, et le bouton « Annuler » des cartes validées devient « Annuler la validation » - fini l’ambiguïté avec un simple abandon.
Version 1.43.0
4 juillet 2026
Le panneau « Accélérer le chargement (requêtes) » devient navigable : recherche de table, filtres par état (repli cassé, réécritures sûres, SQL natif, embarquées) avec compteurs, et cartes repliées en lignes compactes dès que la liste est longue - fini le défilement interminable sur les gros modèles.
Ajouté
Barre de navigation interne dans le panneau des requêtes (affichée dès 7 tables) : champ « Chercher une table… » et filtres par état avec compteurs - Repli cassé, Réécritures sûres, SQL natif (IA), Embarquées. Un indicateur « X/N affichées » rappelle le filtre actif, et un lien « Tout réafficher » évite toute impasse.
Les cartes de tables se replient en lignes compactes (nom, nombre de lignes, badges d’état) : un clic déplie le diagnostic complet. Les listes courtes restent entièrement dépliées comme avant.
Modifié
Les liens « voir cette table » (depuis les tables lourdes du panneau Mémoire) déplient automatiquement la carte visée et réinitialisent recherche et filtres avant d’y défiler - le lien ne peut plus tomber sur une carte masquée.
Version 1.42.0
4 juillet 2026
Le déport de colonnes calculées a désormais un vrai poste de commande : la carte « Déport vers Power Query » affiche en direct l’état de toutes tes colonnes (traduites, cochées, à la source SQL, retenues par le seuil), nomme les trois chemins possibles, et chaque panneau de colonne renvoie vers elle d’un clic.
Ajouté
État des lieux en direct dans la carte « Déport vers Power Query » : nombre de colonnes candidates, traduites, cochées pour le déport (dont celles qui partiront « à la source » en SQL) et retenues par le seuil des grosses tables. Chaque case cochée dans une carte de colonne s’y reflète immédiatement - plus besoin de recouper de tête les différents panneaux.
Renvois croisés : chaque panneau de colonne a un lien « Réglages globaux du déport » qui remonte au poste de commande, et l’avertissement « Déport reporté (table trop grande) » emmène directement au réglage du seuil où forcer la table.
Modifié
Le texte d’introduction de la carte explique les trois chemins qui se combinent : le déport en masse (colonnes simples), le réglage colonne par colonne dans les cartes (avec l’option « à la source (SQL) »), et le seuil qui protège les grosses tables.
Version 1.41.0
4 juillet 2026
Parcours guidé par tes objectifs : la page d’analyse te demande d’emblée ce que tu cherches (mémoire, rafraîchissement, extraction, visuels…), affiche en permanence la prochaine action recommandée, et annonce clairement ce que le filtre masque. Plus la durée de conservation du fichier visible partout et une interface mobile fiabilisée.
Ajouté
À la première ouverture d’un rapport, une invite « Quel est ton objectif prioritaire ? » propose les objectifs directement au centre de la page (avec le nombre d’optimisations concernées) - plus besoin de repérer les petites pastilles du rail latéral. Un clic suffit, et « Peu importe, tout voir » l’écarte définitivement pour ce rapport.
Quand des objectifs sont actifs, un bandeau permanent rappelle le ciblage et indique combien d’optimisations hors objectifs sont masquées, avec un bouton « Tout afficher » - fini les optimisations qui disparaissent sans explication.
La barre de synthèse affiche désormais la « Prochaine action » recommandée : importer la volumétrie, traiter la prochaine étape (avec le nombre d’éléments restants), ou générer le .pbip quand tout est traité - un clic t’y emmène.
La durée de conservation du fichier source (7 jours) est enfin visible : échéance affichée sur chaque rapport de la liste et dans l’en-tête de la page d’analyse, avec un message clair quand le fichier a expiré (les résultats d’analyse restent conservés).
Modifié
Mobile : la barre d’actions du bas réserve désormais exactement sa hauteur (elle ne recouvre plus le contenu) et ne peut plus occuper plus de 60 % de l’écran ; le tableau des colonnes supprimables devient défilable horizontalement au lieu d’être tronqué.
Messages plus clairs à l’inscription (délai de validation indicatif, inutile de retenter avant l’email d’approbation) et à la connexion (mention de la validation en attente pour les comptes récents). L’encart « Fidélité et limites » explique les termes techniques (mémoire VertiPaq, temps DAX) en langage courant.
Version 1.40.0
4 juillet 2026
Déport « à la source » : une colonne calculée peut désormais être traduite en SQL et injectée directement dans la requête native de sa table - le calcul est fait par le serveur de base de données, plus par ton poste. Zéro coût local, délégation intégrale préservée.
Ajouté
Nouveau bouton « Proposer le déport à la source (SQL, IA) » sur les colonnes déportables dont la table lit une requête SQL native : l’IA traduit le calcul DAX en expression SQL strictement équivalente (DAX et SQL anonymisés ensemble avant envoi, identifiants restaurés au retour, toute référence inconnue rejetée). À la génération, la requête d’origine devient une sous-requête et la colonne un SELECT calculé par le serveur - prioritaire sur le déport Power Query, et non soumis au seuil de lignes (aucun coût local).
Sécurité : chaque expression SQL est re-validée avant injection (jamais d’instruction, de commentaire ou de point-virgule), un ORDER BY final est retiré quand c’est prouvé sûr, et tout cas ambigu (plusieurs requêtes SQL, requête absente) est ignoré avec une raison affichée - jamais de devinette.
Inclus
Comme tout déport, la fidélité stricte ne peut pas être garantie automatiquement (BLANK/NULL, arrondis, casse) : les points à vérifier sont affichés, compare quelques lignes après actualisation.
Version 1.39.1
4 juillet 2026
La carte « Pic mémoire à l’actualisation » signale désormais son angle mort : le recalcul transitoire des colonnes qui balaient des tables entières et des tables dérivées peut dépasser l’estimation d’un ordre de grandeur - le cas réel qui vient d’être diagnostiqué (2 Go estimés, échec à ~19 Go).
Modifié
La carte compte les colonnes calculées « full-scan » (LOOKUPVALUE, FILTER, SUMX…) et les tables calculées dérivées, et affiche un avertissement explicite : pendant la validation finale, leur recalcul matérialise des résultats non compressés, le pic réel peut dépasser l’estimation d’un ordre de grandeur, et le moteur de Desktop ne s’autorise qu’environ 60 % de la RAM du poste. Le libellé du pic précise « hors recalcul transitoire ».
Version 1.39.0
3 juillet 2026
La mémoire d’actualisation se MESURE désormais, au lieu d’être seulement estimée : colle les « Compteurs de performances » des diagnostics Power Query de Power BI Desktop, et le panneau Mémoire affiche le pic réel du moteur d’extraction, comparé à l’estimation.
Ajouté
Import des compteurs de performances (panneau Mémoire) : un mode d’emploi pas à pas (2 minutes, pendant une actualisation), un collage de la table générée par Desktop, et l’app calcule le pic réel de mémoire du moteur d’extraction - le maximum, dans le temps, de la somme des évaluations simultanées - ainsi que la plus grosse évaluation seule et le top des évaluations gourmandes. Le tout comparé au pic estimé, pour valider (ou corriger) le diagnostic.
Le format des compteurs varie selon la version et la langue de Power BI : l’import détecte les colonnes par leur nom (CSV, TSV ou point-virgule, guillemets et séparateurs de milliers tolérés) et explique précisément quoi corriger si le collage n’est pas reconnu.
Version 1.38.0
3 juillet 2026
Les colonnes calculées « Possible via une fusion » (RELATED, LOOKUPVALUE) reçoivent enfin une recette concrète : la jointure Power Query exacte (clés déduites des relations du modèle), le code M à coller, et l’éventuelle étape restante - sans IA, sans coût.
Ajouté
Recette de fusion pour les colonnes qui lisent dans une autre table : l’app déduit les clés de jointure (de la relation du modèle pour RELATED, de l’expression elle-même pour LOOKUPVALUE, y compris multi-critères) et génère les étapes Power Query prêtes à coller (fusion + développement de colonne). Quand l’expression est exactement le lookup, la colonne développée remplace directement la colonne calculée ; sinon, le calcul restant (devenu local) est affiché, traduisible par le bouton IA existant.
Quand la fusion n’est pas générée (pas de relation active, plusieurs tables sources, valeur par défaut, critère calculé), la carte explique précisément pourquoi et quoi faire.
Inclus
Un avertissement de fidélité accompagne chaque recette : une fusion et RELATED/LOOKUPVALUE peuvent différer sur les cas limites (doublons de clés, valeurs vides, casse) - compare quelques lignes après actualisation avant de supprimer la colonne DAX.
Version 1.37.0
3 juillet 2026
L’analyse repère désormais les tables calculées qui dupliquent une autre table du modèle : données stockées en double, copie reconstruite à chaque actualisation - avec la recette de conversion (requête Power Query référencée ou vue SQL).
Modifié
L’alerte « Table calculée » identifie maintenant les tables DAX dérivées d’une autre table du modèle (FILTER, SELECTCOLUMNS… sur une table existante) : elle nomme la ou les tables sources, explique le double stockage et le coût de reconstruction à chaque actualisation, passe en impact élevé, et propose la conversion en requête Power Query référencée (mêmes filtres et colonnes, calcul replié vers la source) ou en vue SQL. Les chaînes de copies (une copie de copie de copie…) deviennent visibles d’un coup d’œil.
Inclus
Les findings étant calculés à l’analyse, re-téléverse un rapport déjà analysé pour voir la détection enrichie.
Version 1.36.0
3 juillet 2026
Le panneau Mémoire estime désormais le PIC mémoire pendant l’actualisation - pas seulement la taille du modèle chargé. C’est ce pic (copie double du modèle, caches d’extraction, recalculs) qui provoque « La mémoire est insuffisante pour terminer cette opération ».
Ajouté
Carte « Pic mémoire à l’actualisation » dans le panneau Mémoire (dès que la volumétrie est importée) : copie double du modèle pendant la transaction (≈ 2×), caches d’extraction Table.Buffer chiffrés en fourchette (format non compressé, ≈ 10 à 30× la taille compressée, tables les plus lourdes listées), et recalcul de fin d’actualisation (colonnes et tables calculées). Avec les remèdes : re-générer le fichier (déport sans cache mémoire) et les réglages Power BI Desktop à ajuster (nombre d’évaluations simultanées, mémoire par évaluation).
Version 1.35.0
3 juillet 2026
Nouvelle règle « Pression mémoire à l’actualisation » : l’analyse détecte les modèles dont plusieurs tables sont intégralement mises en cache mémoire au rafraîchissement, explique le risque de saturation (« La mémoire est insuffisante… ») et donne les réglages Power BI Desktop à ajuster.
Ajouté
Règle « Pression mémoire à l’actualisation » : dès que 3 tables ou plus utilisent une mise en cache intégrale (Table.Buffer / List.Buffer), une alerte de niveau élevé liste les tables concernées (en signalant les plus larges), explique pourquoi l’actualisation locale peut échouer par manque de mémoire, et recommande les réglages Desktop (nombre d’évaluations simultanées, mémoire par évaluation) ainsi que l’alternative Table.StopFolding sans coût mémoire.
Modifié
L’alerte existante « Repli de requête cassé » mentionne désormais aussi le coût mémoire de Table.Buffer (la table entière retenue en RAM, environ 10 à 30 fois sa taille finale) et l’alternative Table.StopFolding.
Inclus
Les findings étant calculés à l’analyse, re-téléverse un rapport déjà analysé pour voir la nouvelle règle s’appliquer.
Version 1.34.3
3 juillet 2026
Le déport de colonnes ne sature plus la mémoire à l’actualisation : la mise en cache intégrale des tables (Table.Buffer) est remplacée par une frontière légère (Table.StopFolding) qui protège ta requête SQL sans rien charger en RAM. Les sources SharePoint/Excel n’ont plus aucun emballage.
Corrigé
Sur un modèle avec beaucoup de tables déportées, l’actualisation locale pouvait saturer la mémoire : chaque table déportée était intégralement chargée en RAM (Table.Buffer, format non compressé, plusieurs tables en parallèle). Le fichier généré utilise désormais Table.StopFolding : ta requête SQL s’exécute toujours telle quelle côté serveur (même protection qu’avant contre la sous-requête qui faisait pendre le rafraîchissement), mais les lignes défilent en flux, sans être retenues en mémoire. À noter : Table.StopFolding nécessite un Power BI Desktop d’août 2022 ou plus récent.
Les sources qui ne délèguent pas leurs calculs à un serveur (SharePoint, Excel, tables saisies…) n’ont plus aucun emballage : il n’y avait rien à protéger, et la mise en cache y était de la mémoire consommée pour rien.
Effet de bord corrigé au passage : le fichier généré ne déclenchait plus l’alerte « repli vers la source interrompu » de… notre propre moteur de règles.
Version 1.34.2
3 juillet 2026
Interface plus sûre et plus claire : confirmation avant de supprimer un rapport, plus jamais de page blanche en cas de problème réseau, et des messages d’erreur en français compréhensible partout.
Ajouté
La suppression d’un rapport demande désormais une confirmation explicite (avec le nom du rapport et un rappel de ce qui sera perdu) - fini la suppression définitive sur un simple clic d’icône.
Corrigé
En cas de problème (réseau coupé, session expirée, erreur serveur), la page d’analyse affichait… une page blanche. Elle affiche maintenant un message clair et un bouton « Réessayer ». Les panneaux Colonnes supprimables, Classement mémoire et Analyse des requêtes font de même - et ne prétendent plus à tort que « la rétention de 7 jours est dépassée » quand c’est le réseau qui flanche.
Les messages d’erreur techniques (codes anglais, détails de validation) sont désormais traduits en français clair avant d’être affichés, sur toutes les pages.
Sur « Mot de passe oublié », un envoi qui échouait (trop de tentatives, réseau) ne produisait aucune réaction : l’erreur s’affiche désormais. Et sur la page de connexion, une coupure réseau ne laisse plus le bouton bloqué sur « Connexion en cours… ».
Version 1.34.1
3 juillet 2026
Confidentialité renforcée : la suppression d’un compte efface immédiatement tous ses fichiers du stockage, et les identifiants de connexion (serveur, base de données, URL) sont masqués avant tout envoi de code Power Query à l’IA.
Corrigé
La suppression d’un compte (par l’utilisateur ou par refus de l’administrateur) effaçait les analyses mais laissait les fichiers .pbip dans le stockage, hors de portée de la purge automatique. Ils sont désormais tous supprimés du stockage au moment même de la suppression du compte, comme le promettent la politique de rétention et le RGPD.
Lors d’une réécriture Power Query assistée par l’IA, le code envoyé contenait les identifiants de connexion en clair (nom du serveur, de la base, URL internes, chemins de fichiers). Ils sont désormais remplacés par des jetons anonymes avant l’envoi, puis restaurés dans la réponse - l’IA ne voit jamais ton infrastructure, comme c’était déjà le cas pour les requêtes SQL.
Version 1.34.0
3 juillet 2026
Trois nouveaux garde-fous côté serveur : un budget d’analyse IA par compte, la vérification de la taille réelle des fichiers envoyés, et une protection contre les archives piégées. L’application est mieux armée contre les abus et les erreurs de manipulation.
Ajouté
Budget d’analyse IA : chaque compte dispose d’un plafond de dépense sur 24 heures glissantes (5 $ par défaut, ajustable par l’administrateur). Au-delà, les fonctions IA (réécriture, cohérence, optimisation SQL, déport) répondent par un message clair et se libèrent automatiquement au fil des heures.
Vérification de la taille réelle des fichiers : la limite de 500 Mo est désormais contrôlée sur le fichier réellement reçu par le stockage, plus seulement sur la taille annoncée par le navigateur. Un fichier trop lourd est refusé avant tout traitement et retiré du stockage, avec un message explicite.
Protection contre les archives piégées (« zip bomb ») : une archive qui annonce un contenu décompressé démesuré (plus de 2 Gio) est refusée avant toute décompression, à l’analyse comme à la génération.
Version 1.33.3
3 juillet 2026
La couverture de tests automatisés s’étend aux autres modules sensibles : le moteur de règles, la détection des colonnes mortes, la classification pour le déport Power Query et les alertes de cohérence des formules. 66 tests au total verrouillent le cœur de l’analyse.
Ajouté
40 nouveaux tests automatisés sur les modules qui décident du contenu de tes analyses : le moteur de règles (relations bidirectionnelles, clés de relation en texte y compris composites calculées, tables date/heure automatiques, intelligence temporelle sans table de dates, divisions sans DIVIDE), la détection des colonnes supprimables (la « cascade » qui protège les colonnes de tri, de hiérarchie et les dépendances conservées), la classification déport Power Query (noms de tables avec espaces, casse ou apostrophes - la famille de bugs corrigée deux fois par le passé), et les alertes de cohérence des formules (comparaisons toujours vraies, branches identiques, division par zéro).
Version 1.33.2
3 juillet 2026
Mise en place de tests automatisés : les corrections de fiabilité de la v1.33.1 sont désormais re-vérifiées à chaque évolution du code, pour qu’elles ne puissent plus se défaire discrètement.
Ajouté
Une suite de 26 tests automatisés (vitest) couvre le moteur d’optimisation des requêtes et la génération des fichiers : chaque cas piège corrigé en v1.33.1 est rejoué automatiquement, et le contrôle d’intégrité post-génération est vérifié dans les deux sens (il accepte les suppressions volontaires, il bloque les disparitions imprévues et les fichiers illisibles).
Version 1.33.1
3 juillet 2026
Fiabilité du fichier généré : quatre corrections qui empêchaient, dans des cas rares, d’altérer tes données ou de produire un fichier qui ne s’ouvre plus - et un nouveau contrôle d’intégrité automatique qui relit chaque fichier généré avant de te le livrer.
Corrigé
L’optimisation « ORDER BY de tri retiré » pouvait tronquer une requête SQL si les mots « order by » apparaissaient dans un commentaire : tout ce qui suivait disparaissait de la requête. L’analyse distingue désormais le vrai code des commentaires et des textes entre guillemets.
L’optimisation « Étape sans effet retirée » supprimait un vrai filtre quand il commençait par « each true and… » (des lignes en plus étaient alors chargées). Seul un filtre littéralement « toujours vrai », sans aucune condition, est maintenant retiré.
La fusion de deux étapes de typage n’est plus proposée quand une même colonne est convertie dans les deux (par exemple date, puis texte, puis nombre) : appliquées d’un coup, les conversions ne donnaient pas le même résultat qu’à la suite.
Lors du déport de colonnes calculées, un commentaire « // » à la fin de la requête d’origine pouvait avaler la ponctuation ajoutée par l’outil et produire un fichier impossible à ouvrir dans Power BI.
Ajouté
Contrôle d’intégrité post-génération : chaque fichier généré est relu et comparé au modèle d’origine (tables, colonnes, mesures, relations). S’il manque quoi que ce soit d’imprévu, la génération est annulée avec un message clair - jamais de fichier abîmé livré comme « appliqué ».
Version 1.33.0
2 juillet 2026
L’optimisation « Clé de relation en texte » (étape Restructurer) reconnaît enfin les clés composites calculées (COMBINEVALUES…) - les mêmes clés lourdes que la carte « Clés texte lourdes ». Une entrée par colonne-clé, classée par impact réel.
Corrigé
« Clé de relation en texte » (Restructurer) ne repérait que les colonnes de type texte déclaré, et ratait donc les clés composites calculées (COMBINEVALUES, concaténations…) qui n’ont pas de type stocké - alors qu’elles sont souvent les plus lourdes. Elle utilise désormais la même détection que la carte « Clés texte lourdes ». Une entrée est créée par colonne-clé texte (au lieu d’une par relation), pour coller à la carte et être classée par impact mémoire réel.
Inclus
Cette amélioration s’applique aux rapports analysés à partir de maintenant : pour la voir sur un rapport déjà analysé, re-téléverse-le (la carte « Clés texte lourdes », elle, est déjà à jour en direct).
Version 1.32.7
2 juillet 2026
Après génération du .pbip, l’encart « À retirer de tes requêtes source » peut enfin être fermé (bouton ✕) - plus besoin de recharger la page et de perdre tes réglages. Et le plan d’action téléchargeable inclut désormais ces colonnes à retirer, pour un plan cohérent avec le fichier généré.
Corrigé
L’encart « À retirer de tes requêtes source » qui apparaît après génération n’avait pas de bouton pour le fermer : il fallait recharger la page (F5) et perdre tous les réglages faits avant la génération. Il a maintenant un bouton ✕ (et sa liste, si longue, défile au lieu de tout pousser).
Modifié
Le « plan d’action à réaliser post génération » téléchargeable inclut désormais une dernière section « Retirer des requêtes source les colonnes supprimées (avant actualisation) » : un seul document cohérent avec le .pbip généré, à dérouler avant de lancer l’actualisation des données. Le bouton de téléchargement reste disponible même quand il n’y a que ce nettoyage à faire.
Version 1.32.6
2 juillet 2026
Les grosses clés composites en texte (ex. « Clé BOM » construite avec COMBINEVALUES) sont enfin détectées et proposées au remplacement par une clé entière. Et une clé référencée par d’autres colonnes n’est plus masquée : elle est proposée avec la liste des colonnes à mettre à jour.
Corrigé
« Clés texte lourdes » : les colonnes calculées composites construites avec COMBINEVALUES (ou CONCATENATE, FORMAT, LEFT/RIGHT…) étaient considérées non-texte (car une colonne calculée n’a pas de type déclaré) et donc jamais proposées, alors qu’elles sont souvent les plus lourdes en mémoire. Elles sont maintenant reconnues comme du texte.
Modifié
« Clés texte lourdes » : une clé n’est désormais exclue que si elle est affichée dans un visuel/filtre ou utilisée par une mesure (là où un entier opaque casserait quelque chose). Une clé référencée seulement par d’autres colonnes reste proposée, avec la mention « aussi référencée par… » pour te rappeler de mettre ces colonnes à jour.
Version 1.32.5
2 juillet 2026
Cohérence d’affichage : une colonne bloquée pour le déport n’affiche plus l’étiquette verte « Déportable en Power Query » qui contredisait l’avertissement - elle indique « Non déportable seule ».
Corrigé
Carte « Déporter en Power Query » : quand une colonne est bloquée (elle dépend d’une colonne calculée restant en DAX), l’étiquette du haut affichait encore « Déportable en Power Query » (verte), en contradiction avec l’avertissement juste en dessous. Elle affiche désormais « Non déportable seule » et la phrase « traduisible en Power Query » (trompeuse) est masquée.
Version 1.32.4
2 juillet 2026
Correction : une colonne calculée qui dépend d’une autre colonne calculée restée en DAX n’échappe plus à l’avertissement de déport à cause d’une espace en trop ou d’une différence de casse dans le nom.
Corrigé
Déport Power Query : la détection de dépendance vers une colonne calculée restant en DAX comparait les noms de façon exacte, donc un nom avec une espace superflue (ex. « Clé L2-L3 » à double espace) ou une casse différente passait au travers - la colonne était encore proposée au déport. La comparaison est désormais insensible aux espaces superflus et à la casse (comme pour les colonnes supprimables).
Version 1.32.3
2 juillet 2026
Le recensement des « Clés texte lourdes » est resserré : une colonne n’est retenue comme clé que si elle sert dans une relation ET n’est utilisée nulle part ailleurs (aucune autre colonne, mesure ou visuel). Ce sont les vraies candidates au remplacement par une clé entière.
Modifié
« Clés texte lourdes » : ne liste plus que les colonnes texte à forte cardinalité qui sont utilisées dans une relation ET référencées par rien d’autre (ni une autre colonne, ni une mesure, ni un visuel). Une clé aussi affichée ou réutilisée ailleurs ne peut pas être simplement remplacée par un entier opaque : elle est donc exclue du recensement.
Version 1.32.2
2 juillet 2026
La suppression des colonnes supprimables est maintenant appliquée par défaut à la génération : la case « Supprimer les X sélectionnés » du bandeau du bas a été retirée. Tu ajustes ce qui est supprimé via les cases du panneau « Colonnes supprimables ».
Modifié
Bandeau du bas : la case « Supprimer les X sélectionnés » est retirée. Les colonnes cochées dans « Colonnes supprimables » sont désormais retirées automatiquement à la génération du .pbip. Pour en conserver, il suffit de les décocher dans ce panneau.
Le bouton « Générer le .pbip » du bandeau s’active aussi quand il n’y a que des suppressions à appliquer (avant, il fallait une autre optimisation).
Version 1.32.1
1 juillet 2026
Une colonne calculée qui dépend d’une autre colonne calculée restant en DAX n’est plus proposée au déport Power Query comme si de rien n’était : l’option est désactivée avec une explication claire.
Corrigé
Déport Power Query : quand une colonne calculée s’appuie sur une autre colonne calculée qui reste en DAX (non déportable), l’option « Déporter automatiquement » est désormais désactivée avec un avertissement (« déport impossible seule : dépend de … »). Le fichier généré était déjà protégé (cette colonne était écartée à la génération) ; c’est la proposition à l’écran qui était trompeuse.
Version 1.32.0
1 juillet 2026
L’ordre des optimisations proposées suit maintenant tes objectifs : celles qui servent ton objectif n°1 remontent en tête (puis le n°2, etc.), et leur importance tient compte de la mémoire réelle mesurée, pas seulement de la cardinalité.
Modifié
Le classement des optimisations est désormais piloté par tes objectifs déclarés et leur ordre de priorité : à l’intérieur de chaque étape, les optimisations qui servent ton objectif n°1 passent devant celles du n°2, et ainsi de suite. Sans objectif sélectionné, le classement par impact réel est inchangé.
L’impact réel d’une optimisation utilise la mémoire réelle mesurée (octets) quand elle est disponible, en plus de la cardinalité et du nombre de lignes - une colonne dont on connaît le vrai poids est priorisée sur ce poids.
Version 1.31.0
1 juillet 2026
Nouvelle recommandation « Clés texte lourdes » : à partir de tes chiffres importés, l’app repère les colonnes texte à forte cardinalité (les « Clé … », concaténations, etc.) qui pèsent le plus en mémoire et propose de les remplacer par des clés entières de substitution.
Ajouté
Carte « Clés texte lourdes » (en tête des mesures, à droite) : détecte les colonnes texte à forte cardinalité d’après la volumétrie/mémoire importée - quel que soit leur nom - et recommande de les remplacer par une clé entière de substitution (le poste mémoire n°1). Chaque clé est étiquetée « relation », « composite » (concaténation) ou « texte », avec son poids réel.
Modifié
La détection des colonnes « identifiant » reconnaît maintenant « clé/cle/clef » (et pas seulement les mots anglais « id/key/code »), en mot entier, en préfixe comme en suffixe.
Version 1.30.0
1 juillet 2026
Le panneau de droite est réorganisé : deux cartes claires « Tables » (lignes + mémoire) et « Colonnes » (cardinalité + mémoire), juste sous « Contexte du modèle ». Et le badge « fait » de l’étape Mesurer est cohérent avec les autres étapes.
Modifié
Panneau de droite regroupé : une carte « Tables » (nombre de lignes + mémoire par table) et une carte « Colonnes » (cardinalité + mémoire par colonne), placées juste sous « Contexte du modèle ». Les requêtes à jouer dans Power BI (volumétrie, mémoire) descendent en dessous, sous les résultats qu’elles alimentent.
Nouveau : la mémoire est aussi agrégée par table (somme des colonnes), en plus du détail par colonne.
Corrigé
Le badge de statut de l’étape « Mesurer » (« fait » / « à faire ») utilisait un style différent des autres étapes. Il est désormais uniforme (même pastille verte que « Nettoyer », « Alléger », etc.).
Version 1.29.2
1 juillet 2026
La requête de mesure de la mémoire réelle est corrigée : elle s’exécute désormais sans erreur dans Power BI et renvoie bien la taille de chaque colonne.
Corrigé
La requête « Mémoire réelle » échouait dans Power BI (« colonne 'DictSize' introuvable »). Elle a été réécrite de façon plus robuste : elle fait correspondre les tailles de dictionnaire et de données par identifiant interne de colonne (au lieu d’une jointure fragile), validée sur un vrai modèle.
Version 1.29.1
1 juillet 2026
La section « Mémoire réelle (VertiPaq) » s’affiche désormais sur tous les rapports, même ceux analysés avant la collecte de volumétrie - la requête à jouer dans Power BI est toujours accessible.
Corrigé
La section « Mémoire réelle » (et sa requête DAX à copier) était masquée sur les rapports analysés avant l’ajout de la collecte de volumétrie. Elle est maintenant toujours visible dans le panneau de droite « Volumétrie & cardinalité », car la mesure de mémoire ne dépend pas de l’analyse.
Version 1.29.0
1 juillet 2026
Tu peux maintenant mesurer la mémoire VertiPaq RÉELLE de chaque colonne (plus seulement l’estimer) : une seule requête à jouer dans Power BI, et le classement « Impact mémoire » ainsi que le gain des colonnes supprimables passent aux octets exacts.
Ajouté
Section « Mémoire réelle (VertiPaq) » dans le panneau de volumétrie : une requête unique (valable pour tous les modèles) à jouer dans la vue requête DAX de Power BI. Elle lit les tailles internes du moteur et ne renvoie que des tailles, jamais une donnée. Colle le résultat, importe : le poids réel de chaque colonne est enregistré.
Le classement « Impact mémoire » et le gain « libère X » des colonnes supprimables utilisent les octets réels dès qu’ils sont mesurés (et affichent « mesuré » au lieu de « estimé » / « ≈ »). Les colonnes sans mesure gardent l’estimation.
Inclus
Nécessite une version récente de Power BI Desktop (fonctions DAX INFO.*). La mesure est indépendante de la volumétrie : tu peux importer l’une, l’autre, ou les deux.
Version 1.28.0
1 juillet 2026
La volumétrie que tu importes sert maintenant à estimer quelles colonnes pèsent le plus en mémoire : un nouveau classement « Impact mémoire » et un chiffrage « libère ≈ X » sur les colonnes supprimables, pour cibler d’abord les vraies causes.
Ajouté
Nouveau panneau « Impact mémoire (estimé) » : classe les colonnes par poids mémoire VertiPaq estimé (à partir de la cardinalité, du volume et du type déjà collectés - aucune nouvelle manipulation). Les colonnes lourdes ET inutilisées sont signalées « morte » pour repérer d’un coup d’œil le meilleur gain.
Le panneau « Colonnes supprimables » chiffre désormais la mémoire libérée : une colonne « Mémoire est. » par élément, un total « libère ≈ X » en tête, et la colonne est ajoutée à l’export CSV.
Inclus
L’estimation est un ordre de grandeur (proxy) : la mesure exacte des octets réels VertiPaq arrivera avec la capture directe depuis le moteur.
Version 1.27.0
1 juillet 2026
Une colonne cochée pour déport mais dont la table dépasse le seuil n’affiche plus « Déportée » à tort : elle indique « Déport reporté (table trop grande) » et reste « à traiter » tant que tu ne forces pas la table.
Corrigé
Déport et seuil de taille : une colonne calculée cochée pour déport dont la table dépasse le seuil (et non forcée) était affichée « Déportée vers Power Query » et comptée comme traitée, alors qu’à la génération elle reste en DAX (garde-fou anti-ralentissement du refresh). Elle affiche désormais « Déport reporté (table trop grande) » avec un rappel pour forcer la table dans « Seuil de déport », reste dans les « à traiter » (bandeau + barre du bas), et n’est plus comptée parmi les déports appliqués. Cohérent avec ce qui est réellement écrit dans le .pbip.
Version 1.26.3
1 juillet 2026
Correction importante : une colonne dont le nom a une espace en trop (ex. « Niveau integration ») n’est plus supprimée à tort - elle était pourtant utilisée par des colonnes calculées d’autres tables, ce qui cassait le rapport après génération.
Corrigé
Détection des colonnes supprimables : une colonne dont le nom contient une espace en trop (début/fin) était considérée à tort comme inutilisée, même quand une colonne calculée d’une AUTRE table la référençait (via LOOKUPVALUE/RELATED). Elle était alors supprimée, et toutes les colonnes calculées qui en dépendaient tombaient en erreur en cascade (colonne introuvable, puis comparaisons « Integer vs Text »). La comparaison des noms est désormais insensible aux espaces superflus (comme l’est déjà l’extraction des références). Si tu avais généré un fichier touché : régénère-le, la colonne sera conservée.
Version 1.26.2
1 juillet 2026
Changements de type : tu peux désormais dévalider colonne par colonne. Une case sur chaque carte permet d’exclure une colonne du changement global, sans l’ignorer.
Ajouté
Dévalidation colonne par colonne des changements de type : quand la case globale « Changements de type » est cochée, chaque colonne date-heure/flottante affiche une case « appliquer à cette colonne ». Décoche-la pour exclure cette colonne précise (elle reste en l’état et repasse en « à valider »), sans toucher aux autres. L’exclusion est bien prise en compte à la génération.
Version 1.26.1
1 juillet 2026
Cocher « Changements de type » (date-heure → date, flottant → décimal) marque désormais chaque colonne concernée comme traitée : sa carte passe à « Type corrigé » et elle sort des « à valider ».
Corrigé
Case « Changements de type » : c’est une action globale. La cocher considère maintenant TOUTES les colonnes date-heure/flottantes concernées (non ignorées) comme traitées - leur carte affiche « Type corrigé », elles ne comptent plus dans les « à valider » (bandeau et barre du bas), et le changement s’applique à la génération sans avoir à valider chaque colonne une à une. Décoche une colonne (Ignorer) pour l’exclure.
Version 1.26.0
1 juillet 2026
Une colonne calculée marquée pour déport n’apparaît plus « à valider » : sa carte affiche « Déportée » et elle compte comme traitée partout. Et les décoches des colonnes supprimables se répercutent en direct.
Corrigé
Colonnes calculées déportées : une colonne marquée pour le déport en Power Query (déport en masse, colonne par colonne, ou grosse table forcée) est désormais traitée comme VALIDÉE partout - sa carte affiche « Déportée vers Power Query » (plus le bouton « Valider »), et elle ne compte plus dans les « à traiter » du bandeau ni de la barre du bas.
Nettoyage interne : suppression d’un écran d’optimisation devenu inutilisé (parcours par objectif remplacé par le bandeau).
Modifié
Synchronisation de la sélection des colonnes supprimables : quand tu décoches une colonne dans le panneau « Colonnes supprimables », les compteurs de l’étape « Nettoyer » (bandeau gauche, au format X/Y) et le résumé de la barre du bas se mettent à jour immédiatement. La génération depuis la barre ne retire désormais que les colonnes réellement cochées (au lieu de tout supprimer).
Version 1.25.1
1 juillet 2026
Dans le bandeau gauche, chaque type d’optimisation (et chaque étape) affiche le nombre traité ou validé vs proposé, au format 70/80.
Modifié
Bandeau gauche : les compteurs passent au format « traité-ou-validé / proposé » (ex. 70/80). Chaque type d’optimisation dans le zoom d’une étape, et chaque étape elle-même, indique désormais combien sont traités/validés sur le total proposé (pastille verte quand tout est traité).
Version 1.25.0
1 juillet 2026
Page d’optimisation simplifiée : la barre du bas devient le poste de commande unique (compteurs traité/proposé homogènes, options, génération + téléchargement du plan d’action). Le déport rejoint l’étape « Alléger », et trois cartes redondantes sont retirées.
Modifié
Barre du bas retravaillée : format homogène (même taille de police) et, pour chaque optimisation, le nombre traité/validé vs proposé (Optimisations X/Y, Suppressions, Déports Power Query, Requêtes embarquées). Les options de génération (supprimer les supprimables, changements de type, optimiser les requêtes) y sont rapatriées, à côté du bouton « Générer le .pbip ».
Les cartes de déport (« Déport vers Power Query », « Tout déporter », « Seuil de déport ») sont maintenant en tête de l’étape « Alléger », là où on traite les colonnes calculées - au lieu d’être isolées en haut de page.
Cartes retirées : « Générer le rapport optimisé » au milieu de la page (la génération se fait désormais depuis la barre du bas).
Carte « Ton plan d’action » (remplacée par le bouton de téléchargement dans la barre du bas).
Carte « Tables lourdes : optimiser la requête puis déporter (combo) » (redondante avec le déport intégré à « Alléger » et le panneau des requêtes).
Ajouté
Bouton « Télécharger le plan d’action à réaliser post génération du .pbip » dans la barre du bas, à droite de « Générer le .pbip » (remplace la carte « Ton plan d’action »).
Version 1.24.0
1 juillet 2026
Zoom par étape dans le bandeau gauche : déplie une étape pour voir et filtrer ses types d’optimisation (utile quand une étape en contient des centaines). Plus deux résumés : suppressions dans le bandeau, et optimisations traitées dans la barre du bas.
Ajouté
Zoom par étape dans le bandeau gauche : chaque étape se déplie (chevron) pour lister les TYPES d’optimisation qu’elle contient (ex. « Colonne calculée matérialisée », « Colonne date-heure à granularité fine »…) avec leur nombre. Un clic sur un type filtre le panneau central sur ce seul type et t’y amène - indispensable quand une étape contient des centaines d’optimisations (ex. « Alléger »). Un bandeau « Filtré sur : … / Tout afficher » rappelle le filtre actif.
Résumé des suppressions en bas du bandeau gauche : nombre de colonnes importées, de colonnes calculées (et de mesures) à retirer, d’un coup d’œil.
Résumé des optimisations traitées dans la barre du bas : « Tu traites N optimisations validées · M à supprimer », pour garder une vue d’ensemble de ce que tu vas générer.
Corrigé
Statut de l’étape « Nettoyer » : les éléments supprimables (colonnes mortes/inutilisées, mesures inutilisées) sont gérés dans leur propre panneau et n’étaient donc pas comptés dans la progression de l’étape - qui affichait « rien à faire » même quand tout était coché. Ils sont désormais intégrés à l’avancement de « Nettoyer » : cochés par défaut (donc validés pour suppression), l’étape passe à « fait » dans la carte centrale et affiche la pastille verte dans le bandeau gauche, comme l’étape « Mesurer ».
Version 1.23.0
1 juillet 2026
Nouveau bandeau vertical à gauche : tes objectifs en filtres + les grandes étapes d’optimisation avec leur avancement, cliquables pour aller droit à leurs actions.
Ajouté
Bandeau de navigation vertical à gauche du rapport. En haut, tes objectifs (Réduire la mémoire, Accélérer le refresh…) sous forme de puces à activer : ils filtrent les étapes sur ce qui sert vraiment ton but. En dessous, les 6 grandes étapes (Mesurer, Nettoyer, Alléger, Restructurer, Affiner, Peaufiner) avec, pour chacune, le nombre d’actions restantes et une barre de progression globale. Un clic sur une étape déroule ses actions dans le panneau central et t’y amène directement - fini de chercher où se trouve telle optimisation (par ex. les changements de format).
Modifié
Le parcours central est désormais unifié autour des étapes, piloté par le bandeau gauche : choisir des objectifs filtre les étapes au lieu de réorganiser toute la page. Le sélecteur d’objectifs en pleine largeur et la barre de raccourcis en haut sont remplacés par le bandeau, plus compact et toujours visible.
Version 1.22.15
1 juillet 2026
Correction : le changement de type d’une colonne (datetime→date, montant→décimal) vise désormais la bonne colonne même si son nom (ou celui de sa table) contient des crochets.
Corrigé
Corrections de type (datetime→date, montant flottant→décimal) : l’identification de la colonne cible était fragile quand le nom de la colonne ou de sa table contenait des crochets (même faille que celle corrigée en 1.22.14 pour les suppressions). La cible est maintenant résolue contre le modèle en testant chaque découpe possible et en gardant celle qui désigne une vraie colonne. Aucun impact si tes colonnes de dates/montants ont des noms simples.
Version 1.22.14
1 juillet 2026
Correction : les éléments validés pour suppression dont le nom contient une apostrophe, un accent ou des crochets sont désormais bien retirés du fichier généré (avant, ils étaient silencieusement oubliés).
Corrigé
Suppression des colonnes/mesures : les noms « spéciaux » sont désormais correctement retrouvés et retirés du modèle. Trois cas échouaient en silence (l’élément restait dans le fichier alors qu’il était coché) : une apostrophe dans le nom (le format TMDL la double, ex. « Saison de création d’échantillon »), un nom de colonne contenant des crochets (ex. « SKU PF colorées et tailles[ColorwayFullName] »), un nom de table contenant des crochets (ex. « [Façonniers] … »), ainsi qu’un espace final significatif. Vérifié sur un vrai rapport : 173 éléments validés, 173 réellement supprimés (contre ~136 auparavant).
Version 1.22.13
30 juin 2026
Industrialisation du « apprendre de chaque bug » : un registre unique des pièges de traduction DAX→Power Query, qui génère les consignes IA et documente les garde-fous.
Modifié
Fiabilité de la traduction DAX→Power Query industrialisée : tous les pièges rencontrés (fonctions inventées, concaténations/clés, dates, types…) sont désormais centralisés dans un registre unique où chaque entrée paire sa PRÉVENTION (règle injectée dans le prompt IA) et son FILET DE SÉCURITÉ (garde-fou déterministe à la génération). Le prompt est généré depuis ce registre, avec un mode d’emploi pour ajouter un nouveau cas en une fois. Aucun changement de comportement pour cette version - c’est une base pour durcir l’outil plus vite à chaque bug futur.
Version 1.22.12
30 juin 2026
Le prompt de traduction DAX→Power Query apprend du dernier bug : il génère désormais des concaténations/clés null-safe et type-safe d’emblée.
Modifié
Consigne de traduction IA renforcée sur les concaténations et les clés : DAX (`&`, COMBINEVALUES) convertit chaque membre en texte et traite un BLANK comme chaîne vide, alors qu’en Power Query un membre null rend toute la concaténation null (clé de relation vide refusée) et un membre numérique lève une erreur de type. L’IA doit désormais envelopper chaque membre : (Text.From([A]) ?? "") & "-" & (Text.From([B]) ?? ""). Les traductions futures sont donc correctes dès la source ; le garde-fou de génération (1.22.11) reste le filet de sécurité.
Version 1.22.11
30 juin 2026
Colonnes-clés déportées (concaténations) : null-safe et type-safe, comme DAX, pour éviter les « valeurs vides » interdites sur une clé de relation.
Corrigé
Clé de relation déportée vide à l’actualisation (« contient des valeurs vides, non autorisé… »). Une clé DAX comme COMBINEVALUES("-", [A], [B]) ou [A] & "-" & [B] était traduite naïvement en [A] & "-" & [B] : en Power Query, si [A] ou [B] est vide (null), toute la concaténation devient null → clé vide refusée par Power BI. Désormais chaque colonne concaténée est rendue null-safe et type-safe automatiquement : (Text.From([A]) ?? "") & "-" & (Text.From([B]) ?? ""), exactement comme DAX (conversion en texte, BLANK traité comme chaîne vide). Corrige d’un coup les ~27 colonnes-clés concernées du rapport.
Version 1.22.10
30 juin 2026
Déport ET embarquement combinés sur une même table (la requête optimisée devient la base, les colonnes déportées se greffent dessus) + inférence de type corrigée pour les colonnes texte.
Corrigé
Déport + embarquement sur la même table : ils se COMBINENT désormais au lieu de s’exclure (la 1.22.9 les rendait exclusifs à tort). L’embarquement est appliqué d’abord (ta requête optimisée devient la source), puis le déport greffe ses colonnes calculées par-dessus, via Table.AddColumn. C’est tout l’intérêt : optimiser la requête pour dégager du temps d’extraction ET y loger les colonnes déportées.
Inférence de type des colonnes déportées corrigée : une colonne qui produit du TEXTE (concaténation « & », littéral, Text.*) mais qui traînait un format d’affichage numérique (formatString 0) était typée en nombre → erreur « comparaison Integer vs Text » à l’actualisation. Le corps Power Query prime maintenant sur le format quand il est clairement du texte.
Version 1.22.9
30 juin 2026
Déport et embarquement sur la même table : ils sont désormais exclusifs (l’embarquement gagne), ce qui évite des colonnes « introuvables » à l’actualisation.
Corrigé
Colonnes « introuvables » à l’actualisation quand une table avait À LA FOIS un embarquement de requête ET des colonnes calculées déportées : l’embarquement remplace toute la requête Power Query et supprimait les colonnes ajoutées par le déport, laissant les colonnes converties pointer dans le vide. Désormais, sur une table embarquée, le déport est ignoré (colonnes laissées en DAX) et signalé dans les « ignorés ». L’embarquement gagne ; les colonnes calculées continuent de se calculer à partir de ta requête réécrite.
Version 1.22.8
30 juin 2026
Le prompt de traduction DAX→Power Query interdit désormais explicitement les fonctions M inventées (réduit les hallucinations à la source).
Modifié
La traduction IA d’une colonne calculée en Power Query reçoit une consigne renforcée : n’utiliser QUE de vraies fonctions Power Query, ne jamais inventer un nom, avec les pièges vérifiés (Number.IntegerPart / Number.Truncate n’existent pas → utiliser Number.RoundDown pour DAX INT) et des exemples de fonctions fiables. Complète le garde-fou liste blanche de la 1.22.7 : moins d’hallucinations dès la traduction, donc plus de colonnes déportables.
Version 1.22.7
30 juin 2026
Fin du « whack-a-mole » des fonctions Power Query inventées par l’IA : liste blanche de vraies fonctions M + correction de Number.Truncate.
Corrigé
Encore une fonction Power Query inexistante inventée par l’IA dans une colonne déportée (Number.Truncate, à nouveau pour un DAX INT()) : corrigée en Number.RoundDown comme Number.IntegerPart.
Ajouté
Garde-fou anti-hallucination définitif : avant d’embarquer une colonne déportée, l’app vérifie que sa traduction n’utilise QUE de vraies fonctions Power Query (liste blanche). Toute colonne dont la traduction appelle une fonction non reconnue est laissée en DAX (déport ignoré et signalé) au lieu de casser l’actualisation. Au pire on déporte une colonne de moins ; l’actualisation ne casse plus jamais à cause d’une fonction M inventée.
Version 1.22.6
30 juin 2026
Gestion des requêtes embarquées : le compteur du bandeau est cliquable pour voir la liste, retirer une requête, ou tout réinitialiser.
Ajouté
Dans le bandeau « Prêt à générer », le nombre de « requêtes embarquées » est désormais cliquable : il déplie la liste de toutes les requêtes embarquées (y compris d’anciens essais dont la carte de table n’est plus visible), avec un bouton « Retirer » par requête et un « Tout réinitialiser ». Tu gardes ainsi uniquement les requêtes que tu as confirmées, et tu peux purger les résidus avant de générer.
Version 1.22.5
30 juin 2026
Correction d’une fonction Power Query inexistante (Number.IntegerPart) inventée par l’IA dans une colonne déportée, qui bloquait l’actualisation des données.
Corrigé
Actualisation des données bloquée (« Le nom Number.IntegerPart n’a pas été reconnu ») : la traduction IA d’une colonne calculée déportée (un DAX INT()) utilisait une fonction Power Query qui n’existe pas. Comme la table concernée est référencée par beaucoup d’autres, l’erreur se propageait à des dizaines de requêtes. Les noms de fonctions M inventés par l’IA sont désormais corrigés automatiquement (Number.IntegerPart devient Number.RoundDown, l’équivalent exact de DAX INT), à la traduction comme à la génération du fichier.
Version 1.22.4
30 juin 2026
VRAIE correction de l’erreur « Jeton ';' attendu » à l’ouverture du .pbip (propriété queryGroup de partition) + garde-fou d’embarquement de nouveau minimal.
Corrigé
Cause racine enfin trouvée de l’erreur « Erreur du moteur M : Jeton ';' attendu » : quand une table avait une propriété de partition non reconnue (par ex. queryGroup), le nettoyage de la requête la repliait dans le code Power Query, et l’embarquement réinjectait alors un second « source = » et la propriété au milieu de la requête - rendant la partition invalide. Le nettoyage ignore désormais toute propriété de partition (queryGroup, dataView, …) avant la requête. L’embarquement d’une requête réécrite fonctionne maintenant, y compris sur les tables rangées dans un groupe de requêtes.
Modifié
Garde-fou d’embarquement de nouveau minimal : il ne bloque QUE le cas où l’on colle par erreur le script de validation. Le blocage des requêtes « multi-instructions » (DECLARE, plusieurs « ; ») introduit en 1.22.3 était basé sur un mauvais diagnostic - Power BI accepte parfaitement un DECLARE dans une requête source. Tu peux donc embarquer ta requête telle quelle, sans la réécrire en une seule instruction.
Version 1.22.3
30 juin 2026
Embarquement : on bloque désormais les requêtes à plusieurs instructions (DECLARE, lots avec tables temporaires), que Power BI ne sait pas charger comme requête source.
Corrigé
Vraie cause de l’erreur « Jeton ';' attendu » à l’ouverture du .pbip : une requête source Power BI doit être UNE seule instruction. Pour détecter les colonnes, Power BI enrobe ta requête dans une sous-requête (SELECT * FROM (ta requête) AS _), ce qui est impossible avec un DECLARE ou plusieurs instructions séparées par « ; ». L’embarquement détecte et refuse maintenant ces requêtes multi-instructions, avec un message qui explique comment réécrire en une seule instruction (remplacer les variables @… par leur expression, ex. @CurrentDate par CAST(GETDATE() AS DATE)). Un point-virgule final isolé reste accepté (il est retiré automatiquement).
Modifié
Le brief « Confier la réécriture à un agent sans limite » inclut désormais une contrainte impérative : produire UNE seule instruction SQL (pas de DECLARE/variables, pas de tables temporaires #, pas de « ; » multiples), pour que la requête réécrite soit directement embarquable dans le .pbip.
Version 1.22.2
30 juin 2026
Correction d’un bug qui empêchait l’ouverture du .pbip quand on embarquait une requête réécrite sur plusieurs lignes.
Corrigé
Embarquement d’une requête réécrite : les requêtes écrites sur plusieurs lignes (avec sauts de ligne ou lignes vides, par ex. un DECLARE suivi d’un SELECT, ou une CROSS APPLY mise en forme) cassaient le fichier généré, qui refusait alors de s’ouvrir dans Power BI (« Erreur du moteur M : Jeton ';' attendu »). La requête est désormais réinjectée sur une seule ligne technique (les sauts de ligne sont encodés au format Power Query), ce qui produit exactement le même SQL côté serveur mais un fichier toujours valide. Réimporte ta requête et régénère le rapport.
Version 1.22.1
29 juin 2026
Garde-fou d’embarquement assoupli : il ne bloque plus que si tu colles par erreur le script de validation.
Modifié
Garde-fou d’embarquement moins restrictif : il acceptait mal certaines requêtes réécrites en externe (multi-instructions, DECLARE, etc.). Désormais il ne bloque QUE le cas évident où l’on colle par erreur le script de validation lui-même (reconnu à son en-tête « Script de validation » dans les premières lignes). Toutes les autres réécritures sont acceptées - sous ta responsabilité, après validation par le script.
Version 1.22.0
29 juin 2026
Page plus large (les nombres s’affichent en entier) et carte « Rapports liés » déplacée dans le bandeau latéral de préparation des données.
Modifié
Mise en page élargie : la page d’un rapport utilise mieux la largeur de l’écran (jusqu’à 1600 px au lieu de ~1150) et le bandeau latéral passe de 360 à 420 px - les nombres de volumétrie et de cardinalité s’affichent désormais en entier, sans être tronqués.
La carte d’ajout des rapports liés / paginés (une étape de préparation des données à faire avant que pbi-optimizer livre ses meilleures propositions) rejoint le bandeau latéral, aux côtés de la volumétrie et du contexte du modèle - elle est ainsi plus facile à trouver, au lieu d’être enfouie dans le parcours.
Version 1.21.1
29 juin 2026
Le bandeau du bas reflète enfin l’effet du forçage des grosses tables sur le nombre de déports.
Corrigé
Compteur de déports du bandeau : il comptait les déports marqués sans tenir compte du garde-fou de taille. Désormais il reflète ce qui sera RÉELLEMENT appliqué - une grosse table au-dessus du seuil et non forcée (donc qui serait laissée en DAX) n’est plus comptée. Conséquence : cocher « Déporter quand même » sur une grosse table fait maintenant monter le compteur, et le bandeau affiche en plus « N grosses tables forcées ».
Version 1.21.0
29 juin 2026
Tables triées par volume (les plus grosses d’abord) et lien direct du combo vers la bonne carte de table.
Modifié
Tri par impact : dans « Accélérer le chargement » et dans le combo « tables lourdes », les tables sont désormais classées par volume décroissant (les plus grosses d’abord) au lieu de l’ordre alphabétique - pour traiter en priorité ce qui pèse le plus. Chaque carte affiche son nombre de lignes.
Lien direct : depuis une carte du combo « tables lourdes », « Aller à l’optimisation des requêtes » mène désormais directement à la carte de CETTE table dans « Accélérer le chargement » (plus de défilement pour la retrouver).
Version 1.20.2
29 juin 2026
Embarquement à nouveau possible pour les requêtes avec un DECLARE en tête, et nom de la table dans l’en-tête du script de validation.
Corrigé
Garde-fou d’embarquement trop strict (régression 1.20.1) : il bloquait toute requête « multi-instructions », ce qui empêchait d’embarquer une requête commençant par un DECLARE (ex. « DECLARE @CurrentDate DATE = GETDATE(); ») suivi d’un SELECT/WITH - pourtant parfaitement valide comme source Power Query. Le garde-fou autorise désormais un préambule DECLARE/SET + une seule requête SELECT/WITH, et ne bloque que ce qui casse réellement (tables temporaires … INTO #…, DROP/CREATE/EXEC, ou plusieurs requêtes).
Modifié
L’en-tête du script de validation nomme la table : « Script de validation genere par pbi-optimizer pour la table "…" ». Plus simple de s’y retrouver quand on en valide plusieurs.
Version 1.20.1
28 juin 2026
Correctif : on n’embarque plus une requête multi-instructions (qui cassait l’ouverture du .pbip).
Corrigé
Embarquement d’une requête non valide comme source Power Query : si la réécriture contenait plusieurs instructions (séparées par « ; »), des tables temporaires (#…) ou un DROP/DECLARE en tête, l’embarquer cassait le .pbip à l’ouverture (« Erreur du moteur M : Jeton ';' attendu »). L’app bloque désormais ce cas avec un message clair - une source Power Query doit être une seule requête SELECT (CTE en ligne ou CROSS APPLY). La version avec tables temporaires reste valable pour le script de validation, pas pour l’embarquement.
Version 1.20.0
28 juin 2026
Moins de défilement : barre « Générer » toujours visible, déport regroupé en une carte, et raccourcis en tête de page.
Modifié
Barre d’action collante en bas de page : un résumé (optimisations validées, colonnes déportées, requêtes embarquées) et le bouton « Générer le .pbip » restent visibles en permanence - plus besoin de remonter tout en haut pour générer.
Déport vers Power Query regroupé en une seule carte ordonnée, en haut de l’onglet Optimisations : 1) « Tout déporter », 2) liste des colonnes, 3) réglage des grosses tables (« Déporter quand même ») - au lieu d’avoir le bouton en milieu de page et le réglage tout en haut dans la carte de génération.
Mini-sommaire de raccourcis en tête (Déport · Requêtes · Cohérence · Générer) pour sauter directement à la bonne section.
Version 1.19.1
28 juin 2026
Correctif : le script de validation gère les réécritures qui créent leurs propres tables temporaires.
Corrigé
Script de validation invalide sur les réécritures multi-instructions : quand la requête réécrite matérialise d’abord ses propres tables temporaires (ex. #COLORWAY, #SKU_SITE) avant la requête finale, le « INTO #nouvelle » était inséré au mauvais endroit (sur la première étape), créant un double INTO non valide. Désormais le « INTO » est placé sur la dernière instruction SELECT qui produit le résultat (celle sans INTO), les étapes de matérialisation et les DROP sont laissés intacts.
Version 1.19.0
28 juin 2026
Handoff plus intelligent : il repère automatiquement les travers SQL courants et les inclut comme pistes dans le brief.
Ajouté
Diagnostic automatique des requêtes (8 anti-patterns courants, génériques et neutres SGBD) : UNION sans ALL, même table scannée plusieurs fois (scans répétés), CTE réévalué, fonction sur une colonne filtrée (non-sargable), LIKE avec joker en tête, NOT IN (sous-requête), SELECT *, et conversion implicite (colonne comparée à un littéral d’un autre type, via les types de colonnes). 100 % statique : aucune donnée, aucun appel IA.
Brief du handoff enrichi : les pistes repérées et la liste colonnes → types sont injectées dans le brief prêt à confier à un agent, avec un contrat d’équivalence explicite (NULL/BLANK, types, doublons, arrondis…). L’agent démarre avec le diagnostic déjà fait, au lieu de partir de zéro. Les pistes sont aussi affichées à l’écran (présentées comme « à vérifier », jamais comme des certitudes).
Version 1.18.0
28 juin 2026
Embarquer une requête réécrite (validée) directement dans le .pbip généré - la boucle est bouclée.
Ajouté
Embarquer une requête réécrite dans le .pbip : après avoir prouvé l’équivalence avec le script de validation, tu peux cocher « Embarquer cette requête dans le .pbip » - sur la réécriture proposée par l’IA comme sur une réécriture externe collée. À la génération, la requête native de la table est remplacée par ta version : plus besoin de la recopier à la main dans Power Query. Opt-in et sous ta responsabilité (l’app ne voit jamais tes données ; c’est toi qui confirmes l’équivalence via le script). Le choix est mémorisé par rapport, et le téléchargement confirme le nombre de requêtes embarquées.
Version 1.17.2
28 juin 2026
Correctif : depuis le combo « table lourde », on accède enfin au panneau d’optimisation des requêtes.
Corrigé
Combo « table lourde » sans action : la carte renvoyait vers le panneau « Accélérer le chargement », qui n’était visible que sous l’objectif Extraction - donc absent quand tu étais sur l’objectif Mémoire. Le panneau d’optimisation des requêtes est désormais toujours affiché, et la carte combo a un bouton « Aller à l’optimisation des requêtes » qui t’y emmène directement.
Version 1.17.1
28 juin 2026
Correctif : le combo « table lourde » s’affiche enfin (il était masqué tant qu’aucun déport n’avait été validé).
Corrigé
Combo « table lourde » invisible : il ne s’affichait qu’après avoir déjà validé un déport - un cercle vicieux, puisque son rôle est justement de t’inciter à déporter. Il se base désormais sur la détection des colonnes calculées déportables (indépendamment de toute validation), apparaît aussi dans le parcours complet (sans objectif sélectionné), et t’indique quoi faire quand la volumétrie n’a pas encore été importée.
Version 1.17.0
28 juin 2026
Prouver qu’une requête réécrite renvoie le même résultat, confier les requêtes lourdes à un agent sans limite, et le combo « table lourde » (optimiser la requête puis déporter).
Ajouté
Script de validation automatique : pour toute réécriture de requête (proposée par l’IA ou collée de l’extérieur), pbi-optimizer génère un script T-SQL qui matérialise l’ancienne et la nouvelle requête, les compare (EXCEPT dans les deux sens + total de lignes) et affiche un verdict « identique ». Déterministe, sans IA, sans envoi de données - tout tourne chez toi. Gère les cas pièges (UNION, CTE, DECLARE).
Handoff pour les requêtes lourdes : quand une requête est trop volumineuse pour une réécriture garantie en un appel, l’app fournit un diagnostic et un brief prêt à confier à un agent sans limite (Claude Code / Claude.ai), avec une option d’anonymisation des noms ; tu colles le résultat dans « Valider une réécriture externe » pour prouver l’équivalence.
Combo « table lourde » : sur les grosses tables à colonnes calculées, l’app séquence explicitement les deux leviers - 1) optimiser la requête source (prérequis, ne réduit pas la mémoire à lui seul) puis 2) déporter les colonnes calculées (le vrai gain mémoire + VertiPaq) - avec des avertissements clairs contre les demi-mesures.
Déport des grosses tables au choix : le garde-fou de taille n’est plus une interdiction. Chaque grosse table dépassant le seuil peut être déportée « quand même » individuellement, sans lever le garde-fou partout.
Modifié
Page d’accueil : les promesses décrivent désormais le parcours par objectif, l’accélération de l’extraction (repli + réécritures sûres + IA), la preuve d’équivalence et le handoff.
Plus de marge de calcul pour l’optimiseur de requêtes IA (durée d’exécution serveur relevée).
Version 1.16.0
28 juin 2026
Parcours par objectif : choisissez ce que vous voulez optimiser (mémoire, rafraîchissement, extraction…) et la page se réorganise pour traiter d’abord vos priorités.
Ajouté
Sélecteur d’objectifs en tête de l’analyse : indiquez un ou plusieurs buts - réduire la taille mémoire, accélérer le rafraîchissement (VertiPaq), accélérer l’extraction (SQL / Power Query), accélérer l’affichage des visuels (DAX), rechercher/remplacer du texte, fiabiliser les formules - et surtout dans l’ordre de priorité qui compte pour vous. La page se réorganise en sections, une par objectif, dans cet ordre : les optimisations et les outils utiles à votre premier objectif arrivent en premier.
Une optimisation qui sert plusieurs de vos objectifs n’apparaît qu’une seule fois (sous le plus prioritaire), avec une étiquette « compte aussi pour ». Une section repliée « Autres optimisations détectées (hors objectifs) » garantit que rien n’est masqué.
Modifié
Sans objectif sélectionné, vous retrouvez exactement le parcours complet d’avant (Nettoyer → Alléger → Restructurer → Affiner → Peaufiner) : aucune perte de repère pour ceux qui préfèrent l’échelle par type d’action.
Version 1.15.0
28 juin 2026
Optimiseur IA des requêtes : analyse sous-requête par sous-requête (CTE) et messages plus clairs.
Ajouté
Optimisation IA sous-requête par sous-requête (CTE) : sur une grosse requête (plusieurs CTE, beaucoup de jointures), l’IA travaillait sur le tout et ne proposait souvent rien (impossible de garantir l’équivalence à cette échelle). Désormais elle découpe la requête en sous-parties (CTE + requête principale), optimise chacune séparément, et réassemble le tout - avec un diff par sous-partie. Bien plus de chances d’obtenir une optimisation sûre sur les requêtes complexes.
Modifié
Message plus clair quand l’IA ne trouve rien à réécrire : au lieu d’un simple « aucune optimisation », l’app explique pourquoi (requête déjà simple, ou trop volumineuse pour une garantie d’équivalence) et renvoie vers les vrais leviers - le diagnostic de repli de requête et l’analyse des colonnes calculées inutilisées. Un indice signale aussi les requêtes volumineuses analysées par sous-partie.
Corrigé
Décodage des sauts de ligne Power Query (#(lf)/#(tab)) avant analyse du SQL, et désanonymisation du texte d’explication : les noms techniques masqués (ex. « col_43 ») n’apparaissent plus dans les explications, qui citent maintenant les vrais noms de colonnes.
Version 1.14.0
27 juin 2026
Accélérer le chargement : diagnostic du repli de requête, réécritures sûres et optimiseur IA anonymisé.
Ajouté
Panneau « Accélérer le chargement » : pour chaque table, pbi-optimizer indique où le repli de requête (query folding) s’interrompt - c’est-à-dire à partir de quelle étape le travail quitte la base de données pour s’exécuter en local dans Power BI sur toutes les lignes ramenées. C’est le levier n°1 sur la durée de chargement.
Réécritures sûres à résultat identique garanti, applicables à la génération (case « Optimiser les requêtes ») : retrait d’un tri (ORDER BY) inutile au chargement, fusion des étapes de typage redondantes, suppression des étapes sans effet, et remontée d’un filtre avant un ajout de colonne pour préserver le repli. Chaque réécriture est prouvée équivalente par construction ; aucune ne touche une requête déjà modifiée par une autre option.
Optimiseur IA par requête (suggestion, jamais appliqué tout seul) : avant tout envoi, les noms (serveur, base, table, colonne) ET les valeurs (textes, dates, nombres) sont masqués et les commentaires retirés ; ils sont restaurés au retour. Le modèle ne voit jamais tes données ni tes vrais noms. Si l’IA invente un identifiant, la proposition est automatiquement écartée par sécurité.
Recette de vérification intégrée (comparer le nombre de lignes avant/après, « Afficher la requête native ») pour confirmer en quelques secondes que le résultat est bien identique.
Version 1.13.0
27 juin 2026
Ajouté
Trace des champs à retirer des requêtes source. Supprimer une colonne la retire du modèle (plus chargée = mémoire gagnée), mais la requête SQL / Power Query continue de la rapatrier. Après génération, pbi-optimizer liste maintenant, par table, les champs encore extraits à retirer (téléchargeable), ET ajoute un commentaire de rappel directement dans la requête Power Query de chaque table concernée - la trace voyage avec le fichier, là où tu agis. Le commentaire ne change rien à la requête et n’est pas dupliqué si tu régénères. (pbi-optimizer ne réécrit jamais tout seul une requête déjà en colonnes explicites : trop risqué, d’où ce rappel.)
Version 1.12.1
27 juin 2026
Corrigé
Fichier .pbip qui refusait de s’ouvrir après suppression de colonnes supprimables. L’analyse ignorait deux usages non-DAX d’une colonne : servir de niveau de hiérarchie, ou de colonne de tri (« trier par »). Ces colonnes pouvaient être supprimées à tort, laissant une référence cassée → Power BI n’ouvrait plus le projet. C’est corrigé : ces colonnes sont désormais détectées et protégées (jamais supprimées). Régénère ton .pbip pour repartir sur une base saine (ton fichier d’origine n’a jamais été touché).
Version 1.12.0
27 juin 2026
Modifié
Analyse unifiée « Colonnes supprimables ». L’ancien panneau « colonnes mortes » et les détections séparées « colonne inutilisée » / « mesure inutilisée » sont réunis en une seule analyse, qui liste d’un coup les colonnes calculées mortes, les colonnes importées inutilisées et les mesures inutilisées. Tout est calculé en une passe : la cascade est incluse (une colonne qui ne servait qu’à un élément mort tombe aussi), plus besoin de « supprimer puis relancer ».
Choix par élément + sécurité. Chaque élément a une case à cocher (tout coché par défaut) : tu décoches ce que tu veux garder, puis tu génères. Si tu conserves un élément, ses dépendances sont automatiquement protégées (on ne supprime jamais quelque chose encore utilisé par ce que tu gardes). Export CSV de ta sélection.
Version 1.11.0
27 juin 2026
Modifié
Nouvel écran d’optimisation guidé. Au lieu d’une longue liste avec filtres, les optimisations sont rangées dans un parcours ordonné du plus rentable au plus mineur : 0) Mesurer (importer ta volumétrie), 1) Nettoyer (supprimer le superflu - colonnes mortes, inutilisées… les rapports connectés sont ici), 2) Alléger (réduire le poids mémoire), 3) Restructurer (relations et schéma), 4) Affiner (DAX et extraction), 5) Peaufiner (gouvernance). L’étape en cours est mise en avant (« commence ici »), chaque étape est repliable, et une barre montre ton avancement. À l’intérieur d’une étape, le classement par impact est conservé. Les outils Requêtes source et Rechercher-remplacer sont regroupés dans un onglet « Outils ».
Ajouté
Plan d’action des étapes manuelles. À la génération, les optimisations validées qui restent à faire à la main (changements de structure : clé entière, flocon, table de pont…) sont compilées en un plan téléchargeable (.md) ou copiable, trié par impact. Chaque étape garde son contexte (quoi, pourquoi, comment) : tu sais exactement quoi faire en ouvrant ton .pbip, sans te souvenir de ce qui avait été repéré plus tôt.
Désactivation automatique des tables Date/heure. Plus besoin d’aller décocher l’option à la main : une fois validée, l’optimisation désactive le réglage dans le .pbip généré, et Power BI retire les tables de dates cachées (gros poste mémoire) au prochain rafraîchissement. Sans risque pour ton fichier.
SELECT * réduit aux colonnes utiles. Quand une requête source charge toutes les colonnes, l’outil la réécrit pour ne ramener que celles utilisées par le modèle (mêmes résultats, moins de données extraites). Garde-fous stricts (SQL Server, sans jointure ni colonne ajoutée après la requête) ; sinon la requête est laissée telle quelle.
Changements de type (opt-in). Une case à cocher à la génération applique les changements de type validés - date-heure → date, montant flottant → décimal fixe - en éditant Power Query et le modèle. À activer en connaissance de cause : ouvre le fichier généré pour vérifier qu’il s’ouvre et que l’affichage est bon ; sinon, régénère sans l’option.
Version 1.10.0
27 juin 2026
Ajouté
Rapports paginés (.rdl) pris en compte dans l’analyse des colonnes mortes. Tu peux désormais ajouter, parmi les rapports connectés, un rapport paginé branché au dataset - particulièrement utile pour l’historisation, car il utilise souvent des colonnes qu’aucun tableau de bord n’affiche. L’outil lit sa requête au modèle (DAX/MDX) et ses champs pour savoir exactement quelles colonnes il consomme, et les protège donc de la suppression. Formats acceptés pour les rapports connectés : .pbip, .pbix et .rdl.
Version 1.9.1
27 juin 2026
Corrigé
Rapports connectés en .pbix : aucun champ utilisé n’était détecté. Dans un .pbix, la définition des visuels range les noms de champs dans des blocs imbriqués (texte JSON dans du JSON), que la détection ne reconnaissait pas. C’est corrigé : on lit désormais correctement ces blocs. Les rapports connectés au format .pbip n’étaient pas concernés. Si tu avais ajouté des rapports .pbix, retire-les puis rajoute-les pour récupérer leurs champs.
Version 1.9.0
27 juin 2026
Ajouté
Dataset partagé : analyse des colonnes mortes sur tout l’ensemble. Nouvel onglet « Modèle partagé » où tu peux ajouter chaque rapport connecté à ton modèle - son dossier .pbip ou directement son fichier .pbix. L’outil en extrait uniquement les champs utilisés (le fichier n’est jamais conservé) et les prend en compte dans l’analyse. Résultat : une colonne utilisée seulement par un rapport externe n’est plus signalée comme inutile à tort.
Liste des colonnes calculées mortes, avec export CSV. L’onglet affiche les colonnes calculées (en DAX) recalculées et stockées à chaque rafraîchissement mais utilisées par rien (ni mesure, ni relation, ni rapport), triées par cardinalité (poids mémoire). Tu peux exporter la liste complète en CSV (compatible Excel) pour faire le ménage à ton rythme.
Génération d’un .pbip sans les colonnes mortes : un bouton (et une case à cocher dans l’écran de génération) crée une nouvelle archive .pbip débarrassée de ces colonnes inutiles - plus léger en mémoire, sans rien casser. Sécurité : la suppression est bloquée tant qu’aucune information d’usage de visuels n’est connue (rapport embarqué ou rapports connectés). Ton fichier original n’est jamais modifié.
Version 1.8.2
25 juin 2026
Corrigé
Colonnes numériques déportées : une colonne calculée qui renvoie un nombre (ex. « si … alors 1 sinon 0 ») pouvait être déclarée en texte côté Power Query, provoquant une erreur sur chaque ligne. On détermine maintenant son type à partir de son format d'affichage (un format à chiffres = nombre, un format de date = date), ce qui est fiable même pour les colonnes calculées. Pas besoin de re-traduire : il suffit de régénérer le fichier.
Version 1.8.1
25 juin 2026
Corrigé
Traduction Power Query des colonnes de dates : une colonne déportée qui compare des dates (ex. « date de première vente dans le futur ? ») pouvait renvoyer une erreur sur chaque ligne, car Power Query refuse de comparer une date à une date+heure (DAX, lui, le tolère). La traduction par IA connaît désormais le type réel de chaque colonne et applique les bonnes conversions de date/heure. Pour corriger une colonne déjà traduite, utilise le bouton « Régénérer la proposition (IA) » (ton choix « déporter » est conservé).
Version 1.8.0
25 juin 2026
Ajouté
Seuil de déport réglable avec recommandation automatique : dans l’écran « Générer le rapport optimisé », un curseur permet de choisir jusqu’à quelle taille de table (en nombre de lignes) les colonnes sont déportées vers Power Query - de 10 000 lignes à « Illimité ». pbi-optimizer propose une valeur recommandée en analysant ton dataset (volumétrie des tables + complexité des requêtes source) : requêtes simples → tu peux tout déporter ; requêtes complexes → on limite aux petites/moyennes tables pour un rafraîchissement rapide. Un aperçu en direct montre, à chaque réglage, combien de colonnes restent déportées et combien repassent en DAX.
Version 1.7.10
25 juin 2026
Modifié
Déport Power Query limité aux petites tables : le déport d’une colonne est maintenant ignoré si sa table dépasse 100 000 lignes. Sur une grosse table, déporter le calcul vers Power Query (fait ligne par ligne au rafraîchissement) rend l’actualisation interminable ; ces colonnes restent donc en DAX (calcul rapide par le moteur du modèle) et apparaissent dans le récapitulatif. Plus besoin de dé-valider quoi que ce soit : c’est automatique à la génération du fichier.
Version 1.7.9
25 juin 2026
Modifié
Déport Power Query plus rapide au rafraîchissement : la requête source est désormais mise en cache (Table.Buffer) avant d’ajouter les colonnes déportées. Sans ça, Power Query enrobait ta requête dans une sous-requête pour la base, ce qui lui faisait perdre son plan d’exécution et pouvait bloquer le rafraîchissement côté serveur (réseau à plat, « Évaluation en cours » sans fin). Maintenant, ta requête s’exécute telle quelle, une seule fois. À noter : déporter beaucoup de colonnes sur de très grosses tables reste déconseillé.
Version 1.7.8
25 juin 2026
Modifié
Optimisation des relations bidirectionnelles plus prudente : une mesure n’est désormais adaptée (CROSSFILTER) que si elle utilise vraiment les deux tables de la relation. Avant, le repérage était trop large et ajoutait des adaptations inutiles qui faussaient les calculs sur les modèles très liés (erreur « une table de plusieurs valeurs… » et saturation mémoire). Désormais, une relation sans mesure réellement concernée est laissée telle quelle. Pas besoin de relancer l’analyse.
Version 1.7.7
25 juin 2026
Corrigé
Mesures et colonnes avec filtrage croisé local (CROSSFILTER) : quand une formule DAX sur plusieurs lignes était encadrée par des marqueurs techniques (trois « ` »), ces marqueurs se retrouvaient au milieu de la formule réécrite, et plusieurs tables refusaient de se charger (« jeton non valide »). La version précédente ne corrigeait ce souci que pour les requêtes Power Query ; il est désormais traité partout (mesures, colonnes et requêtes). Corrigé à la génération du fichier : pas besoin de relancer l’analyse.
Version 1.7.6
24 juin 2026
Corrigé
Déport de colonnes en Power Query : certaines tables refusaient de se charger (« jeton non valide » sur un caractère « ` »). En interne, une requête Power Query sur plusieurs lignes est encadrée par des marqueurs techniques (trois « ` ») ; le déport ne les retirait pas avant de retravailler la requête, et ces marqueurs se retrouvaient au milieu du code. C’est corrigé : les marqueurs sont retirés puis remis correctement autour de la requête. Corrigé à la génération du fichier : pas besoin de relancer l’analyse.
Version 1.7.5
24 juin 2026
Corrigé
Mesures avec filtrage croisé local (CROSSFILTER) : si la formule se terminait par un commentaire (ligne commençant par « -- »), la virgule technique qui relie le calcul au filtrage croisé se retrouvait à l’intérieur du commentaire et était donc ignorée - le fichier refusait de s’ouvrir (« La syntaxe de CROSSFILTER est incorrecte »). La virgule est maintenant placée à un endroit sûr. Corrigé à la génération du fichier : pas besoin de relancer l’analyse.
Version 1.7.4
24 juin 2026
Corrigé
Mesures avec filtrage croisé local (CROSSFILTER) : certaines mesures dont la formule était suivie d’une annotation de formatage refusaient de s’ouvrir (« La syntaxe de annotation est incorrecte »). Cette ligne technique était par erreur intégrée à la formule, puis collée au milieu du calcul lors de la réécriture. C’est corrigé à trois niveaux, dont la génération du fichier : plus besoin de relancer l’analyse pour réparer un rapport déjà traité (vos validations et traductions IA sont conservées). L’annotation reste bien une propriété de la mesure, en dehors de la formule.
Version 1.7.3
24 juin 2026
Corrigé
Relation un-à-un : le garde-fou de la version précédente se fiait à la cardinalité enregistrée dans l’analyse, qui était parfois mal détectée - le fichier .pbip pouvait donc encore refuser de s’ouvrir. Désormais, au moment de générer le fichier, on lit la cardinalité réelle directement dans le modèle : une relation un-à-un (ou plusieurs-à-plusieurs) n’est jamais rendue à sens unique, seules les vraies relations un-à-plusieurs le sont. Plus besoin de relancer l’analyse : il suffit de régénérer le fichier.
Version 1.7.2
24 juin 2026
Corrigé
Relation un-à-un bidirectionnelle : le fichier .pbip généré refusait de s’ouvrir (« CrossFilterDirection pour les relations un-à-un doit toujours être défini sur BothDirections »). Power BI interdit de rendre une relation un-à-un (1:1) à sens unique : elle doit toujours filtrer dans les deux sens. L’option qui proposait de choisir le sens d’une relation 1:1 a donc été retirée (elle créait un fichier invalide). Une relation 1:1 n’est plus jamais modifiée de cette façon, et le diagnostic explique la vraie solution : fusionner les deux tables (une relation 1:1 désigne souvent la même entité), ou corriger la cardinalité si elle est en réalité un-à-plusieurs.
Version 1.7.1
24 juin 2026
Corrigé
« Division sans DIVIDE » - faux positifs : le symbole « / » était signalé même quand il fait partie d’un nom de table/colonne (par exemple « …couleur PF/Site » ou « Meme quarter article/PF ? ») ou qu’il se trouve dans un commentaire de la formule. On ignore désormais les noms (entre crochets/apostrophes), les chaînes de texte et les commentaires DAX (`//`, `--` et `/* */`) avant de chercher une vraie division.
Version 1.7.0
24 juin 2026
Modifié
Déport en masse plus robuste : si un lot de colonnes échoue temporairement (surcharge passagère du service IA), l’opération ne s’arrête plus - elle met ces colonnes de côté et continue avec les suivantes. Il suffit de relancer « Tout déporter » pour reprendre les colonnes mises de côté.
Récapitulatif de fin de déport : un résumé clair s’affiche (colonnes déportées, échecs temporaires à relancer, colonnes non déportables car elles dépendent d’une colonne restée en DAX), pour savoir d’un coup d’œil s’il faut relancer.
Version 1.6.0
22 juin 2026
Ajouté
Relations bidirectionnelles - prise en compte de la cardinalité. Pour une relation plusieurs-à-plusieurs, le passage automatique en mono-directionnel n’est plus proposé (il s’appuie souvent sur le bidirectionnel et le sens dépend de ta logique) : une alerte invite à la revoir manuellement. Pour une relation un-à-un, tu peux désormais choisir le sens du filtrage (avec un bouton « Inverser le sens »), appliqué à la génération.
Corrigé
Cardinalité des relations désormais lue correctement dans les fichiers TMDL (un-à-un, plusieurs-à-plusieurs), ce qui fiabilise aussi la détection des relations plusieurs-à-plusieurs.
Version 1.5.1
22 juin 2026
Corrigé
Robustesse des appels IA (traduction Power Query, réécriture DAX) : en cas de surcharge temporaire du service IA, l’opération réessaie maintenant automatiquement plusieurs fois (avec délai croissant), et si le pic persiste, un message clair s’affiche (« service IA temporairement surchargé, réessaie ») au lieu d’un message technique brut.
Version 1.5.0
22 juin 2026
Ajouté
Diagnostics de coût VertiPaq (mémoire / rafraîchissement) : nouvelles analyses pour cibler les causes d’un calcul qui n’aboutit pas. (1) Colonnes calculées qui balaient une table entière (LOOKUPVALUE, FILTER, SUMX…), coûteuses au rafraîchissement. (2) Tables chargées de colonnes calculées (avec le nombre par table) - les « hotspots » à déporter en priorité. (3) Tables calculées matérialisées en DAX, surtout avec des fonctions lourdes (CROSSJOIN, SUMMARIZE…).
Panneau volumétrie : les colonnes calculées sont maintenant signalées dans le classement par cardinalité, pour repérer d’un coup d’œil les plus gros postes mémoire qui sont déportables (ou supprimables).
Version 1.4.0
22 juin 2026
Ajouté
Détection des références circulaires : cinq nouvelles analyses repèrent les dépendances en boucle - entre colonnes calculées / mesures DAX, entre requêtes Power Query, les boucles de relations (chemins de filtrage ambigus), les cycles de dépendances passant par une relation (clé de jointure elle-même calculée), et les colonnes calculées utilisant RELATED à travers une relation bidirectionnelle (le piège classique de dépendance circulaire + coût VertiPaq). Chaque alerte explique la boucle exacte et les corrections possibles (déporter une colonne en Power Query, repasser une relation en mono-directionnel avec USERELATIONSHIP, transformer en mesure…).
Corrigé
Garde-fou anti-cycle : la génération du rapport optimisé n’applique plus une réécriture DAX ou un déport qui créerait une référence circulaire (colonnes déportées se référençant mutuellement, ou réécriture introduisant une boucle). Le cas est ignoré et signalé plutôt que de produire un fichier qui ne se charge pas.
Version 1.3.0
22 juin 2026
Ajouté
Filtre par criticité d’impact : en plus du filtre par type, des boutons « Impact élevé / moyen / faible » (avec le nombre d’optimisations concernées) permettent de n’afficher que les niveaux choisis. Les deux filtres se combinent, l’affichage seul est concerné (aucune incidence sur la génération du rapport).
Version 1.2.9
22 juin 2026
Corrigé
Déport vers Power Query - tables dont le nom contient une apostrophe : une colonne calculée ne faisant appel qu’aux champs de sa propre table était classée à tort « possible via une fusion » (donc non déportable directement) quand le nom de la table contient une apostrophe (par exemple « Echantillons d’affectation couleur PF/Site »). La détection des tables référencées gère désormais correctement les apostrophes : ces colonnes sont à nouveau reconnues comme « déportables en Power Query ».
Version 1.2.8
22 juin 2026
Corrigé
Déport vers Power Query - pare-feu de confidentialité : pour une table dont la requête combine une source de données et d’autres requêtes (motif « Transformer le fichier » de SharePoint/Excel, fusions…), l’actualisation échouait (« référence d’autres requêtes… Reconstruisez cette combinaison de données »). On insère désormais les colonnes déportées directement à la fin de la requête d’origine (comme une colonne personnalisée ajoutée à la main), au lieu d’emballer toute la requête - la structure d’origine, et donc l’analyse du pare-feu, restent identiques. À appliquer en régénérant le rapport.
Version 1.2.7
22 juin 2026
Corrigé
Déport vers Power Query - clés avec valeurs vides : une clé déportée construite par concaténation (par exemple CodeArticle + Plant) devenait vide (null) dès qu’un de ses composants était vide, ce qui bloquait l’actualisation quand la colonne sert de clé de relation (« contient des valeurs vides, non autorisé du côté un d’une relation »). En DAX, un composant vide est traité comme une chaîne vide ; on reproduit désormais ce comportement en Power Query (chaque morceau texte vide devient « » au lieu de null), donc la clé reste non vide et identique au DAX. À appliquer en régénérant le rapport.
Version 1.2.6
22 juin 2026
Corrigé
Réécriture DAX (colonnes et mesures) : quand une formule tenant sur une seule ligne était réécrite en une version sur plusieurs lignes (par exemple avec VAR/RETURN), le .pbip généré pouvait ne plus s’ouvrir (« La syntaxe de lineageTag est incorrecte ») car le corps de la formule n’était pas assez indenté et absorbait les lignes de propriété qui suivent. L’indentation de la formule réécrite est désormais correcte (plus profonde que les propriétés), conformément au format de fichier Power BI.
Version 1.2.5
22 juin 2026
Corrigé
Déport vers Power Query - type de données : une colonne calculée numérique (par exemple un indicateur 0/1 ou un montant) pouvait être recréée en texte, ce qui cassait ensuite les mesures qui l’additionnent ou la comparent (« SUM ne peut pas fonctionner avec String », « comparaison Text vs Integer »). On détermine désormais le type plus finement : si la colonne est résumée par somme/moyenne dans le modèle (signe qu’elle est numérique), elle est recréée en nombre. Les vraies clés texte restent en texte. À refaire en régénérant le rapport (pas besoin de retraduire).
Version 1.2.4
22 juin 2026
Corrigé
Déport vers Power Query : le rafraîchissement des données pouvait échouer (« Le champ X existe déjà dans l’enregistrement ») quand la requête source de la table renvoyait déjà une colonne portant le nom de la colonne déportée (par exemple une vue SQL qui calcule déjà la clé). On retire désormais toute colonne pré-existante de ce nom avant de ré-injecter notre version Power Query - le rafraîchissement passe quelle que soit la source.
Version 1.2.3
22 juin 2026
Corrigé
Déport vers Power Query : le .pbip généré ne s’ouvrait pas (« Erreur du moteur M : Jeton Literal attendu ») quand l’IA renvoyait une traduction vide pour une colonne (cela arrive rarement, malgré une formule pourtant traduisible). Une colonne dont la traduction Power Query est vide est désormais automatiquement laissée en DAX et signalée, au lieu de produire un code Power Query invalide qui empêchait tout le modèle de se charger.
Version 1.2.2
22 juin 2026
Corrigé
Déport en masse vers Power Query : l’erreur « s is not iterable » pouvait revenir quand un lot tombait sur des formules complexes (chaque traduction étant plus longue, le lot dépassait quand même le temps maximal d’une requête). Les traductions d’un même lot sont désormais lancées en parallèle : la durée d’un lot correspond à la traduction la plus lente, plus à leur somme - un lot tient largement dans la limite de temps, quelle que soit la complexité.
Version 1.2.1
22 juin 2026
Corrigé
Déport en masse vers Power Query : sur les rapports comptant beaucoup de colonnes à traduire, l’opération échouait avec une erreur technique (« s is not iterable ») car toutes les traductions étaient tentées en une seule fois et dépassaient le temps maximal d’une requête. Le traitement se fait désormais par petits lots successifs, avec une barre de progression, et reprend là où il en était si besoin - plus aucune limite de temps atteinte, quel que soit le nombre de colonnes.
Version 1.2.0
22 juin 2026
Ajouté
Déport en masse vers Power Query (expérimental) : un bouton « Tout déporter en Power Query » traite d’un coup toutes les colonnes calculées facilement déportables - celles dont le calcul ne fait appel qu’aux champs de leur propre table. Les colonnes qui agrègent ou vont chercher une valeur dans une autre table sont volontairement exclues. Un écran de confirmation indique le nombre exact de colonnes et le coût IA estimé (à partir du coût moyen de tes traductions passées) avant de lancer ; rien n’est traduit ni modifié tant que tu n’as pas confirmé.
Corrigé
Déport vers Power Query : les colonnes déportées qui s’appuient les unes sur les autres sont désormais créées dans le bon ordre (une colonne utilisée par une autre est calculée avant elle), ce qui évite une erreur « colonne introuvable » à l’ouverture. Et une colonne qui dépendrait d’une colonne calculée restée en DAX est automatiquement écartée du déport (et signalée), plutôt que de produire un fichier qui ne se charge pas.
Version 1.1.3
22 juin 2026
Corrigé
Déport d’une colonne calculée vers Power Query (expérimental) : le .pbip généré ne s’ouvrait pas (« Erreur du moteur M : Identificateur non valide ») quand la colonne déportée référençait un autre champ dont le nom contient un caractère spécial (par exemple « Ligne à considérer ? » ou « Clé CodeERP-FRN »). Ces noms sont maintenant automatiquement entre guillemets dans le code Power Query généré, comme l’exige le moteur M, donc le modèle se charge.
Version 1.1.2
22 juin 2026
Corrigé
Déport d’une colonne calculée vers Power Query (expérimental) : le .pbip généré ne s’ouvrait pas (la fenêtre de chargement se refermait aussitôt) car la colonne déportée n’avait pas de type de données déclaré, ce qu’une colonne alimentée par Power Query exige. On attribue désormais un type de données à la colonne déportée (celui d’origine s’il est connu, sinon déduit du code Power Query).
Version 1.1.1
22 juin 2026
Corrigé
Déport d’une colonne calculée vers Power Query (expérimental) : le .pbip généré ne s’ouvrait plus si la colonne déportée servait de clé de relation - elle était supprimée alors que des relations (ou mesures/visuels) la référençaient encore. Désormais la colonne est conservée et convertie en colonne alimentée par Power Query, donc ses relations et références restent valides.
Version 1.1.0
22 juin 2026
Ajouté
Rechercher-remplacer dans les filtres du rapport : en plus des données (DAX / Power Query), le remplacement peut maintenant mettre à jour la chaîne directement dans les valeurs des filtres et segments du rapport. C’est ciblé - il ne touche que les valeurs de filtre, jamais les noms de champs ou de tables (aucune référence cassée). Activé par défaut, l’aperçu indique combien de valeurs seront remplacées. Les titres et zones de texte ne sont pas modifiés ; hors « fidélité garantie » (à vérifier après ouverture dans Power BI).
Version 1.0.9
22 juin 2026
Ajouté
Rechercher-remplacer - impact sur le rapport : l’aperçu signale maintenant les visuels et filtres (de visuel, de page, de rapport, segments, titres…) qui référencent la chaîne recherchée. Le remplacement n’agit que sur les données (DAX / Power Query) ; ces références dans le rapport sont à vérifier/ajuster manuellement dans Power BI, sinon un renommage de valeur peut rendre des filtres obsolètes (visuels vides). Lecture seule.
Version 1.0.8
22 juin 2026
Corrigé
Rétention 7 jours : les rapports expirés sont maintenant entièrement supprimés après 7 jours (fichier source + analyse + résultats), conformément à ce qui est annoncé. Auparavant, seule la copie brute du fichier était purgée et l’analyse restait visible au-delà de 7 jours.
Version 1.0.7
16 juin 2026
Ajouté
Onglet « Requêtes source » : pour chaque table, sa requête Power Query (M) et le SQL natif qu’elle contient sont affichés en lecture seule, avec des signaux d’optimisation - requêtes en SELECT * et colonnes ramenées mais inutilisées (à élaguer à la source).
Rechercher-remplacer étendu au Power Query : le rechercher-remplacer agit maintenant aussi sur les requêtes Power Query (et le SQL natif qu’elles contiennent), en plus du DAX. Pratique pour renommer un schéma, une table ou une source partout d’un coup ; chaque résultat est étiqueté « Formule DAX » ou « Requête Power Query ».
Version 1.0.6
16 juin 2026
Ajouté
Déport automatique d’une colonne calculée vers Power Query (expérimental) : quand l’IA propose de transformer une colonne calculée DAX en colonne Power Query, un interrupteur optionnel permet de l’appliquer directement dans le .pbip généré (la colonne est ajoutée à la requête de la table et la colonne calculée DAX est retirée). Désactivé par défaut, et hors « fidélité garantie » - DAX et Power Query peuvent différer, donc après ouverture il faut actualiser et comparer les valeurs. Si la requête ne peut pas être modifiée en toute sécurité, rien n’est touché et c’est signalé.
Version 1.0.5
16 juin 2026
Ajouté
Plus d’optimisations appliquées automatiquement : des optimisations qui étaient jusque-là des étapes manuelles dans Power BI sont maintenant réinjectées directement dans le .pbip généré (après validation). Concerné : le résumé par défaut « Ne pas résumer » sur les clés et codes, le format d’affichage par défaut sur les mesures qui n’en ont pas, et la suppression des objets inutilisés (relations inactives jamais utilisées, mesures et colonnes inutilisées). En cas de doute (objet introuvable ou ambigu), l’édition est ignorée et signalée plutôt que devinée.
Version 1.0.4
16 juin 2026
Ajouté
Horodatage du fichier exporté : le .pbip généré (optimisation ou rechercher-remplacer) inclut maintenant la date et l’heure dans son nom (par exemple « mon-rapport.optimized.2026-06-16_14-30.zip »), pour ne plus écraser un export précédent et savoir quand chaque version a été produite.
Corrigé
Bouton d’export introuvable : lorsque des optimisations étaient validées mais qu’aucune n’était applicable automatiquement (optimisations manuelles, ou réécritures validées sans proposition IA générée), aucun message n’apparaissait. Un panneau explique désormais pourquoi il n’y a rien à exporter et indique quoi faire.
Version 1.0.3
16 juin 2026
Ajouté
Onglet « Rechercher-remplacer » : remplacement de chaînes de caractères en masse dans toutes tes formules DAX (mesures et colonnes calculées), par exemple pour renommer un libellé métier. Outil de maintenance (pas de performance), avec plusieurs paires recherche → remplacement, respect de la casse en option, aperçu avant/après, puis génération d’un .pbip - protégé par le même garde-fou de fidélité que l’optimiseur.
Indicateurs de chargement : une notification animée (sablier) apparaît dès le clic sur une action longue (réécriture par IA, analyse des mesures, cohérence, génération) et reste affichée jusqu’à la fin, pour confirmer que ton clic a bien été pris en compte.
Version 1.0.2
16 juin 2026
Ajouté
Validation en masse par type : un bouton « Tout valider » traite d’un coup toutes les occurrences encore à traiter d’un même type d’optimisation. Proposé pour les optimisations déterministes (structure, gouvernance) ayant au moins deux occurrences ; les réécritures assistées par IA et les relations bidirectionnelles (lots indivisibles) restent validées une par une.
Version 1.0.1
16 juin 2026
Grande vague d’enrichissements de l’analyse et de l’ergonomie depuis la 1.0.0.
Ajouté
Nouvelles optimisations détectées côté modèle : clés de relation non entières (date/nombre), relations inactives jamais utilisées, structure en flocon (snowflake), noms ambigus (mesure = colonne).
Nouvelles optimisations de gouvernance : mesures sans format d’affichage, mesures sans description.
Nouvelles optimisations Power Query : sources non pliables (fichier/web) et détection élargie du repli de requête cassé.
Nouvel axe « couche rapport » : analyse des pages et visuels du .pbip, avec détection des pages surchargées de visuels.
Détection des colonnes et mesures inutilisées, fiable car croisée avec leur usage réel dans les visuels.
Suivi des coûts d’IA : page d’administration (par utilisateur, par rapport, par session de travail) et compteur de coût directement dans le bandeau de chaque rapport.
Vue d’analyse repensée : optimisations critiques en haut, panneau latéral volumétrie/cardinalité, bloc « Par où commencer », filtre par type d’optimisation, étiquettes d’effort (automatique / guidé / manuel), guide du parcours complet et bouton « retour en haut ».
Dépôt simplifié : bouton « Choisir un dossier .pbip » (préparation automatique côté navigateur, plus besoin de zipper à la main), guide de préparation et indicateur d’avancement.
Approbation manuelle des comptes : chaque inscription est validée par l’administrateur.
Mode sombre complet (clair / sombre / système).
Modifié
Génération du .pbip : bouton remonté en haut et disponible dès qu’une optimisation applicable est validée.
Tri par criticité actif dès l’ouverture d’un rapport.
Page d’accueil clarifiée : périmètre réel (couche rapport, objets inutilisés), garantie de fidélité recentrée sur le DAX, parcours en 4 étapes incluant la finalisation dans Power BI.
Adresse de contact dédiée : contact-pbi-optimizer@luxuryoperations.org.
Corrigé
.pbip optimisé : retrait des artefacts de brouillon pour une ouverture plus fiable dans Power BI.
Préparation des gros fichiers déplacée en arrière-plan : l’extraction ne fige plus l’onglet.
Corrections d’affichage (défilement sur mobile, panneau latéral, menu utilisateur) et fiabilisation du déploiement.
Messages d’erreur de dépôt plus clairs (fichier .pbix, .pbip non zippé).
Version 1.0.0
13 juin 2026
Première version publiée.
Inclus
Analyse des rapports .pbip et moteur de règles déterministe (modèle, mémoire VertiPaq, DAX, extraction).
Réécriture DAX assistée par IA avec garde-fou de fidélité (mêmes champs garantis), bascule des relations bidirectionnelles vers CROSSFILTER et déport assisté des colonnes calculées vers Power Query.
Import de la volumétrie et de la cardinalité réelles (sans envoi de données) pour prioriser par impact mesuré.
Génération du .pbip optimisé, confidentialité par retrait des données avant envoi, hébergement en Europe et conservation 7 jours.