Power BI でのクエリ診断の視覚化と解釈

はじめに

使用する診断を記録したら、次の手順では、診断の内容を理解できるようにします。

クエリ診断スキーマの各列が正確に何を意味するかを理解すると役立ちますが、この短いチュートリアルでは詳しく説明していません。 詳細な説明はこちらを参照してください。

一般に、視覚化を作成する場合は、詳細なテーブルを使用することをお勧めします。行の数に関係なく、調べる内容はおそらく、さまざまなリソースで費やされた時間が結果的にどのようになるか、ネイティブ クエリの出力内容を示す何らかの種類の記述であるからです。

診断の記録に関する記事で説明したように、同じテーブルまたはほぼ同じテーブル (Northwind の Customers テーブル) の OData トレースと SQL トレースを使用しています。 特に、お客様からのよくある質問と、最も簡単に解釈できるトレース セットの 1 つ (データ モデルの完全更新) に焦点を当てます。

視覚化の作成

トレースの内容を確認する場合、トレースの評価方法は数多くあります。 この記事では、視覚化の 2 分割を中心に説明します。1 つは関心のある詳細情報を示し、もう 1 つはさまざまな要因による時間の影響を簡単に示すものです。 最初の視覚化では、テーブルが使用されます。 任意のフィールドを選択できますが、進行中の内容の概要を簡単に確認するために推奨されるフィールドは次のとおりです。

2 つ目の視覚化では、1 つの選択肢として積み上げ縦棒グラフを使用します。 'Axis' パラメーターでは、'Id' または 'Step 'を使用できます。 更新を確認する場合は、エディター自体の手順には関係ないので、おそらく単に 'Id'. を確認することになります。 'Legend' パラメーターには、(必要な細分性に応じて) 'Category' または 'Operation' を設定する必要があります。 'Value' には、'Exclusive Duration' を設定します (生の期間の値を取得するように、% でないことを確認します)。 最後に、ToolTip に、'Earliest Start Time' を設定します。

視覚化が作成されたら、発生した順序を確認できるように 'Earliest Start Time' で昇順に並べ替えます。

詳細と時間の集計の視覚化。

正確なニーズは異なる場合がありますが、多くの診断ファイルを調べる場合や、複数の目的がある場合には、この組み合わせのグラフから始めるのが便利です。

視覚化の解釈

前述のように、クエリ診断で答えが得られる質問は多数ありますが、最も多く見られるのは、時間の費やし方とソースに送信されたクエリの内容の 2 つの質問です。

時間の費やし方を調べるのは簡単で、ほとんどのコネクタで非常によく似ています。 他の場所で説明したように、クエリ診断で注意すべきなのは、コネクタによって大幅に異なる機能が表示されることです。 たとえば、多くの ODBC ベースのコネクタでは、実際のバックエンド システムに送信されるクエリの正確な記録がありません。これは、Power Query では ODBC ドライバーに送信される情報しか表示されないためです。

時間がどのように費やされたかを確認したい場合は、上記で作成した視覚化を調べることができます。

ここで使用しているサンプル クエリの時間値は非常に小さいため、Power BI で時間を報告する方法を処理する場合は、Power Query エディターでExclusive Duration列を 'Seconds' に変換することをお勧めします。 これを行った後は、グラフを見て、時間がどこで費やされているかを正しく理解できます。

OData の結果については、画像内で、ほとんどの時間がソースからのデータの取得に費やされたことが分かります。凡例の 'Data Source' 項目をクリックすると、データ ソースへのクエリの送信に関連するさまざまな操作がすべて表示されます。

OData Northwind クエリ診断の要約。

同じ操作をすべて実行し、同じような視覚化を作成するときに、ODATA トレースの代わりに SQL トレースを使用すると、2 つのデータ ソースの比較を確認できます。

OData Northwind クエリ診断の要約。

ODATA 診断と同様に、データ ソース テーブルをクリックすると、最初の評価 (この画像では 2.3) がメタデータ クエリを出力し、2 番目の評価では関心のあるデータが実際に取得されます。 この場合、ほとんどデータを取得しないので、データのプルバックに要する時間はほとんどありません (2 回目の評価全体で 10 分の 1 秒未満で、データ取得自体では 20 分の 1 秒未満)。ただし、これはすべての場合に当てはまるわけではありません。

上記のように、凡例の 'Data Source' カテゴリをクリックすると、出力されたクエリを表示できます。

データの掘り下げ

パスの確認

これを見るときに、(たとえば、OData クエリで) 費やされた時間が奇妙だと思われる場合、次の値を持つデータ ソース クエリがあることが分かる可能性があります。

https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle%20eq%20%27Sales%20Representative%27&$select=CustomerID%2CCountry HTTP/1.1
Content-Type: application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atomsvc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7

<Content placeholder>

Response:
Content-Type: application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atomsvc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7
Content-Length: 435

<Content placeholder>

このデータ ソース クエリが関連付けられている操作が占めるのは、排他継続時間の約 1% のみです。 一方、次のように非常に似たものがあります。

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

このデータ ソース クエリが関連付けられている操作が占めるのは、排他継続時間のほぼ 75% です。 パスをオンにした場合、後者は実際には前者の子であることが分かります。 つまり、最初のクエリでは基本的にそれ自体で追加された時間がほとんどなく、実際のデータ取得は '内部' クエリによって追跡されます。

これらは極端な値ですが、表示できるものの範囲内にあります。