2017-10-09 4 views
0

ビジネスケース:
Excel IDのリストがExcelスプレッドシートにあります。 Power Queryを使用して、これらのIDをSQL Serverデータベース内の詳細テーブルと結合したいと考えています。私はわずか1万のレコードより大きいテーブル全体をインポートする方法を知っているExcelでローカルデータセットを組み込むSQL Serverに対するクエリクエリ

問題現在、電源クエリを使用して
は、その後、左はIDのローカルテーブルを対象に、既存のクエリに対してそれに参加します。

私がしたいのは、元のクエリでそのIDのセットを送信して、テーブル全体を戻してからフィルタリングしないということです。

質問
を以下に示したものと同様のローカルテーブルをターゲットにIN句を配置した例はありますか?

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

SQL Serverテーブルへの接続を作成するだけの場合、Power Queryはデータベーステーブル全体を戻しません。 これは、[テーブルの結合]ボタンと同じくらい簡単です。 Left Outerがデフォルトです。 これは、常に何百万行もの接続されたOracle表で行います。 – tbur

答えて

1

私はまず、ExcelスプレッドシートのキーIDで「接続のみ」のクエリを作成します。

次に、SQLテーブルに接続して新しいクエリを開始します。このクエリでは、Mergeステップを追加して、キーIDクエリを内部結合(フィルタ)として適用します。

これは、フィルタを適用するために1m行をダウンロードしますが、これは主にメモリで行われるため、驚くほど高速です。フィルタリングされた結果はExcelテーブルにのみ書き込まれます。

パフォーマンスを向上させるには、マージステップの前に行と列をフィルタリングします。

+0

私は、PQが直接SQL接続で動作しているときに、MコードのすべてがバックエンドのSQL文に変換されると考えています。実際には一連のSQL文を実行しており、最終的なクエリではテーブル全体をダウンロードする必要はありません。クエリのステップを右クリックし、[ネイティブクエリの表示]オプションをクリックすると、これを確認できます。 私はPQがこれを個人的にどのように正確にテストすることができたことはありませんでした。しかし、それはPostgreSQLのネイティブなコネクターに問題があるためです... – Wedge

関連する問題