クエリ診断を使用すると、Power BI Desktop で作成中と更新時にPower Queryが行っていることを理解しやすくなります。 この機能は、完全な更新中に使用する機能の追加など、今後拡大する予定ですが、現在、それを使用して、出力しているクエリの種類、更新の作成中に発生する可能性のある速度低下、およびどのようなバックグラウンド イベントが発生しているのかを把握できます。
クエリ診断を使用するには、Power Query エディターのリボンの [ツール] タブに移動します。
既定では、クエリ診断の実行には管理者権限が必要になる場合があります (IT ポリシーによって異なります)。 クエリ診断を実行できない場合は、Power BI デスクトップ オプション ページを開きます。 [診断] タブで、クエリ エディターで [有効にする] を選択します (管理者として実行する必要はありません)。 この選択により、Power Query エディターではなく、Power BIに完全な更新を行うときに診断をトレースすることはできなくなりますが、プレビューと作成時に引き続き使用できます。
診断を開始するたびに、Power Query はユーザーの操作によって実行されるあらゆる評価のトレースを開始します。 ほとんどのユーザーが考える評価は、更新を行ったり、初めてデータを取得したときです。 ただし、コネクターの種類によっては、評価を引き起こす可能性のあるアクションは多数存在します。 たとえばSQLコネクタを使用してフィルタリングする値のリストを取得すると評価も開始されますがユーザークエリには関連付けられず、それが診断に表示されます。 他のシステム生成クエリには、ナビゲーターやデータ取得エクスペリエンスが含まれる場合があります。
[ステップを診断する] をクリックすると、Power Query により、表示しているステップだけを対象とした特別な評価が実行されます。 その後、そのステップ順の診断が表示されます。クエリの他のステップの診断は表示されません。 この評価により、問題をより簡単に絞り込めるようになります。
Start Diagnostics からすべてのトレースを記録している場合は、Stop diagnostics を押すことが重要です。 診断を停止すると、エンジンは記録されたトレースを収集し、適切な出力に解析することができます。 このステップを実行しないと、トレースは失われます。
診断の種類
診断には 3 種類あり、そのうちの 1 つに 2 つの詳細レベルがあります。
これらの診断の 1 つ目は、詳細ビューと概要ビューを備えたプライマリ診断です。 概要ビューは、クエリで時間がかかっている場所をすぐに把握できるようにすることを目的としています。 詳細ビューは 1 行ずつのより詳細な情報であり、一般に、パワー ユーザーによる深刻な診断にのみ必要です。
このビューでは、データ ソース クエリ列などの一部の機能は、現在、特定のコネクタでのみ使用できます。
データ プライバシー パーティションにより、データのプライバシーに使用される論理パーティションについて理解を深めることができます。
注
Power Queryは、直接トリガーしなかった評価を実行する場合があります。 これらの評価の一部では、クエリを最適化したり、ユーザー エクスペリエンスを向上させたりするためのメタデータを取得します (フィルター行エクスペリエンスに表示される列内の個別の値の一覧の取得など)。 また、コネクタによる並列評価の処理方法に関連する評価の場合もあります。 診断で意味のないクエリが繰り返し表示される場合は、通常のサポート チャネルを通じて連絡してください。
概要ビューと詳細ビュー
クエリ診断では、概要と詳細の 2 つのビューが提供されます。 概要ビューでは、複数の関連する操作が 1 つの操作に "まとめられます"。 このプロセスでは、各オペレーションで収集された詳細が統合され、排他的時間が合算されます。 このプロセスで情報が失われることはありません。
概要ビューでは、簡単に概要を確認できるように、評価中に発生したことの概要が示されます。 特定の操作のさらに詳細な内訳が必要な場合、ユーザーはグループ ID を確認し、対応するグループ化された操作を詳細ビューで表示できます。
複数の評価について説明する
Power Query エディターで更新が行われると、Power Queryはバックグラウンドで多くの作業を実行して、Fluent ユーザー エクスペリエンスを提供します。 たとえば、 プレビューの更新時に、エバリュエーターは指定された各クエリの最後のステップを実行します。 その後、バックグラウンドで、n-1 ステップ、n-2 ステップ、n-3 ステップ、および後続の各ステップを順番に実行します。 前の手順に戻ると、結果はすでに表示されています。
より高いパフォーマンスを実現するため、現在は、前のステップに戻る際に最終クエリ プランの各部分を毎回再実行しなくて済むよう、一部がキャッシュされます。 このキャッシュは通常の作成には役立ちますが、後の評価ではキャッシュされたデータが取得されるので、常に正しいステップ比較情報が得られるとは限りません。
診断スキーマ
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 は、クエリの可能な限り多くの部分をバックエンド データ ソースに対して実行するフォールディングと呼ばれる処理を行います。 DirectQuery モード (Power Query 経由) では、有効になっている場合、フォールディングする変換のみが実行されます。 インポート モードでは、フォールディングできない変換は代わりにローカルで実行されます。
[データ ソース クエリ] 列には、バックエンド データ ソースに送信Power Queryクエリまたは HTTP 要求と応答が表示されます。 エディターでクエリを作成すると、多くのデータ ソース クエリが生成されます。 これらのクエリの一部は、プレビューをレンダリングする実際の最終的なデータ ソース クエリです。 ただし、他のクエリでは、データ プロファイル、フィルター ドロップダウン、結合に関する情報、またはスキーマのメタデータの取得がサポートされる場合があります。
一般に、特に懸念すべき理由がない限り、生成されるデータ ソース クエリの数を気にする必要はありません。 代わりに、適切な内容が取得されていることを確認することに注目する必要があります。 この列は、Power Query の評価が完全にフォールディングされたかどうかを判断するのにも役立ちます。
追加情報
コネクタによって多くの情報が取得されます。 その多くは不規則であり、標準の列階層にうまく収まりません。 この情報は、追加情報列のレコードに含まれます。 カスタム コネクタから記録された情報もここに表示されます。
行数
データ ソース クエリによって返された行数。 すべてのコネクタで有効になっているわけではありません。
コンテンツの長さ
一般的に定義されている HTTP 要求によって返される内容の長さ。 このスキーマはすべてのコネクタで有効になっているわけではなく、要求をチャンクで取得するコネクタでは正確ではありません。
ユーザークエリです
ユーザーによって作成され、左側のウィンドウに表示されているクエリか、それとも他のユーザー アクションによって生成されたものかを示すブール値。 他のユーザー アクションには、フィルター選択や、データの取得エクスペリエンスでのナビゲーターの使用などが含まれます。
パス
パスは、1 回の評価内のすべての操作の間隔ツリーの一部として表示されるときの、操作の相対的なルートを表します。 ツリーの最上部 (ルート) には、Evaluation という名前でパスが "0" の 1 つの操作があります。この評価の開始時刻は、この評価全体の開始に対応します。 この評価の終了時刻は、評価全体が完了した時刻を示します。 この最上位の操作は、ツリーのルートとして機能することが唯一の目的であるため、その排他継続時間は 0 です。
以降の操作はルートから分岐します。 たとえば、操作のパスは "0/1/5" などとなります。 このパスは次のように理解されます。
- 0: ツリーのルート
- 1: 現在の操作の親
- 5: 現在の操作のインデックス
操作 "0/1/5" には子ノードがある場合があります。その場合、パスの形式は "0/1/5/8" となり、8 は子のインデックスを表します。
グループ識別子
2 つ (またはそれ以上) の操作の結合は、それによって詳細が失われる場合は発生しません。 グループ化は、評価中に実行される "コマンド" とほぼ同じになるように設計されています。 詳細ビューでは、概要ビューに集約されているグループに対応するグループ ID を、複数の操作が共有します。
ほとんどの列と同様に、グループ ID は ID 列によってフィルター処理された特定の評価内でのみ関連します。
データプライバシーパーティションスキーマ
Id
他のクエリ診断結果の ID と同じです。 整数部分は 1 つのアクティビティ ID を表し、小数部分は 1 つの評価を表します。
パーティション キー
ファイアウォール パーティションとして使用されるクエリとステップに対応します。
ファイアウォールグループ
パーティションのプライバシー レベルの詳細など、このパーティションを個別に評価する必要がある理由を説明する分類。
アクセスされたリソース
このパーティションによってアクセスされすべてのリソースのリソース パスの一覧で、一般にデータ ソースを一意に示しています。
入力の分割
現在のパーティションが依存するパーティション キーの一覧 (この一覧はグラフの作成に使用される場合があります)。
式
パーティションのクエリ/ステップの上で評価される式。 いくつかのケースでは、クエリ/ステップと一致します。
開始時刻
このパーティションの評価が開始した時刻。
終了時刻
このパーティションの評価が終了した時刻。
期間
終了時刻から開始時刻を引いた値。
排他時間
パーティションが 1 つのスレッドで実行されると想定した場合、排他継続時間は、このパーティションによるものあると考えることができる "実際の" 継続時間です。
排他継続時間の割合
排他時間の百分率。
診断
この列は、クエリ診断の "集計" または "詳細" もキャプチャされた場合にのみ表示され、ユーザーは 2 つの診断出力を対応させることができます。
パフォーマンス カウンター スキーマ
パフォーマンス カウンターを実行すると、0.5 秒ごとに Power Query によってリソース使用率のスナップショットが取得されます。 このスナップショットは、非常に高速なクエリには役に立ちませんが、多くのリソースを使用するクエリには役に立つ場合があります。
% プロセッサ時間
クエリでプロセッサによって消費された時間の割合。 この割合は、複数のプロセッサが使用されたために 100% を超える可能性があります。
合計プロセッサ時間
クエリに費やされたプロセッサ時間の合計時間。
1 秒あたりの IO データ バイト数
データ ソースから受信したデータのスループット速度 (1 秒あたりのバイト数で表されます)。
コミット (バイト)
評価によって予約された仮想メモリの量。
ワーキングセット(バイト)
評価用に予約されるメモリ量。