Support formation Rapports Power BI

Query folding

En bref

  • Objectifs : expliquer le query folding (pliage de requêtes) ; vérifier jusqu'à quelle étape une requête se plie ; ordonner les étapes pour préserver le pliage ; savoir quand il est indispensable.
  • Prérequis : page « Transformations courantes », connexion à une base de données (partie 1).
  • Niveau : avancé.

Pourquoi ?

Sur une table de plusieurs millions de lignes, il est bien plus rapide de demander à la base de données « les ventes de 2026, triées par date » que de rapatrier toute la table pour la filtrer ensuite dans Power BI. Le query folding fait exactement cela : il traduit vos étapes Power Query en une requête native (SQL, par exemple) exécutée par la source. Il est indispensable en mode DirectQuery et pour l'actualisation incrémentielle.

Notions clés

Le principe

Sans pliage, le moteur Power Query (moteur « mashup ») récupère les données brutes puis exécute lui-même toutes les transformations, sur le poste ou sur la passerelle. Avec pliage, les étapes sont regroupées en une seule requête native envoyée à la source, qui renvoie un résultat déjà filtré et transformé.

RésultatTravail de la sourceTravail de Power Query
Pliage completToutes les transformationsMinimal
Pliage partielLes premières étapes, jusqu'à la première étape non traduisibleLes étapes restantes
Aucun pliageRenvoie les données brutesToutes les transformations

Ce qui plie, ce qui ne plie pas

  • Le pliage dépend du connecteur : les bases relationnelles (SQL Server, Azure SQL, Oracle, entrepôt Fabric...) le prennent en charge ; les fichiers Excel, CSV ou les dossiers n'ont pas de moteur de requête et ne plient jamais.
  • Plient généralement sur une base SQL : filtrer des lignes, choisir ou supprimer des colonnes, trier, conserver les premières lignes, regrouper, fusionner deux tables de la même base.
  • Interrompent souvent le pliage : une colonne personnalisée sans équivalent dans la source, l'ajout d'une colonne d'index, la combinaison de sources différentes, certaines fonctions M avancées. Toutes les étapes qui suivent sont alors exécutées par Power Query.

Quand le pliage est-il nécessaire ?

  • DirectQuery et mode Double : la requête doit se plier entièrement, sinon elle est refusée.
  • Importation : le pliage est facultatif, mais il réduit nettement la durée des actualisations sur les gros volumes.
  • Actualisation incrémentielle : le filtre sur les paramètres RangeStart et RangeEnd doit se plier ; sinon Power Query rapatrie toutes les lignes à chaque actualisation de partition. Source

Pas à pas

1. Connectez-vous à une base SQL Server (par exemple AdventureWorksDW, fournie par le formateur) et ouvrez une table dans l'éditeur Power Query.

2. Appliquez un tri, un filtre et une suppression de colonnes.

3. Faites un clic droit sur la dernière étape : si Afficher la requête native est disponible, la requête se plie jusqu'à cette étape. Cliquez dessus pour lire le SQL généré.

[Capture : menu contextuel d'une étape dans Étapes appliquées, commande Afficher la requête native active]

4. Ajoutez une colonne d'index, puis refaites un clic droit sur la dernière étape : Afficher la requête native est grisée, le pliage s'est arrêté.

5. Déplacez l'étape qui bloque le pliage le plus bas possible (glisser-déposer), après les filtres et suppressions de colonnes, et vérifiez de nouveau.

6. Dans un Dataflow Gen2 (Power Query Online), les indicateurs de pliage affichés à côté de chaque étape donnent la même information d'un coup d'œil : Pliage, Pas de pliage, Pourrait plier, Opaque, Inconnu. Ils ne sont pas disponibles dans Power BI Desktop. Source

[Capture : éditeur d'un Dataflow Gen2, volet Étapes appliquées avec les icônes d'indicateurs de pliage]

Exemple

La requête suivante trie la table des devises d'AdventureWorksDW :

let
    Source = Sql.Database("NomDuServeur", "AdventureWorksDW2022"),
    dbo_DimCurrency = Source{[Schema = "dbo", Item = "DimCurrency"]}[Data],
    #"Lignes triées" = Table.Sort(dbo_DimCurrency, {{"CurrencyAlternateKey", Order.Ascending}})
in
    #"Lignes triées"

Afficher la requête native sur l'étape « Lignes triées » montre le SQL envoyé au serveur :

select [_].[CurrencyKey],
    [_].[CurrencyAlternateKey],
    [_].[CurrencyName]
from [dbo].[DimCurrency] as [_]
order by [_].[CurrencyAlternateKey]

Si vous devez écrire votre propre SQL, utilisez Value.NativeQuery plutôt que de coller la requête dans la boîte de connexion : la fonction accepte des paramètres et, avec l'option EnableFolding = true, laisse les étapes suivantes se plier sur certaines sources. Source

let
    Source = Sql.Database("NomDuServeur", "AdventureWorksDW2022"),
    Devises = Value.NativeQuery(Source, "select CurrencyKey, CurrencyName from dbo.DimCurrency", null, [EnableFolding = true])
in
    Devises

Pièges et bonnes pratiques

  • Placez en tête de requête les étapes qui plient (filtres, choix de colonnes, regroupements), et en fin de requête celles qui bloquent le pliage (colonnes d'index, colonnes personnalisées complexes).
  • Une requête SQL native collée dans la boîte de connexion empêche le pliage des étapes suivantes : incluez-y toute la logique, ou passez par une vue dans la base.
  • Combiner une base de données et un fichier Excel dans une même requête arrête le pliage ; pensez aussi aux niveaux de confidentialité (page précédente).
  • Pour mesurer le gain, utilisez les diagnostics de requête (onglet Outils > Démarrer les diagnostics dans l'éditeur). Source

À retenir

  • Le query folding délègue les transformations à la source sous forme d'une requête native.
  • Il dépend du connecteur : bases relationnelles oui, fichiers non.
  • Dans Power BI Desktop, Afficher la requête native indique si une étape se plie ; les indicateurs de pliage sont propres à Power Query Online.
  • Il est obligatoire en DirectQuery et indispensable à l'actualisation incrémentielle.

Pour aller plus loin

  • Recommandations sur le query folding dans Power BI. Source
  • Principes de base du pliage de requêtes. Source
  • Indicateurs de query folding. Source
  • Actualisation incrémentielle pour les modèles sémantiques. Source