ExcelのPower Queryでクエリフォールディングが効かない原因と対処法|確認手順と復旧のコツ

ExcelのPower Queryでクエリフォールディングが効かないとき、原因の大半は「そもそも元データやコネクタが非対応」「途中の変換がデータソース側に翻訳できない」「プライバシーや権限の設定でローカル処理に寄っている」のどれかです。しかもクエリフォールディングは、完全に効く・効かないの二択ではなく、完全・部分・なしの3段階で起こります。最後の1ステップだけがローカル処理でも、それ以前をデータソース側で処理できれば十分に改善余地があります。(Microsoft Learn)

先に結論を言うと、最短で直す順番は「元データとコネクタを確認する」→「どのステップで止まったかを特定する」→「フィルターと列選択を前に寄せる」→「プライバシー、資格情報、ネイティブクエリ設定を見直す」です。Excel では Power Query Online のようなクエリフォールディングインジケーターやクエリプランが使えないため、View Native Query と Data Source Settings を中心に切り分けるのが現実的です。(Microsoft Learn)

目次

ExcelのPower Queryでクエリフォールディングが効かないときに最初に疑う原因

  • 元データが CSV や Excel ファイル
    これらのような非構造化データソースは、そもそもクエリフォールディングの対象外です。Power Query エンジン側で変換する前提で考えたほうが早いです。(Microsoft Learn)
  • 汎用コネクタを使っている
    同じ SQL Server でも、ODBC ではなく SQL Server コネクタを使うほうが query folding などの機能を活かしやすいと Microsoft は案内しています。(Microsoft Learn)
  • 重い変換を早い段階で入れている
    単純なフィルターや列選択は streaming しやすい一方、並べ替え、グループ化、結合、ピボットは全件を見に行く full scan になりやすく、前段で複雑にするとローカル処理が増えやすくなります。(Microsoft Learn)
  • ネイティブ SQL をそのまま使っている
    接続ダイアログの SQL statement でネイティブクエリを入れる方法は便利ですが、その後の query folding は一部コネクタに限られます。後続ステップまで折りたたみたいなら、対応コネクタで Value.NativeQuery(..., [EnableFolding=true]) を検討します。(Microsoft Learn)
  • プライバシーや権限の設定が邪魔している
    Privacy レベルの不整合は情報交換をブロックし、結果として folding を止めたりエラーを出したりします。さらに、資格情報切れ、共有先ユーザーの権限不足、ネイティブクエリ承認待ちでも更新が止まります。(Microsoft Learn)

ExcelのPower Queryでクエリフォールディングが止まった場所を確認する方法

Excel の Power Query はデスクトップ版なので、Applied Steps にクエリフォールディングインジケーターは出ません。さらに、クエリプラン機能は Power Query Online 専用です。つまり、Excel では「見た目のアイコン」ではなく、右クリックメニューと更新挙動で見るのが基本になります。(Microsoft Learn)

確認手順

  1. 折りたたみを確認したいステップを右クリックし、View Native Query または View data source query が出るか確認します。(Microsoft Learn)
  2. そのメニューが通常は出るソースで無効なら、そのステップかそれ以前で query folding が止まった可能性が高いです。逆に、そのメニュー自体をサポートしないソースでは、この判定は使えません。(Microsoft Learn)
  3. 黄色いバーで “This preview may be up to n days old.” と出ているなら、まずプレビューが古いだけの可能性があります。Power Query Editor の Refresh Preview はローカルキャッシュを更新しますが、ワークシートやデータモデルまでは更新しません。(Microsoft サポート)
  4. データソースへの問い合わせが複数回飛んでいても、すぐに「クエリフォールディング失敗」と決めつけないでください。コネクタ設計、プライバシー分析、背景プレビュー、列プロファイリングなどでも追加リクエストは発生します。(Microsoft Learn)

クエリフォールディングが効かない原因別の実践的な対処法

元データとコネクタを見直す

元データが CSV や Excel ブックなら、クエリフォールディングを追いかけても改善しません。この場合は、Power Query で無理に高速化しようとするより、元データをデータベースや OData などの構造化ソースに寄せる、あるいはファイル側で不要列や不要行を減らすほうが効果的です。Structured source では folding が使える一方、非構造化 source では Power Query エンジン側での処理が前提だからです。(Microsoft Learn)

また、データベース系なら汎用 ODBC / OLE DB ではなく、できるだけ専用コネクタを使ってください。Microsoft も、SQL Server なら ODBC より SQL Server コネクタのほうが、query folding を含む体験と性能に有利だとしています。(Microsoft Learn)

ステップの順序を変える

Power Query は最適化を行いますが、実務ではフィルターと列の絞り込みを先に、重い変換を後に寄せるだけで改善することが珍しくありません。特に Table.SelectRows のような単純フィルターや Table.SelectColumns は streaming しやすく、並べ替え、Table.Group、Table.NestedJoin、Table.Pivot は full scan になりやすい代表例です。(Microsoft Learn)

順番の考え方は、次のようにすると失敗しにくくなります。(Microsoft Learn)

  • 悪い例: Source → Group/Merge → Sort → Filter → Select Columns
  • 良い例: Source → Filter → Select Columns → 必要なら Sort → Group/Merge/Pivot

「まず絞ってから重い処理をする」という順番に変えるだけで、部分フォールディングに戻せることがあります。完全フォールディングに戻らなくても、前半だけでもソース側に押し込めれば更新時間はかなり変わります。(Microsoft Learn)

ネイティブ SQL を使うなら書き方を変える

接続時の SQL statement でネイティブクエリを入れる方法は便利ですが、その後の folding は一部コネクタに限られます。後続ステップまで折りたたみたいなら、対応コネクタで Value.NativeQuery の第4引数に EnableFolding = true を指定する方法が用意されています。対応例として、SQL Server、PostgreSQL、Snowflake、Google BigQuery、SAP HANA、Amazon Redshift などが挙がっています。(Microsoft Learn)

let
    Source = Sql.Database("server-name", "db-name"),
    Sales = Value.NativeQuery(
        Source,
        "SELECT OrderID, OrderDate, Amount FROM dbo.Sales",
        null,
        [EnableFolding = true]
    )
in
    Sales

ただし、これは「どんな SQL でも必ず fold する」という意味ではありません。あくまで対応コネクタ上で、後続ステップの folding を有効にできる余地を残す方法です。実装後も View Native Query で確認してください。(Microsoft Learn)

更新、プレビュー、権限の影響を切り分ける

Excel の Power Query は外部データをローカルにキャッシュします。そのため、Power Query Editor で見ているプレビューと、シート上の実データ更新のタイミングがずれることがあります。Editor 側の Refresh Preview はキャッシュ更新であり、ワークシートやデータモデル更新そのものではありません。(Microsoft サポート)

切り分け中は、Data → Get Data → Query Options → Current Workbook → Data Load で Allow data previews to download in the background を一時的にオフにしておくと、背景プレビューによる余計な問い合わせを減らして判断しやすくなります。Power Query は既定で各ステップの先頭 1,000 行プレビューを背景取得するため、診断中はノイズになりがちです。(Microsoft サポート)

権限まわりは Data → Get Data → Data Source Settings で確認します。ここでは資格情報の編集、Permissions の削除、Privacy level の見直し、ネイティブクエリ承認の取り消しができます。共有ブックでは、別のユーザーが更新しようとしても元データへのアクセス権がなければ refresh error になります。(Microsoft サポート)

また、Fast Combine / Always Ignore the Privacy levels は性能面で効くことがありますが、Microsoft は機密データの露出リスクがあるため既定で無効にしており、信頼できる環境以外では有効化を勧めていません。診断目的で一時的に使うのはありでも、恒常設定にはしないほうが安全です。(Microsoft サポート)

「前は動いていた」のに急にだめになったとき

このケースは、クエリフォールディングそのものより、ソース側の変更を疑うべきことがあります。テーブル名や列名の変更、データ型変更、ファイル移動、認証方式の変更、privacy 設定変更は、refresh error や unexpected result の定番原因です。(Microsoft サポート)

特に列名やテーブル名を元ソースで変えられると、Power Query はほぼ確実に影響を受けます。Source ステップを開き直し、元オブジェクト名と列名が変わっていないかを最初に確認してください。(Microsoft サポート)

復旧を急ぐときの最短手順

  1. 元データの種類を確認する
    CSV / Excel ファイルなら、フォールディング復旧ではなく「不要列・不要行を先に減らす」「上流を構造化ソースに寄せる」に切り替えます。(Microsoft Learn)
  2. コネクタを見直す
    データベースなら、まず専用コネクタへ寄せます。SQL Server に ODBC を使っているなら、最初にここを疑ってください。(Microsoft Learn)
  3. 最後のステップから巻き戻して確認する
    Query を複製し、末尾から1ステップずつ消しながら View Native Query が復活する地点を探します。止めている操作を特定できれば、直し方が一気に明確になります。(Microsoft Learn)
  4. 順序を入れ替える
    Filter と列の絞り込みを前に出し、Sort / Group / Merge / Pivot を後ろへ送ります。完全復旧しなくても、部分フォールディングまで戻れば効果はあります。(Microsoft Learn)
  5. 権限とプライバシーを確認する
    Data Source Settings で credentials、privacy level、native query approvals を見直します。共有ブックなら、更新するユーザーにも元データ権限があるか確認します。(Microsoft サポート)
  6. 診断中は背景プレビューを切る
    背景取得の問い合わせが多いと、何が本当の refresh なのか見えにくくなります。Query Options の Data Load で一時的にオフにします。(Microsoft サポート)
  7. どうしてもローカル処理が必要なら、意図的に分ける
    前半は folding を維持した staging query、後半はローカル変換用 query に分けると管理しやすくなります。Power Query には Extract Previous で前段を分離する方法もあります。さらに、下流だけ意図的に local にしたいなら Table.StopFolding、実際にメモリに固定する必要があるときだけ Table.Buffer を使います。Table.Buffer は速くなるとは限らず、むしろ遅くなることがあります。(Microsoft Learn)

クエリフォールディングで失敗しやすいポイント

  • Excel や CSV が相手なのに、いつまでも query folding を追い続ける
    これは設計上の前提違いです。まず「折りたためる相手か」を見ます。(Microsoft Learn)
  • View Native Query がない = すべて no folding と決めつける
    そのメニューをサポートしないソースもあるので、ソースの性質を前提に判断します。(Microsoft Learn)
  • Table.Buffer を万能薬として入れる
    バッファは下流の folding を止め、全件読み込みとメモリ使用を増やすため、むしろ遅くなることがあります。単に下流の folding を止めたいだけなら Table.StopFolding のほうが明確です。(Microsoft Learn)
  • Fast Combine を常用する
    性能改善だけを見て常時オンにすると、privacy 保護を自分で外すことになります。信頼できる閉じた環境での検証用と割り切ったほうが安全です。(Microsoft サポート)

迷ったら、この順番で動けば外しにくい

Excel の Power Query でクエリフォールディングが効かないときは、まずそのデータソースが folding 対象かを確認し、次にどのステップで止まったかを見つけ、最後にコネクタ・順序・プライバシー・資格情報の順で直してください。SQL 系ソースなら「Filter と列の絞り込みを前へ」「専用コネクタを使う」「必要なら Value.NativeQuery + EnableFolding=true」を徹底するだけで、かなりのケースは改善できます。(Microsoft Learn)

次にやることはシンプルです。いまのクエリを複製し、末尾から View Native Query を確認しながら巻き戻してください。止めている1ステップが見つかれば、ほとんどの対処はそこから決まります。(Microsoft Learn)

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次