次の方法で共有


クエリが複数回実行されるのはなぜですか?

Power Query で更新する場合、スムーズなユーザー エクスペリエンスを提供し、クエリを効率的かつ安全に実行するために、バックグラウンドで多くのことが行われます。 ただし、場合によっては、データが更新された際に Power Query によって複数のデータ ソース要求がトリガーされたことに気付くことがあります。 場合によっては、これらの要求が正常であることもありますが、それ以外の場合はそれらの要求を防止できます。

複数の要求が発生した場合

次のセクションでは、Power Query がデータ ソースに複数の要求を送信できる場合の、いくつかのインスタンスについて説明します。

コネクタのデザイン

コネクタは、メタデータ、結果のキャッシュ、改ページなど、さまざまな理由でデータ ソースへの複数の呼び出しを行うことができます。 この動作は正常であり、そのように動作するように設計されています。

1 つのデータ ソースを参照する複数のクエリ

複数のクエリがそのデータ ソースからプルされた場合、同じデータ ソースに対する複数の要求が発生する可能性があります。 これらの要求は、1 つのクエリのみがデータ ソースを参照している場合でも発生する可能性があります。 他の 1 つ以上のクエリがそのクエリを参照している場合は、各クエリとそれに依存するすべてのクエリが個別に評価されます。

デスクトップ環境では、データ モデル内のすべてのテーブルの 1 回の更新が、1 つの共有キャッシュを使用して実行されます。 キャッシュを使用すると、同じデータ ソースに対して複数の要求が発生する可能性を減らすことができます。これは、1 つのクエリが別のクエリに対して既に実行されていて、キャッシュされている場合があるためです。 ただし、ここでも、次の理由で複数の要求を取得することができます。

  • データ ソースはキャッシュされません (ローカル CSV ファイルなど)。
  • データ ソースへの要求は、ダウンストリーム操作 (フォールディング処理を変更する可能性がある) のために既にキャッシュされた要求とは異なります。
  • キャッシュが小さすぎます (比較的可能性が低い)。
  • クエリは、ほぼ同時に実行されます。

クラウド環境では、各クエリは独自の個別のキャッシュを使用して更新されます。 そのため、別のクエリに対して同じ要求が既にキャッシュされている場合、クエリのメリットを得られません。

折りたたみ

Power Query のフォールディング レイヤーでは、ダウンストリームで実行される操作に基づいて、データ ソースに対して複数の要求を生成することができます。 このような場合は、Table.Buffer を使用して複数の要求を回避できます。 詳細情報: テーブルのバッファー

Power BI Desktop モデルへの読み込み

Power BI Desktop では、Analysis Services (AS) は 2 つの評価を使用してデータを更新します。1 つは AS がゼロ行を要求することによって行うスキーマを取り込むためのもので、もう 1 つはデータを取り込むためのものです。 ゼロ行スキーマを計算するためにデータを取り込む必要がある場合、重複するデータ ソース要求が発生する可能性があります。

データのプライバシー分析

データのプライバシーでは、各クエリを独自に評価して、クエリをまとめて実行するのが安全かどうかを判断します。 この評価では、データ ソースに対して複数の要求が行われる場合があります。 特定の要求がデータ プライバシー分析からのものであることを示す明らかなサインは、"上位 1000" の状態になることです (ただし、すべてのデータ ソースがこのような状態をサポートしているわけではありません)。 一般に、それが許容できると仮定するデータ プライバシーを無効にすると、更新中の "上位 1000" またはその他のデータ プライバシー関連の要求が削除されます。 詳細情報: データ プライバシー ファイアウォールを無効にする

バックグラウンド データのダウンロード ("バックグラウンド分析" とも呼ばれます)

データ プライバシーを確保するために実行される評価と同様に、Power Query エディターでは、各クエリ手順の最初の 1000 行のプレビューが既定でダウンロードされます。 これらの行をダウンロードすると、手順が選択されるとすぐにデータ プレビューを表示できるようになりますが、重複したデータ ソース要求が発生する可能性もあります。 詳細情報: バックグラウンド分析を無効にする

その他の Power Query エディターのバックグラウンド タスク

さまざまな Power Query エディターのバックグラウンド タスクによって、追加のデータ ソース リクエストがトリガーされることもあります (たとえば、クエリ フォールディング分析、列プロファイリング、結果を Excel に読み込んだ後に Power Query がトリガーする 1000 行プレビューの自動更新など)。

複数のクエリの分離

クエリプロセスの特定の部分をオフにして、重複する要求の送信元を分離することで、複数のクエリのインスタンスを分離することができます。 たとえば、次のように開始するとします。

  • Power Query エディターで
  • ファイアウォールが無効になっている
  • バックグラウンド分析が無効になっている
  • 列プロファイルおよびその他のバックグラウンド タスクが無効になっている
  • [省略可能] Table.Buffer の実行

この例では、Power Query エディターのプレビューを更新すると、1 つの M 評価のみが生成されます。 この時点で重複する要求が発生した場合、それらはクエリの作成方法に固有のものです。 それ以外の場合、上記の設定を 1 つずつ有効にすると、重複する要求がどの時点で発生しているかを確認できます。

以降のセクションで、これらの手順について詳しく説明します。

Power Query エディターのセットアップ

クエリを再接続または再作成する必要はありません。Power Query エディターでテストするクエリを開くだけです。 既存のクエリを使用しない場合は、エディターでクエリを複製することができます。

データ プライバシー ファイアウォールを無効にする

次の手順では、データ プライバシー ファイアウォールを無効にします。 この手順では、ソース間のデータ漏洩についての懸念がないことを前提としているため、データ プライバシー ファイアウォールの無効化は、Excel の [高速結合オプションの設定] で説明されている [常にプライバシー レベル設定を無視します] を使用して行うことができます。または、Power BI Desktop の [Power BI Desktop のプライバシーレベル] で説明されている [プライバシー レベルを無視すると、パフォーマンスが向上する場合があります] 設定を使用します。

通常のテストを再開する前に、この手順を元に戻してください。

バックグラウンド分析を無効にする

次の手順では、バックグラウンド分析を無効にします。 バックグラウンド分析は、[Power BI の Power Query バックグラウンド更新の無効化] で説明されている [バックグランドでのデータ プレビューのダウンロードを許可する] 設定によって制御されます。 Excel でこのオプションを無効にすることもできます。

バックグラウンド分析が無効になっている Excel のクエリ オプションを示す画像。

テーブルのバッファー

必要に応じて、Table.Buffer を使用してすべてのデータを強制的に読み取ることもできます。これにより、読み込み中の処理が模倣されます。 Power Query エディターで Table.Buffer を使用するには、次のようにします。

  1. Power Query エディターの数式バーで、[fx] ボタンを選択して新しい手順を追加します。

    fx ボタンの位置が強調表示されている画像。

  2. 数式バーで、前のステップの名前を Table.Buffer で囲みます (<前のステップ名はここに表示されます>)。 たとえば、前の手順の名前が Source の場合、数式バーには = Source と表示されます。 数式バーの手順を編集して = Table.Buffer(Source) と呼びます。

詳細情報: Table.Buffer

テストの実行

テストを実行するには、Power Query エディターで更新を行います。

更新ボタンの位置が強調表示されている画像。