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

この記事を読む前に、Power Queryでのクエリ評価とクエリ フォールディングの概要を読み、Power Queryでの折りたたみのしくみについて理解を深めてください。

クエリ折りたたみインジケーターは、どのステップがフォールドされ、どのステップが折りたたまれていないかを理解するのに役立ちます。 ステップは、Power Query がその変換をデータ ソース クエリに変換し、データ ソースで実行する場合にフォールディングされます。

クエリ折りたたみインジケーターを使用すると、クエリの折りたたみが中断される変更を行ったときにすぐに分かります。 この機能は、問題の解決、パフォーマンスの問題の回避、クエリに関するより良い分析情報の取得に役立ちます。 ほとんどの場合、ステップは折りたたまれるか、折りたたまれないかのいずれかです。 しかし、結果が明らかでない場合は、多くのケースが存在します。 Step diagnostics indicators セクションでは、次のケースを扱います(折りたたまれる可能性がある、不透明、不明)。

クエリ フォールディング インジケーター機能は、Power Query Online でのみ使用できます。

クエリ フォールディング診断情報を解釈する

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 では、ステップはカタログ テーブル値として処理され、折りたたまれません。 ただし、そのコネクタのデータを選択するとすぐに折りたたまれます。

逆に、この表示は、クエリがある点まで折りたたまれ、その後折りたたまれなくなることも意味します。 折り畳まれないインジケーターは、何も折りたたまれないという意味ではありません。 代わりに、すべてが折りたたまれるわけではないことを意味します。 一般に、最後の折りたたみインジケーターまでのすべてが折りたたまれ、後でより多くの操作が行われます。

前の例を変更すると、フォールドしない変換を指定できます。各単語を大文字にします。

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"

クエリ折りたたみインジケーターでは、以前と同じインジケーターが使用されていますが、最後のステップで折りたたむことはありません。 この最後の手順までのすべてがデータ ソースに対して実行され、最後の手順はローカルで実行されます。

[折りたたみインジケーター] ペインにおける「ソース」、「ナビゲーション」、および「各単語を大文字にする」のステップのスクリーンショット。

ステップ診断指標

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

インジケータ アイコン 説明
折りたたみ 折りたたみインジケーターは、データ ソースがこの手順までのクエリを評価することを示します。
折りたたみしない 折りたたまれていないインジケーターは、この手順までのクエリの一部がデータ ソースの外部で評価されることを示します。 最後の折りたたみインジケーターがある場合は、それを比較して、クエリのパフォーマンスを高めるために再配置できるかどうかを確認できます。
折りたたむ可能性がある 折り畳みインジケーターは珍しいです。 それは、クエリが折りたたまれる可能性があることを意味します。 これらは、クエリから結果をプルするときに実行時に折りたたむかどうかが決定され、クエリプランが動的であることを示します。 これらのインジケーターは、ODBC 接続または OData 接続でのみ表示される可能性があります。
不透明 不透明なインジケーターは、結果として得られるクエリ プランが何らかの理由で決定的でないことを示します。 一般に、真の "定数" テーブルがあること、またはインジケーターとクエリ プラン ツールがその変換またはコネクタをサポートしていないことを示します。
不明 不明なインジケーターは、エラーまたはテーブル以外の何かに対してクエリ プランの評価を実行しようとしたためにクエリ プランが存在しないことを表します (レコード、リスト、プリミティブなど)。

クエリ フォールディング インジケーターを分析する

クエリ フォールディング インジケーターを分析するには、AdventureWorks (SQL) の Production.Product テーブルに接続します。 最初の読み込みでは、次の図に示すように、 ソース ステップが不確定として表示され、 ナビゲーション ステップが折りたたみとして表示されます。

Product テーブルを読み込むための最初のステップ インジケーターのスクリーンショット。

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

前のクエリに列の削除ステップを追加すると、緑色の折りたたみインジケーター行がどのように拡張されるかを示すスクリーンショット。

フォールドしないステップを追加すると、別のインジケーターが表示されます。 たとえば、 各単語を大文字に して折りたたむことはありません。 インジケーターが変化し、この手順の時点で折りたたみが停止したことを示します。 前述のように、以前のステップは依然として継続しています。

大文字で各単語を始める手順を追加すると折りたたみが解除される様子を示すスクリーンショット。

後続に、Capitalize each word に依存するステップをさらに追加しても、引き続きフォールドされません。

ステップを追加した後に折りたたみが発生しない方法を示すスクリーンショット。

ただし、大文字化を適用した列を削除すると、最適化されたクエリ プランは再び折りたたまれる可能性があります。 この一般的でない結果では、次の図に示すように、前のステップが折りたたまれていない場合でも、最後のステップは折りたたまれます。 この結果は、折りたたみがステップの順序と適用される変換の両方に依存する方法を示しています。

問題のある列を削除すると、ステップを削除せずに折りたためる方法を示すスクリーンショット。