Partager via


Indicateurs de Query Folding

Remarque

Avant de lire cet article, nous vous recommandons de lire la vue d’ensemble de l’évaluation des requêtes et du Query Folding dans Power Query pour mieux comprendre le fonctionnement du Query Folding dans Power Query.

Les indicateurs de Query Folding vous aident à comprendre les étapes qui se replient ou ne se replient pas.

Avec les indicateurs de Query Folding, cela devient évident lorsque vous apportez une modification qui interrompt le repli. Cette fonctionnalité vous aide à résoudre plus facilement et rapidement les problèmes, à éviter les problèmes de performances en premier lieu et à mieux comprendre vos requêtes. Dans la plupart des cas, les étapes se replient ou ne se replient pas. Toutefois, il existe de nombreux cas où le résultat n’est pas aussi évident et ces cas sont abordés dans les indicateurs de diagnostic d’étape (dynamique, opaque et inconnu).

Remarque

La fonctionnalité indicateurs de Query Folding est disponible uniquement pour Power Query Online.

Interprétation des diagnostics de Query Folding

Lorsque vous examinez l’indicateur de Query Folding en regard d’une étape, la chose la plus importante à comprendre est que l’état de diagnostic n’est pas séquentiel. En d’autres termes, l’indicateur de cette étape décrit si la requête dans son ensemble, jusqu’à ce point, repliée ou non. Si vous avez un indicateur qui indique que la requête ne se replie pas, suivie d’un indicateur qui montre qu’elle se replie, cela signifie que votre requête jusqu’à ce point se replie.

Cette interprétation fonctionne même avec une requête simple sur une source SQL. Par exemple, à l’aide de l’exemple de base de données AdventureWorks, connectez-vous à la table Production.Product et chargez des données. Le chargement de cet exemple via le navigateur Power Query fournit la requête suivante :

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data]
in
  Navigation

Si vous examinez comment ce code s’affiche dans les indicateurs de Folding, vous remarquez que la première étape est non concluante. Mais la deuxième étape effectue un repli, ce qui signifie que la requête jusqu’à ce point se replie.

Capture d’écran des étapes Source et Navigation dans le volet Indicateur de repli.

Dans cet exemple, les étapes initiales ne peuvent pas être confirmées pour le repli (elles ne sont pas concluantes), mais la dernière étape générée lorsque vous chargez des données initialement se replie. La façon dont les premières étapes (Source, et parfois d’autres étapes de navigation) sont gérées dépend du connecteur. Avec SQL, par exemple, il est géré en tant que valeur de table de catalogue, qui ne se replie pas. Toutefois, dès que vous sélectionnez des données pour ce connecteur, elles se replient.

À l’inverse, cette indication peut également signifier que votre requête se replie jusqu’à un point, puis cesse de se replier. Contrairement au cas où vous disposez d’un indicateur de repli pour l’étape qui montre que tout se replie, lorsque vous avez un indicateur de non-repli, cela ne signifie pas que tout ne replie pas. Au lieu de cela, cela signifie que « pas tout » ne se replie. En règle générale, tout jusqu’au dernier indicateur de repli se replie, avec plus d’opérations qui se produisent après.

En modifiant l’exemple précédent, vous pouvez donner une transformation qui ne se replie jamais : mettre en majuscule chaque mot.

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data],
  #"Capitalized each word" = Table.TransformColumns(Navigation, {{"Name", each Text.Proper(_), type text}})
in
  #"Capitalized each word"

Dans les indicateurs de Query Folding, vous avez les mêmes indicateurs qu’auparavant, sauf que l’étape finale ne se replie pas. Tout ce qui se passe jusqu’à cette dernière étape est effectué sur la source de données, tandis que la dernière étape est effectuée localement.

Capture d’écran des étapes Source, Navigation et Majuscule à chaque mot dans le volet Indicateur de repli.

Indicateurs de diagnostic d’étape

Les indicateurs de repli de requête utilisent un plan de requête sous-jacent et nécessitent qu’il puisse obtenir des informations sur la requête pour la signaler. Actuellement, le plan de requête prend uniquement en charge les tables. Par conséquent, certains cas (listes, enregistrements, primitives) ne sont pas déclarés comme se repliant ou non. De même, les tables constantes sont déclarés comme opaques.

Indicateur Icon Description
Pliage L’indicateur de repli vous indique que la requête jusqu’à cette étape est évaluée par la source de données.
Pas de repli L’indicateur de non-repli vous indique qu’une partie de la requête jusqu’à cette étape est évaluée en dehors de la source de données. Vous pouvez le comparer avec le dernier indicateur de repli, s’il en existe un, pour voir si vous pouvez réorganiser votre requête pour qu’elle soit plus performante.
Peut se replier Les indicateurs de repli peuvent être rares. Ils signifient qu’une requête « peut » se replié. Ils indiquent que le repli ou non est déterminé au moment de l’exécution, lors de l’extraction des résultats de la requête et que le plan de requête est dynamique. Ces indicateurs ne s’affichent en général qu’avec des connexions ODBC ou OData.
Opaque Les indicateurs opaques vous indiquent que le plan de requête résultant n’est pas concluant pour une raison quelconque. Il indique généralement qu’il existe une table « constante » vraie, ou que cette transformation ou connecteur n’est pas prise en charge par les indicateurs et l’outil de plan de requête.
Inconnu Les indicateurs inconnus représentent une absence d’un plan de requête, soit en raison d’une erreur ou d’une tentative d’exécution de l’évaluation du plan de requête sur une autre table (par exemple, un enregistrement, une liste ou une primitive).

Exemple d'analyse

Pour obtenir un exemple d’analyse, commencez par vous connecter à la table Production.Product dans Adventure Works (SQL). La charge initiale, similaire à l’exemple initial, ressemble à l’image suivante.

Capture d’écran des indicateurs d'étape initiale pour le chargement de la table Produits.

L’ajout d’autres étapes qui s’étendent sur cette ligne verte sur le côté droit. Cette extension se produit car cette étape se replie également.

Capture d’écran de l’ajout d'une étape de suppression de colonne à la requête précédente, prolongeant la ligne verte de l'indicateur de repli.

L’ajout d’une étape qui ne se replie pas affiche un autre indicateur. Par exemple, Mettre en majuscules chaque mot ne se replie jamais. L’indicateur change, montrant qu’à partir de cette étape, il s’est arrêté de replier. Comme mentionné précédemment, les étapes précédentes se replient toujours.

Capture d’écran montrant comment l’ajout d’une étape Capitaliser chaque mot interrompt le repli.

L’ajout d’autres étapes en aval qui dépendent de Capitaliser chaque étape continue à ne pas se replier.

Capture d’écran montrant comment le repli ne se produit pas après avoir ajouté d’autres étapes.

Toutefois, si vous supprimez la colonne à laquelle vous avez appliqué la mise en majuscules afin que le plan de requête optimisé puisse se replier une fois de plus, vous obtenez un résultat semblable à l’image suivante. Cependant, quelque chose comme cela est rare. Cette image montre comment il ne s’agit pas seulement de l’ordre des étapes, mais des transformations réelles qui s’appliquent également.

Capture d’écran montrant comment la suppression de la colonne problématique permet aux éléments de se replier sans supprimer l’étape.