2017-10-09 8 views
0

Business Case:
J'ai une liste d'ID de clé dans une feuille de calcul Excel. Je veux utiliser Power Query pour joindre ces ID avec une table de détails dans une base de données SQL Server.Incorporation d'un ensemble de données local dans Excel Power Query par rapport à SQL Server

Problème
Actuellement à l'aide de puissance Interrogation Je ne sais comment importer toute la table, ce qui est supérieur à 1 million d'enregistrements, puis faites une jointure gauche sur contre une requête existante qui cible une table locale d'ID. Ce que je veux faire est d'envoyer cet ensemble d'IDs dans la requête d'origine afin que je ne retire pas la table entière, puis le filtre.

Question
est-il un exemple de placer une clause dans le ciblage d'une table locale similaire à ce qui est indiqué ci-dessous?

= Sql.Database("SQLServer001", "SQLDatabase001", 
[Query="SELECT * FROM DTree WHERE ParentID 
IN(Excel.CurrentWorkbook(){[Name="tbl_IDs"]}[Content])"]) 
+1

Power Query ne rétablira pas la totalité de la table de base de données si vous venez de créer une connexion à la table SQL Server. Ensuite, c'est aussi simple que le bouton Fusionner les tables. Left Outer est la valeur par défaut. Je le fais avec des tables Oracle connectées avec des millions de lignes tout le temps. – tbur

Répondre

1

Je voudrais d'abord construire une requête "Connexion uniquement" sur les ID de clé de feuille de calcul Excel.

Ensuite, je voudrais commencer une nouvelle requête en se connectant à la table SQL. Dans cette requête, j'ajouterais une étape de fusion pour appliquer la requête d'ID de clé en tant que jointure interne (filtre).

Cela va télécharger les lignes de 1m pour appliquer le filtre, mais il est étonnamment rapide car cela se fait principalement en mémoire. Il écrira seulement le résultat filtré à une table Excel.

Pour améliorer les performances, filtrez autant que possible les lignes et les colonnes avant l'étape de fusion.

+0

Je crois que lorsque PQ fonctionne à partir d'une connexion SQL directe, tout le code M est converti en instructions SQL sur le backend. Donc, en fait, il suffit d'exécuter une série d'instructions SQL et la requête finale évite d'avoir à télécharger la table entière. Vous pouvez faire un clic droit sur une étape de la requête et cliquer sur l'option "View Native Query" pour voir ceci. Je n'ai jamais été capable de tester comment exactement PQ le fait personnellement, en raison de problèmes avec son connecteur natif PostgreSQL ... – Wedge