クエリ診断

クエリ診断を使用すると、Power BI Desktop での作成時および更新時に、Power Query で行われていることについて理解を深めることができます。 この機能は今後も拡張される予定ですが (完全な更新中に使用する機能の追加など)、現時点では、この機能を使用すると、生成しているクエリの種類、作成の更新の間に発生する可能性のある速度低下、発生しているバックグラウンド イベントの種類を把握できます。

クエリ診断を使用するには、Power Query エディターのリボンの [ツール] タブに移動します。

クエリ診断。

既定では、クエリ診断の実行には管理者権限が必要になる場合があります (IT ポリシーによって異なります)。 クエリ診断を実行できない場合は、Power BI のオプションのページを開き、[診断] タブで [クエリ エディターで有効にする (管理者として実行する必要はありません)] を選びます。 これを選ぶと、Power Query エディターではなく Power BI を完全に更新するときに診断をトレースできなくなりますが、プレビューやオーサリングなどでは引き続き使用できます。

クエリ診断のオプション。

診断を開始するたびに、発生したすべての評価の Power Query によるトレースが開始されます。 ほとんどのユーザーが考える評価は、更新を行ったり、初めてデータを取得したときのものですが、コネクタによっては、評価の原因となる可能性がある多くのアクションがあります。 たとえばSQLコネクタを使用してフィルタリングする値のリストを取得すると評価も開始​​されますがユーザークエリには関連付けられず、それが診断に表示されます。 他のシステム生成クエリには、ナビゲーターやデータ取得エクスペリエンスが含まれる場合があります。

[ステップを診断する] をクリックすると、Power Query により、表示しているステップだけを対象とした特別な評価が実行されます。 その後、そのステップ順の診断が表示されます。クエリの他のステップの診断は表示されません。 これにより、問題をより簡単に絞り込めるようになります。

これは、[診断の開始] から [診断の停止] までのすべてのトレースを記録している場合に重要です。 診断を停止すると、エンジンは記録されたトレースを収集し、適切な出力に解析することができます。 このステップを行わないと、トレースが失われます。

診断の種類

現在、3 種類の診断が提供されており、そのうちの 1 つには 2 つの詳細レベルがあります。

これらの診断の 1 つ目は、詳細ビューと概要ビューを備えたプライマリ診断です。 概要ビューは、クエリで時間がかかっている場所をすぐに把握できるようにすることを目的としています。 詳細ビューは 1 行ずつのより詳細な情報であり、一般に、パワー ユーザーによる深刻な診断にのみ必要です。

このビューでは、データ ソース クエリ列などの一部の機能は、現在、特定のコネクタでのみ使用できます。 将来的にこのカバレッジの範囲を広げる作業が行われます。

データ プライバシー パーティションにより、データのプライバシーに使用される論理パーティションについて理解を深めることができます。

Note

Power Query では、ユーザーが直接トリガーしていない可能性がある評価が実行されることがあります。 これらの評価の一部は、クエリを最適化したり、より良いユーザー エクスペリエンスを提供したりできるよう、メタデータを取得するために実行されます (フィルター行のエクスペリエンスに表示される列内の個別の値の一覧を取得するなど)。 また、コネクタによる並列評価の処理方法に関連する評価の場合もあります。 同時に、クエリ診断で意味がないと思われるクエリが繰り返されていることが判明した場合は、通常のサポート チャネルを通じてお気軽にご連絡ください。お客様のフィードバックが製品の改善に役立てられます。

概要ビューと詳細ビュー

クエリ診断では、概要と詳細の 2 つのビューが提供されます。 概要ビューでは、複数の関連する操作が 1 つの操作に "まとめられます"。 このプロセスでは、各操作によって収集された詳細が結合され、排他継続時間は合算されます。 このプロセスで情報が失われることはありません。

概要ビューでは、簡単に概要を確認できるように、評価中に発生したことの概要が示されます。 特定の操作のさらに詳細な内訳が必要な場合、ユーザーはグループ ID を確認し、対応するグループ化された操作を詳細ビューで表示できます。

複数の評価について説明する

Power Query エディターで更新すると、詳細なユーザー エクスペリエンスを提供するために、バックグラウンドで多くの処理が実行されます。 たとえば、[プレビューを更新] を実行すると、特定の各クエリの最後のステップがエバリュエーターによって実行されます。 しかし、バックグラウンドでは、ユーザーが前のステップに戻った場合に既に使用可能になっているよう、n-1 ステップ、n-2 ステップなどが順次実行されます。

パフォーマンスを向上させるため、ステップを戻るときに最終的なクエリ プランのすべての部分を再実行する必要がないよう、現在は、一部のキャッシュが実行されます。 このキャッシュは通常の作成には役立ちますが、後の評価ではキャッシュされたデータが取得されるので、常に正しいステップ比較情報が得られるとは限りません。

診断スキーマ

Id

記録の結果を分析するときは、排他継続時間の割合などの列が意味を持つように、ID で記録セッションをフィルター処理することが重要です。

ID は複合識別子です。 これは 2 つの数字 (ドットの前と後ろに 1 つ) で構成されます。 最初の値は、1 つのユーザー アクションの結果として得られるすべての評価について同じです。 つまり、更新を 2 回行うと、実行されたユーザー アクティビティごとに 1 つずつ、2 つの異なる値がドットの前に生成されます。 この番号付けは、特定の診断記録についてシーケンシャルです。

2 番目の値は、エンジンによる評価を表します。 この値は、評価がキューに登録されているプロセスの有効期間中はシーケンシャルです。 複数の診断記録セッションを実行すると、この数値はセッションが異なっても継続的に増加することがわかります。

まとめると、記録を開始し、評価を 1 回行って、記録を停止した場合、診断にはいくつかの ID が含まれます。 ただし、実行したアクションは 1 つだけなので、すべては 1.1、1.2、1.3 などとなります。

ドットで区切られた activityId と evaluationId の組み合わせにより、1 つの記録セッションの評価のための一意の識別子が提供されます。

クエリ

Power Query エディターの左側のペインに表示されるクエリの名前。

手順

Power Query エディターの右側のペインに表示されるステップの名前。 フィルター ドロップダウンなどは、通常、ステップを更新していない場合でも、フィルター処理の対象となるステップに関連します。

カテゴリ

操作のカテゴリ。

データソースの種類

これにより、SQL や Oracle など、アクセスしているデータ ソースの種類がわかります。

操作

実行されている実際の操作。 この操作には、エバリュエーターの処理、接続の開始、データ ソースへのクエリの送信などが含まれます。

[開始時間]

操作が開始した時刻。

終了時刻

操作が終了した時刻。

独占期間 (%)

イベントの排他継続時間列は、イベントがアクティブになっていた時間の長さです。 これは、イベントの開始時刻列と終了時刻列の値を減算した結果として得られる "継続時間" の値とは対照的です。 この "継続時間" の値は、イベントが開始してから終了するまでの経過時間の合計を表し、イベントが中断状態または非アクティブ状態であった時間、および別のイベントがリソースを使用していた時間が含まれる場合があります。

排他継続時間の割合は、ID 列で表される特定の評価においては合計すると約 100% になります。 たとえば、ID 1.x の行をフィルター処理した場合、排他継続時間の割合は合計で約 100% になります。 特定の診断テーブル内のすべての行の排他継続時間の割合の値を合計した場合は、このようにはなりません。

排他継続時間

排他継続時間の割合ではなく絶対時間。 評価の合計継続時間 (つまり、排他継続時間間 + イベントが非アクティブになっていた時間) は、次の 2 つの方法のいずれかで計算できます。

  • "評価" という操作を見つけます。 終了時刻と開始時刻の差により、イベントの合計時間が決まります。

  • イベントのすべての操作の最小の開始時間を、最大の終了時間から引きます。 イベントに対して収集された情報で合計継続時間が考慮されていない場合、この時間差を考慮して "トレース ギャップ" という操作が生成されることに注意してください。

リソース

データのためにアクセスしているリソース。 このリソースの正確な形式は、データ ソースによって異なります。

データソースクエリ

Power Query は、クエリの可能な限り多くの部分をバックエンド データ ソースに対して実行するフォールディングと呼ばれる処理を行います。 直接クエリ モード (Power Query) が有効になっている場合、フォールディングする変換のみが実行されます。 インポート モードでは、フォールディングできない変換はローカル環境で実行されます。

[データ ソース クエリ] 列では、バックエンド データ ソースに対して送信されたクエリまたは HTTP 要求/応答を確認できます。 エディターでクエリを作成すると、多くのデータ ソース クエリが生成されます。 これらの一部はプレビューをレンダリングするための実際の最終的なデータ ソース クエリですが、それ以外は、データ プロファイル、フィルター ドロップダウン、結合に関する情報、スキーマのメタデータの取得、その他の小さなクエリに関するものである場合がります。

一般に、特に懸念すべき理由がない限り、生成されるデータ ソース クエリの数を気にする必要はありません。 代わりに、適切な内容が取得されていることを確認することに注目する必要があります。 この列は、Power Query の評価が完全にフォールディングされたかどうかを判断するのにも役立ちます。

追加情報

コネクタによって多くの情報が取得されます。 その多くは不規則であり、標準の列階層にうまく収まりません。 この情報は、追加情報列のレコードに含まれます。 カスタム コネクタから記録された情報もここに表示されます。

行数

データ ソース クエリによって返された行数。 有効になっていないコネクタもあります。

コンテンツの長さ

一般的に定義されている HTTP 要求によって返される内容の長さ。 有効になっていないコネクタもあり、要求をチャンクで取得するコネクタでは正確ではありません。

ユーザークエリです

ユーザーによって作成され、左側のウィンドウに表示されているクエリか、それとも他のユーザー アクションによって生成されたものかを示すブール値。 他のユーザー アクションには、フィルター選択や、データの取得エクスペリエンスでのナビゲーターの使用などが含まれます。

Path

パスは、1 回の評価内のすべての操作の間隔ツリーの一部として表示されるときの、操作の相対的なルートを表します。 ツリーの最上位 (ルート) には、Evaluation という名前でパスが "0" の 1 つの操作があります。 この評価の開始時刻は、この評価全体の開始に対応します。 この評価の終了時刻は、評価全体が完了した時刻を示します。 この最上位の操作は、ツリーのルートとして機能することが唯一の目的であるため、その排他継続時間は 0 です。

その他の操作はルートから分岐します。 たとえば、操作のパスは "0/1/5" などとなります。 このパスは次のように理解されます。

  • 0: ツリーのルート
  • 1: 現在の操作の親
  • 5: 現在の操作のインデックス

操作 "0/1/5" には子ノードがある場合があります。その場合、パスの形式は "0/1/5/8" となり、8 は子のインデックスを表します。

Group ID

2 つ (またはそれ以上) の操作の結合は、それによって詳細が失われる場合は発生しません。 グループ化は、評価中に実行される "コマンド" とほぼ同じになるように設計されています。 詳細ビューでは、概要ビューに集約されているグループに対応するグループ ID を、複数の操作が共有します。

ほとんどの列と同様に、グループ ID は ID 列によってフィルター処理された特定の評価内でのみ関連します。

データプライバシーパーティションスキーマ

Id

他のクエリ診断結果の ID と同じです。 整数部分は 1 つのアクティビティ ID を表し、小数部分は 1 つの評価を表します。

パーティション キー

ファイアウォール パーティションとして使用されるクエリとステップに対応します。

ファイアウォールグループ

パーティションのプライバシー レベルの詳細など、このパーティションを個別に評価する必要がある理由を説明する分類。

アクセスされたリソース

このパーティションによってアクセスされすべてのリソースのリソース パスの一覧で、一般にデータ ソースを一意に示しています。

パーティションの入力

現在のパーティションが依存するパーティション キーの一覧 (この一覧はグラフの作成に使用される場合があります)。

Expression

パーティションのクエリとステップで評価された式。 場合によっては、クエリとステップと一致します。

[開始時間]

このパーティションの評価が開始した時刻。

終了時刻

このパーティションの評価が終了した時刻。

Duration

終了時刻から開始時刻を引いた値。

排他継続時間

パーティションが 1 つのスレッドで実行されると想定した場合、排他継続時間は、このパーティションによるものあると考えることができる "実際の" 継続時間です。

排他継続時間の割合

割合としての排他継続時間。

診断

この列は、クエリ診断の "集計" または "詳細" もキャプチャされた場合にのみ表示され、ユーザーは 2 つの診断出力を対応させることができます。

パフォーマンス カウンター スキーマ

パフォーマンス カウンターを実行すると、0.5 秒ごとに Power Query によってリソース使用率のスナップショットが取得されます。 このスナップショットは、非常に高速なクエリには役に立ちませんが、多くのリソースを使用するクエリには役に立つ場合があります。

% プロセッサ時間

クエリでプロセッサによって消費された時間の割合。 この割合は、複数のプロセッサが使用されたために 100% を超える可能性があります。

合計プロセッサ時間

クエリに費やされたプロセッサ時間の合計時間。

1 秒あたりの IO データ バイト数

データ ソースから受信したデータのスループット速度 (1 秒あたりのバイト数で表されます)。

コミット (バイト)

評価によって予約された仮想メモリの量。

ワーキングセット(バイト)

評価によって予約されたメモリの量。

追加の参考資料

さまざまなユース ケースで診断を記録する方法

記録されたトレースの読み取りと視覚化の詳細

クエリ診断を使用してクエリ操作でフォールディングされているものを理解する方法