注
この記事を読む前に、Power Queryでのクエリ評価とクエリ フォールディングの概要を読み、Power Queryでの折りたたみのしくみについて理解を深めてください。
クエリ折りたたみインジケーターは、どのステップがフォールドされ、どのステップが折りたたまれていないかを理解するのに役立ちます。
クエリ折りたたみインジケーターを使用すると、クエリの折りたたみが中断される変更を行ったときにすぐに分かります。 この機能は、問題を迅速に解決し、パフォーマンスの問題を回避し、クエリに関するより良い分析情報を得るのに役立ちます。 ほとんどの場合、ステップは折りたたまれるか、折りたたまれないかのいずれかです。 しかし、結果が明らかでない場合は、多くのケースが存在します。 これらのケースについては、 ステップ診断インジケーター (動的、不透明、不明) で説明します。
注
クエリ フォールディング インジケーター機能は、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 接続でのみ表示される可能性があります。 |
| 不透明 |
|
不透明なインジケーターは、結果として得られるクエリ プランが何らかの理由で決定的でないことを示します。 一般に、真の "定数" テーブルがあること、またはインジケーターとクエリ プラン ツールがその変換またはコネクタをサポートしていないことを示します。 |
| 不明 |
|
不明なインジケーターは、エラーまたはテーブル以外の何かに対してクエリ プランの評価を実行しようとしたためにクエリ プランが存在しないことを表します (レコード、リスト、プリミティブなど)。 |
分析の例
分析例については、まず Adventure Works (SQL) の Production.Product テーブルに接続します。 最初の読み込み (最初の例と同様) は、次の図のようになります。
折りたたむステップをさらに追加すると、右側の緑色の線が拡張されます。 このステップがフォールドされるため、この拡張が発生します。
フォールドしないステップを追加すると、別のインジケーターが表示されます。 たとえば、 各単語を大文字に して折りたたむことはありません。 インジケーターが変化し、この手順の時点で折りたたみが停止したことを示します。 前述のように、以前のステップは依然として継続しています。
大文字で各単語を始める手順を追加すると折りたたみが解除される様子を示すスクリーンショット。
後続に Capitalize each step に依存するステップをさらに追加しても、それらは引き続きフォールドされません。
ただし、最適化されたクエリ プランが再び折りたたまれるように、大文字と小文字を適用した列を削除すると、次の図のような結果が得られます。 ただし、このようなものは一般的ではありません。 この図は、手順の順序だけでなく、実際の変換も適用される方法を示しています。