M365Con 2027 – 無料オンラインカンファレンス · 11–22 Jan 2027 · 120 sessions→ m365con.net

ブログ · Mirko Peters

Power BIのクエリフォールディングを使いこなす:処理をデータソースに任せる

By ·

Power BIを使っていて、データの更新が果てしなく終わらない様子を見ることほどイライラすることはそう多くありません。さらに悪いのは、リソース不足で途中で失敗してしまうことです…

Automatically translated with AI from the original post. Read the English original

▶ BLOGMastering Query Foldingin Power BI: Push the…M365.FM
Titelbild: Mastering Query Folding in Power BI: Push the Work to Your Data Source

Power BIを使っていると、データの更新に時間がかかりすぎたり、さらに悪いことにリソース不足で完全に失敗したりするほど、イライラさせられることはそう多くありません。リモートのSQLデータベース、エンタープライズ データ ウェアハウス、クラウドサービスから数百万行を取得する場合、変換処理の方法が重要になります。Power Queryで行うすべてのステップは、データをホストするサーバーが効率的に処理することもできれば、ローカルマシンやPower BIサービスのメモリエンジンがのろのろと処理することもあります。ここで役立つのが、クエリフォールディングの仕組みです。

この投稿では、クエリフォールディングを詳しく掘り下げます。具体的には、変換処理をどのように最適化するのか、ステップを正しくフォールディングさせるための実践的な手法、フォールディングの連鎖を断ち切る一般的な落とし穴、そしてレポート更新の効率を大幅に改善する方法を取り上げます。処理は本来あるべき場所、つまりデータソースに戻しましょう。

クエリフォールディングの概要

クエリフォールディングの本質は、Power Queryがユーザーインターフェイスで作成したデータ変換ステップを、ネイティブなクエリ言語(通常はSQL)に変換し、そのクエリをデータソースのデータベースに送って実行させる仕組みです。すべての行、テーブル、列をPower BIのメモリにダウンロードしてから、ローカルでフィルター、グループ化、結合を行うのではなく、Power BIはデータベースに重い処理を任せます。

食料品の買い物に例えてみましょう。巨大な倉庫に行き、店内の商品をすべて手に取って台所のテーブルまで運び、そのうち90%を期限切れや不要という理由で捨てるとしたら、膨大な時間と労力を無駄にしています。クエリフォールディングがない場合に起きているのは、まさにこれです。クエリフォールディングを有効にすると、倉庫の店員に具体的なリストを渡せます。「1ポンド以上の重さのリンゴだけを、色ごとにまとめて出してください」。店員は倉庫内で仕分けを行い、必要なものだけが入った小さな箱を渡してくれます。手元の台所は散らからず、調理もずっと早く終わります。

クエリフォールディングによるデータ変換の最適化

クエリフォールディングは、拡張性の高いPower BIアーキテクチャの要です。適切に実行されると、ネットワーク上のデータ転送量を最小限に抑え、更新処理中のメモリ使用量を大幅に減らし、開発作業のスピードも高められます。

Power Queryの適用ステップの早い段階で、行のフィルター、列の削除、並べ替え、基本的な集計などの変換を行うと、基盤となるコネクタがそのデータソースでネイティブに処理できるかどうかを判断します。処理できる場合、それらのステップは1つの高度に最適化されたクエリにまとめられ、データソースに送信されます。データベースエンジンは既存のインデックスを使ってこれを実行するため、数百万行でも数ミリ秒で絞り込めます。

逆に、クエリフォールディングが途切れると、Power BIは圧縮されていない未フィルターの全データセットをネットワーク経由で取得し、Power Queryの評価エンジン(mashupエンジン)に読み込まざるを得なくなります。データがローカルに置かれると、Power BIはローカルのCPUとRAMを使ってフィルターや変換を適用します。大規模なエンタープライズ データセットでは、これはゲートウェイのタイムアウト、メモリ不足エラー、レポート更新の遅延を招く典型的なパターンです。

ステップを正しくフォールディングさせるための実践的な手法

Power Queryのステップはすべて同じように作られているわけではなく、すべてのデータソースがクエリフォールディングに対応しているわけでもありません。SQL Server、Oracle、PostgreSQLなどのリレーショナルデータベースは堅牢なフォールディング機能を備えています。一方、CSVやExcelブックのようなフラットファイルは、ネイティブなクエリプロセッサーを持たないため、同じようにはフォールディングしません。

ステップを確実にフォールディングさせるには、適用ステップを特定の順序で構成し、使用する関数にも注意を払う必要があります。クエリのフォールディングを維持するための実践的な手法は次のとおりです。

  • フィルターは早い段階で行う: 行のフィルター(例:直近3年分のデータのみを残す、アクティブなステータスで絞り込むなど)は、できるだけ適用ステップの先頭近くで行ってください。データセットを早い段階で絞り込むほど、その後のSQL変換が効率的になります。
  • 不要な列は早めに削除する: 処理の早い段階で使っていない列を削除すると、データソースが不要なデータをシリアル化して転送する無駄なリソース消費を防げます。
  • サポートされる変換を理解する: 列の削除、列名の変更、(特定の条件下での)テーブルのマージ、追加、基本的な条件付き列などの操作は、一般的にクエリ フォールディングがうまく機能します。一方、複雑なカスタム数式、インデックス検索を伴うテキスト操作、プログラミングが中心のカスタム列は、フォールディングの連鎖を断ち切ることが多くあります。
  • [ネイティブ クエリの表示] オプションを確認する: Power Query エディターで適用済みのステップを右クリックします。「ネイティブ クエリの表示」オプションが有効でクリックできる場合は、そのステップまでクエリが正常にフォールディングされています。グレー表示になっている場合は、そのステップまたはそれより前のステップでフォールディングが途切れています。

クエリ フォールディングを壊す一般的な落とし穴

クエリ フォールディングの最も厄介な点は、壊れやすいことです。適用順序を誤った一つの何気ない変換ステップが、フォールディングの連鎖を完全に断ち切り、データベースがその処理を十分に行える場合でも、後続のすべてのステップがローカルで実行される原因になります。

クエリ フォールディングを壊す代表的なミスを見てみましょう:

  1. ネイティブ SQL を挿入してから変換する: データソース ステップの先頭にネイティブ SQL クエリを記述すると、Power Query はその結果セットをブラックボックスとして扱います。そのため、Power Query の UI から追加した後続の変換は、カスタム SQL ブロックに UI ステップを確実に組み込めないため、通常はフォールディングされません。
  2. 型変換の早すぎる実行や順序の誤り: データ型の変換は不可欠ですが、フィルターや、データベースの型ルールと競合する操作の前に行うと、フォールディングが壊れる原因になります。たとえば、数値列をテキストに変換してから数値の範囲フィルターを適用すると、データベースがクエリを最適化できなくなる場合があります。
  3. インデックス列の追加や行番号の使用: 「インデックス列の追加」のように行の位置に依存する関数や、絶対インデックスで前後の行を参照する操作では、位置を決定するためにデータセット全体をメモリに読み込む必要があります。これにより、クエリ フォールディングは即座に停止します。
  4. データソースの混在: SQL データベースのテーブルと Excel ファイルのテーブルをマージすると、Excel は SQL クエリをネイティブに処理できないため、両方のソースが相互作用する境界でクエリ フォールディングは停止します。

Power Query の更新効率を高める

クエリ フォールディングを習得すると、その効果はデータ アーキテクチャ全体に波及します。かつては数時間かかっていたレポートの更新時間が、数分から数秒にまで短縮されることもあります。この効率化により、クラウド ゲートウェイやサーバーのコンピューティング リソースを節約できるだけでなく、開発者もより速く反復作業を進められるようになります。

更新効率を最大限に高めるには、クエリ フォールディングを他の基本的なモデリングのベスト プラクティスと組み合わせてください。たとえば、頻繁にフィルターや結合を行う列には、データベース テーブルに適切なインデックスを設定してください。SQL テーブルにインデックスがないと、フォールディングされたクエリであっても、データベース エンジンはコストの高いテーブル スキャンを実行することになります。さらに、クエリ フォールディングとあわせて、スター スキーマのクリーンなデータ モデル、冗長な列の削除、大規模な履歴データセットに対する増分更新ポリシーの実装も行いましょう。

Power BI クエリの監視とトラブルシューティング

測定できないものは改善できません。更新の遅延や予期しないクエリ エラーに直面したときは、ボトルネックがどこにあるのかを体系的に診断する必要があります。まず、Power BI Desktop 内の Power Query 診断ツールを利用しましょう。この機能を使うと、ステップごとの実行時間を追跡でき、個々の変換にどれだけ時間がかかっているか、データがリモートで取得されているのかローカルで処理されているのかを正確に把握できます。

さらに、ゲートウェイのログやデータベース プロファイラー(SQL Server Profiler や拡張イベントなど)を監視し、Power BI からデータソースに送信される実際のクエリを確認してください。WHERE 句や GROUP BY 句を含む対象を絞ったクエリではなく、未フィルターの生のテーブル全体を取得する大量の SELECT 文が見られる場合は、適用済みステップのどこかでクエリ フォールディングが失敗していることがすぐに分かります。

Power Queryのクエリ実行順序、運用上の落とし穴、そして高度な最適化の手順を詳しく知りたい方は、関連するポッドキャストのエピソードと、Power Query Folding and Execution Order in Power BIのノートをぜひご覧ください。処理の順序の基本を理解しておけば、毎回、堅牢で非常に高速なモデルを自信を持って構築できるようになります。

まとめ

クエリ フォールディングを習得することは、Power BI開発者が身につけられる最も効果の大きいスキルの一つです。計算処理の負荷を、ローカルマシンやPower BIサービスから、高性能で最適化されたデータソースのエンジンへと移すことで、パフォーマンスのボトルネックを解消し、ネットワークの混雑を減らし、レポートの更新を円滑かつ確実に実行できるようになります。手順の順序を意識して設計し、ネイティブ クエリを定期的に確認し、早すぎるインデックス作成や互換性のないソースの混在といったよくある落とし穴を避けることで、ビジネス インテリジェンス環境の可能性を最大限に引き出せます。

これらの概念についてさらに掘り下げ、クエリの実行順序がワークスペースのパフォーマンスにどのように影響するのかの詳細な解説を聞きたい方は、ポッドキャストのエピソードPower Query Folding and Execution Order in Power BIで、全体の議論をお聴きください。今日からこれらの戦略を実践して、レポートのパフォーマンスが向上する様子をぜひご確認ください。

Entities in this article

Query folding Power BI Power Query Power BI Service Semantic model Microsoft Excel Azure Functions Connector Energy Microsoft To Do

Related articles

RSS