ステップ フォールディング インジケーター

注意

この記事を読む前に、Power Query のクエリ フォールディングに関する記事を読んで、Power Query のフォールディングのしくみについて理解を深めることをお勧めします。

ステップ フォールディング インジケーターを使うと、フォールディングされるステップとフォールディングされないステップについて理解できます。

ステップ フォールディング インジケーターを使うと、フォールディングが中断される変更を行ったときに、それが明らかになります。 これにより、問題をすばやく簡単に解決し、パフォーマンスの問題を最優先で回避し、より良いクエリの分析情報を得ることができます。 ほとんどの場合、ステップはフォールディングされるか、されないかのどちらかです。 結果がそれほど明確ではない場合も多くあり、この記事の後半にある「ステップ診断インジケーター」(動的、不透明、不明) のセクションで説明します。

注意

ステップ フォールディング インジケーター機能は Power Query Online でのみ使用できます。

ステップ診断を解釈する

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

SQL ソースに対するシンプルなクエリでも、この例を確認することができます。

AdventureWorks サンプル データベースを使用して、Products テーブルに接続し、データを読み込みます。 ナビゲーション エクスペリエンスを通じてこの操作を行うと、次のクエリが生成されます。

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

これがステップ フォールディング インジケーターでどのように表示されるかを確認すると、最初のステップはフォールディングされず、2 番目のステップは不確定で、3 番目のステップはフォールディングされることがわかります。

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

最初のステップはフォールディングされませんが、最初にデータを読み込むときに生成される最後のステップはフォールディングされます。 最初のステップ ( [ソース] 、および場合によっては他の [ナビゲーション] ステップ) がどのように処理されるかは、コネクタによって異なります。 たとえば 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 の接続でのみ表示されます。
非透過的 "不透明、不確定なフォールディング" を示すフォールディング インジケーター。 不透明のインジケーターは、何らかの理由により結果として得られるクエリ プランが不確定であることを示します。 通常は、true の "定数" テーブルがあること、または変換またはコネクタがインジケーターとクエリ プラン ツールでサポートされていないことを示します。
Unknown "クエリ プランがない" ことを示すフォールディング インジケーター。 不明のインジケーターは、エラーが発生したか、テーブル以外のもの (レコード、リスト、プリミティブなど) に対してクエリ プランの評価を実行しようとしたかのいずれかにより、クエリ プランが存在しないことを表します。

分析の例

Adventure Works (SQL) の Products テーブルに接続して、例を見ることができます。 前と同様に、最初の読み込みは次のようになります。

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

フォールディングされるステップを追加すると、その緑色の線が拡張されます。 このステップもフォールディングされるためです。

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

フォールディングされないステップを追加すると、インジケーターが表示されます。たとえば、Capitalize each word はフォールディングされません。 インジケーターが変更されていることがわかります。このステップの時点で、フォールディングが停止されています。 前に説明したように、前のステップは引き続きフォールディングされます。

Capitalize Each Word ステップを追加してフォールディングを中断する。

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

フォールディングされないステップを追加する。

しかし、大文字化を適用した列を削除して、最適化されたクエリ プランによって再びすべてがフォールディングされるようにすると、次のような結果が得られます。ただし、このようなケースはまれです。 これは、ステップの順序だけでなく、実際の変換も適用されることを示しています。

問題のある列を削除することで、ステップを削除することなくフォールディングする方法を示しています。