Power QueryのFormula.Firewallエラーを解決する:ステップバイステップガイド

intermediate📊 Microsoft Excel2026-04-29| Windows 10/11またはmacOS上のMicrosoft Excel (Microsoft 365, 2021, 2019, 2016)。

Error Message

Formula.Firewall: Query 'QueryName' (step 'StepName') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.
#power-query#データプライバシー#excelエラー

エラーメッセージ

クエリを作成し、データをマージする準備が整ったところで、Excelが謎めいたメッセージを表示して停止することがあります。通常、以下のようなメッセージが表示されます。

Formula.Firewall: Query 'SalesData' (step 'Source') references other queries or steps, so it may not directly access a data source. Please rebuild this data combination.

これはイライラする障害ですが、これには正当な理由があります。なぜこのエラーが発生するのか、そしてどのように解決すればよいのかを見ていきましょう。

このエラーが発生する理由

Power Queryは、情報を保護するために「プライバシー レベルのファイアウォール」を使用しています。これは警備員のようなものだと考えてください。デスクトップ上のローカルCSVファイルなどのプライベートなソースからのデータが、Web APIやSQL Serverなどのパブリックなソースに誤って流出するのを防ぐのがその役割です。

このエラーは、あるクエリがデータソースを定義するために別のクエリに依存している場合に発生します。たとえば、テーブルAの値を使用してテーブルBをフィルタリングする場合、Power Queryはプロセス中にテーブルAのデータがネットワーク経由で送信されないことを保証できないため、この「マッシュアップ」をブロックすることがあります。これは、小さなローカルテーブルを10万行を超える大規模なクラウドデータベースとマージする場合によく見られます。

解決策1:プライバシー レベルの設定を調整する(簡単な方法)

データソースを信頼しており、データ間の流出を心配する必要がない場合は、Excelの設定を変更するだけで済みます。これは、社内プロジェクトで最も一般的な修正方法です。

  • Excelで、データタブに移動し、データの取得 > クエリのオプションを選択します。
  • 左側のサイドバーを確認します。現在のブックセクションにあるプライバシーをクリックします。
  • プライバシー レベルを無視して、パフォーマンスを向上させるを選択します。
  • OKをクリックし、クエリを更新します。

この設定はブック固有のものであることに注意してください。このファイルを同僚にメールで送信した場合、同僚が自分の設定を変更するまで、同じエラーが発生する可能性があります。

解決策2:プライバシー レベルを統一する

ファイアウォールを有効にしたままにしたい場合は、すべてのデータソースが同じプライバシー設定を共有していることを確認してください。

  • データ > データの取得 > データ ソースの設定に移動します。
  • データソースを選択し、アクセス許可の編集をクリックします。
  • すべてのプライバシー レベルを「組織」に設定します。
  • クエリ内のすべてのソースに対してこれを繰り返し、更新します。

解決策3:Mコードを再構成する(プロフェッショナルな方法)

企業のポリシーによっては、プライバシー設定の無効化が禁止されている場合があります。そのような場合は、クエリの構築方法を変更する必要があります。ファイアウォールは通常、単一のステップで、別のソースから計算したばかりの変数を使用して外部データを取得しようとする構成を拒否します。

問題のあるコード

let
    // ローカルのExcelテーブルからAPIキーを取得
    SourceKey = Excel.CurrentWorkbook(){[Name="Config"]}[Content]{0}[Key],
    
    // 同じクエリ内でそのキーを使用してWebデータを取得しようとする
    // これによりファイアウォールエラーが発生します!
    Data = Json.Document(Web.Contents("https://api.example.com/v1/" & SourceKey))
in
    Data

修正後の戦略

これを修正する最善の方法は、ステージング クエリを使用することです。まず、APIキーやフィルター条件を取得するためのクエリを作成します。次に、生データを取得するための2つ目の独立したクエリを作成します。最後に、それら2つをマージする3つ目のクエリを作成します。このように分離することで、データの取得が計算から独立していることをPower Queryに伝え、ファイアウォールのチェックをパスできます。

あるいは、Table.Buffer() を使用することもできます。ステップを Table.Buffer でラップすると、Power Queryは次のステップに進む前にそのデータを完全にメモリにロードするため、ファイアウォールが懸念しているリンクを断ち切ることができる場合があります。

検証手順

以下の場合、成功したことになります:

  • Power Query エディターのプレビューが、赤いエラーバーなしで読み込まれる。
  • プレビューの更新をクリックすると、データの全50列が即座に表示される。
  • 閉じて読み込むを実行すると、マージされた結果がExcelシートに正常に反映される。

防止のためのヒント

  • データのステージング: マージや結合を行う前に、必ず生データを別のクエリに読み込むようにします。
  • 動的なヘッダーを避ける: 同じクエリ内の別のテーブルのロジックを使用して、URLやSQL接続文字列を作成しないようにしてください。
  • 入力の検証: IP範囲のマッピングなど、ネットワーク関連のタスクでデータをマージする場合は、まずロジックを再確認してください。私は、Excelの設定にインポートする前に、ToolCraftのサブネット計算機を使用してCIDRブロックを検証しています。これはデータをアップロードしない高速なブラウザツールなので、頭の中の「データ プライバシー ファイアウォール」も安心させることができます。

Related Error Notes