Partager via


Pliage des requêtes sur des requêtes natives

Dans Power Query, vous pouvez définir une requête native et l’exécuter sur votre source de données. L’article Importer des données à partir d’une base de données à l’aide d’une base de données native explique comment effectuer ce processus avec plusieurs sources de données. Toutefois, à l’aide du processus décrit dans cet article, votre requête ne tirera pas parti d’un Query Folding à partir des étapes de requête suivantes.

Cet article présente une autre méthode pour créer des requêtes natives sur votre source de données à l’aide de la fonction Value.NativeQuery et conserver le mécanisme de Query Folding actif pour les étapes suivantes de votre requête.

Remarque

Nous vous recommandons de lire la documentation sur le Query Folding et les indicateurs de Query Folding pour mieux comprendre les concepts utilisés dans cet article.

Connecteurs de données pris en charge

La méthode décrite dans les sections suivantes s’applique aux connecteurs de données suivants :

Se connecter à la cible à partir de la source de données

Remarque

Pour présenter ce processus, cet article utilise le connecteur SQL Server et l’exemple de base de données AdventureWorks2019. L’expérience peut varier du connecteur au connecteur, mais cet article présente les principes fondamentaux sur l’activation des fonctionnalités de Query Folding sur les requêtes natives pour les connecteurs pris en charge.

Lorsque vous vous connectez à la source de données, il est important que vous vous connectiez au nœud ou au niveau où vous souhaitez exécuter votre requête native. Pour l’exemple de cet article, ce nœud sera le niveau de base de données à l’intérieur du serveur.

Boîte de dialogue des paramètres de connexion pour la connexion à la base de données AdventureWorks2019 sur une instance locale de SQL Server.

Après avoir défini les paramètres de connexion et fourni les informations d’identification de votre connexion, vous êtes redirigé vers la boîte de dialogue de navigation de votre source de données. Dans cette boîte de dialogue, vous verrez tous les objets disponibles auxquels vous pouvez vous connecter.

Dans cette liste, vous devez sélectionner l’objet dans lequel la requête native est exécutée (également appelée cible). Pour cet exemple, cet objet est le niveau de base de données.

Dans la fenêtre du navigateur dans Power Query, cliquez avec le bouton droit sur le nœud de base de données dans la fenêtre du navigateur et sélectionnez l’option Transformer les données. La sélection de cette option crée une nouvelle requête de l’affichage global de votre base de données, qui est la cible dont vous avez besoin pour exécuter votre requête native.

Image où l'utilisateur a fait un clic droit sur le nœud de la base de données dans le navigateur, en mettant l'accent sur l'élément du menu Transformer les données.

Une fois que votre requête arrive dans l’éditeur Power Query, seule l’étape source doit s’afficher dans le volet Étapes appliquées. Cette étape contient une table avec tous les objets disponibles dans votre base de données, comme la façon dont ils ont été affichés dans la fenêtre Navigateur.

Requête avec seulement l'étape source.

Utiliser la fonction Value.NativeQuery

L’objectif de ce processus est d’exécuter le code SQL suivant et d’appliquer davantage de transformations avec Power Query qui peuvent être repliées vers la source.

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

La première étape a été de définir la cible correcte, qui, dans ce cas, est la base de données où le code SQL sera exécuté. Une fois qu’une étape a la cible correcte, vous pouvez sélectionner cette étape , dans ce cas, source dans les étapes appliquées, puis sélectionner le bouton fx dans la barre de formule pour ajouter une étape personnalisée. Dans cet exemple, remplacez la formule Source par la formule suivante :

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

Le composant le plus important de cette formule est l’utilisation de l’enregistrement facultatif pour le paramètre de la fonction avec le champ d’enregistrement EnableFolding défini sur true.

Nouvelle formule d'étape personnalisée avec l'utilisation de la fonction Value.NativeQuery et de la requête SQL explicite.

Remarque

Vous pouvez en savoir plus sur la fonction Value.NativeQuery à partir de l’article de documentation officiel.

Une fois que vous avez entré la formule, un avertissement s’affiche pour permettre aux requêtes natives de s’exécuter pour votre étape spécifique. Vous pouvez cliquer sur Continuer pour que cette étape soit évaluée.

Cette instruction SQL génère une table avec seulement trois lignes et deux colonnes.

Requête native évaluée par rapport à la base de données cible.

Test Query Folding

Pour tester votre Query Folding, vous pouvez essayer d’appliquer un filtre à l’une de vos colonnes et voir si l’indicateur de Query Folding dans la section étapes appliquées affiche l’étape comme repliée. Dans ce cas, vous pouvez filtrer la colonne DepartmentID pour avoir des valeurs qui ne sont pas égales à deux.

Filtrage de la colonne DepartmentID pour n'avoir que les valeurs qui ne sont pas égales à deux.

Après avoir ajouté ce filtre, vous pouvez vérifier que les indicateurs de Query Folding affichent toujours le Query Folding à cette nouvelle étape.

Étape de filtrage montrée comme repliée sur la source de données dans la section des étapes appliquées.

Pour valider davantage la requête envoyée à la source de données, vous pouvez cliquer avec le bouton droit sur l’étape Filtrer les lignes et sélectionner l’option qui lit le plan de requête Afficher pour vérifier le plan de requête pour cette étape.

Dans l’affichage du plan de requête, vous pouvez voir qu’un nœud portant le nom Value.NativeQuery situé à gauche de l’écran possède un texte de lien hypertexte qui lit les détails de l’affichage. Vous pouvez cliquer sur ce texte de lien hypertexte pour afficher la requête exacte envoyée à la base de données SQL Server.

La requête native est encapsulée autour d’une autre instruction SELECT pour créer une sous-requête de l’original. Power Query fera de son mieux pour créer la requête la plus optimale en fonction des transformations utilisées et de la requête native fournie.

Plan de requête pour l'étape Lignes filtrées.

Conseil

Pour les scénarios où vous obtenez des erreurs car le Query Folding n’était pas possible, il est recommandé d’essayer de valider vos étapes en tant que sous-requête de votre requête native d’origine pour vérifier s’il peut y avoir des conflits de syntaxe ou de contexte.