次の方法で共有


クエリ フォールディング インジケーター

Note

この記事を読む前に、「Power Query でのクエリ評価とクエリ フォールディングの概要」を読んで、Power Query でのフォールディング処理の仕組みをよく理解することをお勧めします。

クエリフォールディングインジケーターは、フォールドするステップとフォールドしないステップを理解するのに役立ちます。

クエリ折りたたみインジケーターを使用すると、折りたたみを壊すような変更を行ったことが明らかになります。 この機能は、問題をより簡単に迅速に解決し、そもそものパフォーマンスの問題を回避し、クエリについてより適切な洞察を得るのに役立ちます。 ほとんどの場合、ステップがフォールドされることもあり、フォールドされないこともあります。 しかし、結果がそれほど明らかではないケースも多くあり、これらのケースについてはステップ診断インジケータ (動的、不透明、および不明) で説明されています。

Note

クエリ折りたたみインジケーター機能は、Power Query Online でのみ使用できます。

クエリ折りたたみ診断の解釈

ステップの隣にあるクエリ フォールディング インジケーターを調べるときに理解することが最も重要なことは、診断状態が連続的ではないということです。 つまり、そのステップのインジケーターでは、クエリ全体が、その時点までに、フォールディングされるかどうかが示されます。 クエリがフォールドしないことを示すインジケーターの後にフォールドすることを示すインジケーターが続いている場合、そのポイントまでのクエリはフォールドしていることを意味します。

この解釈は、SQL ソースに対する単純なクエリでも機能します。 たとえば、AdventureWorks サンプル データベース を使用して、Production.Product テーブルに接続し、データをロードします。 Power Query ナビゲーターを介してこのサンプルを読み込むと、次のクエリが得られます。

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data]
in
  Navigation

このコードがクエリ フォールディング インジケーターでどのように表示されるかを調べると、最初のステップが決定的ではないことがわかります。 ただし、2 番目のステップではフォールドされます。これは、その時点までのクエリがフォールドされることを意味します。

フォールディング インジケーター ウィンドウのソースとナビゲーションのステップのスクリーンショット。

この例では、最初のステップはフォールドすることを確認できません (決定的ではありません) が、データを最初にロードしたときに生成される最後のステップはフォールドします。 最初のステップ ([ソース]、および場合によっては他の [ナビゲーション] ステップ) がどのように処理されるかは、コネクタによって異なります。 たとえば SQL を使う場合は、カタログ テーブルの値として処理されますが、これはフォールディングされません。 ただし、そのコネクタのデータを選択するとすぐにフォールドされます。

逆に、この表示はクエリがあるポイントまでフォールドされてから、その後フォールディングが停止することも意味します。 すべてが折りたたまれることを示すステップの折りたたみインジケーターがある場合とは異なり、非折りたたみインジケーターがある場合でも、すべてが折りたたまれないことを意味するわけではありません。 そうではなく、フォールディングされるのは "すべてではない" ことを意味します。 一般に、最後のフォールディング インジケーターまでのすべてがフォールドされ、その後さらに操作が行われます。

前述の例を変更して、フォールドされない変換 (Capitalize Each Word) を指定できます。

let
  Source = Sql.Database("ServerName", "AdventureWorks"),
  Navigation = Source{[Schema = "Production", Item = "Product"]}[Data],
  #"Capitalized each word" = Table.TransformColumns(Navigation, {{"Name", each Text.Proper(_), type text}})
in
  #"Capitalized each word"

クエリ フォールディング インジケーターには、最後のステップがフォールドされないことを除いて、前と同じインジケーターがあります。 この最後のステップまではすべてデータ ソースで実行され、最後のステップはローカルで実行されます。

フォールディング インジケーター ウィンドウのソース、ナビゲーション、Capitalize Each Word の各ステップのスクリーンショット。

ステップ診断インジケーター

クエリ フォールディング インジケーターは、基礎となるクエリ プランを使用し、レポートするにはクエリに関する情報を取得できる必要があります。 現在、クエリ プランはテーブルのみをサポートしているため、一部のケース (リスト、レコード、プリミティブ) はフォールディングとしてレポートされません。 同様に、定数テーブルは不透明として報告されます。

インジケーター アイコン 説明
折りたたみ このフォールディング インジケーターは、このステップまでのクエリがデータ ソースによって評価されることを示します。
フォールディングされない このフォールディングされないインジケーターは、このステップまでのクエリの一部がデータ ソースの外部で評価されることを示します。 これを最後のフォールディング インジケーター (存在する場合) と比較して、パフォーマンスが上がるようにクエリを並べ替えることができるかどうかを確認できます。
フォールディングされる可能性がある フォールディングされる可能性があるインジケーターはまれです。 これらは、クエリがフォールドされる「可能性がある」ことを意味します。 これらは、クエリから結果を取得するときに、フォールドされるかどうかが実行時に決定されること、およびクエリ プランが動的であることを示します。 これらのインジケーターは、ODBC または OData 接続でのみ表示される可能性があります。
非透過的 不透明のインジケーターは、何らかの理由により結果として得られるクエリ プランが不確定であることを示します。 これは通常、真の「定数」テーブルが存在するか、その変換またはコネクタがインジケーターおよびクエリ プラン ツールでサポートされていないことを示します。
不明 不明なインジケーターは、エラーまたはテーブル以外のもの (レコード、リスト、プリミティブなど) に対してクエリ プランの評価を実行しようとしたことにより、クエリ プランが存在しないことを表します。

分析の例

分析例としては、Adventure Works (SQL) のProduction.Productテーブルに接続することから始めます。 初期ロードは、最初の例と同様に、次の画像のようになります。

Product テーブルの読み込みに対する最初のステップ インジケーターのスクリーンショット。

フォールドされるステップをさらに追加すると、右側の緑色の線が延長されます。 このステップも折りたたまれるため、この拡張が発生します。

前のクエリに列の削除ステップを追加すると、緑色のフォールディング インジケーターの線が拡張される様子を示すスクリーンショット。

折りたたまれないステップを追加すると、別のインジケーターが表示されます。 たとえば、各単語を大文字にするは折り畳まれません。 インジケーターが変化し、このステップの時点でフォールディングが停止したことが示されます。 前に説明したように、前のステップは引き続きフォールドされます。

Capitalize Each Word ステップを追加するとフォールディングが解除される様子を示すスクリーンショット。

Capitalize each step に依存するステップをダウンストリームに追加しても、引き続きフォールドされません。

ステップを追加した後にフォールディングが発生しない様子を示すスクリーンショット。

ただし、大文字化を適用した列を削除して、最適化されたクエリ プランをすべてもう一度フォールドできるようにすると、次の画像のような結果が得られます。 ただし、このようなことは珍しいことです。 この画像は、ステップの順序だけでなく、実際の変換も同様に適用されることを示しています。

問題のある列を削除することで、ステップを削除することなくフォールドする様子を示すスクリーンショット。