Power Queryを使ってWeb APIから取得したJSONデータを展開しようとしたときに、列が正しく展開されずに困った経験はないでしょうか。特に社内システムのデータ連携でJSON形式の応答を扱う場合、Power Queryの標準機能だけではうまく展開できないケースが少なくありません。この記事では、JSON列が展開できない原因を具体的に切り分け、実務で使える確認手順と対処方法を解説します。Power Queryの基本操作からM言語を使った応用的な展開方法まで、段階的に説明しますので、トラブルシューティングの参考にしてください。
【要点】この記事で確認すること
- 最初に見る場所: エラーメッセージの内容と、展開対象の列のデータ型(通常はテキストになっていることが多い)。
- 切り分けの軸: API応答そのものに問題があるのか、Power Query側のデータ型変換や構造認識に問題があるのかを区別する。
- 注意点: 会社PCでM言語の編集を行う場合は、必ず元のクエリのバックアップを取得してから作業してください。管理者設定によってはカスタム関数の使用が制限されている場合があります。
ADVERTISEMENT
Power QueryでJSON列を展開する基本操作
Power Queryには、JSON形式の列を自動的に展開する便利な機能があります。しかし、Web APIから取得したデータは構造が複雑で、標準のボタン操作だけでは展開できないことがあります。まずは基本操作を確認しましょう。
標準の展開ボタンを使用する
Power Queryエディターで、JSONデータを含む列のヘッダーにある「展開」アイコン(上下両矢印)をクリックすると、列に含まれるRecordやListを展開できます。通常はこの操作で十分ですが、以下のような場合に展開が失敗します。
- JSON列が「Text」型として読み込まれている場合(データ型がテキストだと展開ボタンが表示されません)。
- JSON列の中身がネストされたRecordやListで、Power Queryが構造を認識できない場合。
- 一部の行がnullやエラーを含んでいる場合、展開処理が途中で止まることがあります。
Record/Listの展開方法
展開ボタンが表示されない場合は、列のデータ型を「Any」または「Record」「List」に変更してから再度試します。列を右クリックして「データ型の変更」で適切な型を選択してください。それでも展開できない場合は、後述の手順で構造を詳細に確認します。
JSON列が展開できない主な原因
原因を特定するために、よくあるパターンを整理します。以下の表を参考に、自分の状況と照らし合わせてみてください。
| 原因 | 具体的な症状 | よくあるシチュエーション |
|---|---|---|
| データ型がテキストになっている | 展開ボタンがグレーアウト、または「値を展開」が選択できない | API応答をそのまま読み込んだ初期状態 |
| JSON構造がネストしすぎている | 展開ボタンを押すとエラーが発生する、または一部しか展開されない | 複数階層のオブジェクトや配列を含むAPI |
| API応答にエラー行やnullが混在 | 展開処理が途中で失敗し、「Expression.Error: キーが見つかりません」などのエラー | 一部のレコードで必須フィールドが欠けている場合 |
| 認証・アクセス権限の問題 | データの読み込み時に401エラー、または空の応答 | APIキーが期限切れ、IP制限に引っかかっている |
これらの原因を特定するためには、まずエラーメッセージを確認し、次に実際の応答データを直接見ることが重要です。
展開できない時の確認手順
問題が発生した際には、以下の手順で段階的に確認します。各手順の結果に応じて次のステップを判断してください。
- 応答全体をテキストとして確認する:Power Queryエディターで、該当列を選択し「列の追加」タブから「サンプルファイルとしての変換」→「JSON」を選択します。これでJSON構造が認識され、エラー行があれば赤い文字で表示されます。エラー行を右クリックして「エラーの詳細」を見ると、どのプロパティが欠けているかがわかります。
- データ型を「Any」に変更する:列を右クリックし「データ型の変更」で「任意(Any)」を選択します。これでPower Queryが自動的に最適な型を判断します。その後、もう一度展開ボタンを試します。
- テーブル変換を試す:JSON列が単なるテキストの場合、「変換」タブの「JSONの解析」をクリックして構造を明示的に解析します。これでRecordやListとして認識されるようになります。
- エラー行を除外する:「行の削除」→「エラーの削除」を実行します。エラー行を取り除いた後に展開を試すと成功することがあります。ただし、データの欠落が許容されるかどうかは業務要件に応じて判断してください。
- M言語を使用して手動展開する:標準機能でどうしても展開できない場合は、M言語の関数を使って明示的に変換します。具体的には「カスタム列の追加」で以下のような式を入力します。
try Table.FromRecords(Json.Document([列名])) otherwise null
この式は、JSON文字列をレコードのテーブルに変換し、エラーがあればnullを返します。 - 管理者に連絡してAPIアクセスを確認する:応答自体が空だったり401エラーが出る場合は、ネットワークや認証に問題があります。会社のプロキシ設定やファイアウォールでAPIエンドポイントがブロックされていないか、IT部門に確認を依頼してください。
これらの手順を試しても解決しない場合は、より詳細なM言語のスキルが必要です。次のセクションで具体例を紹介します。
ADVERTISEMENT
状況別の比較表
実際の現場でよく遭遇するシナリオを比較表にまとめました。自分の症状に該当する行を探し、推奨する解決策を試してみてください。
| シナリオ | 症状 | 主な原因 | 推奨解決策 |
|---|---|---|---|
| シンプルなJSONオブジェクト | 「展開」ボタンが表示されない | データ型がテキスト | データ型を「Record」に変更 |
| 配列を含むJSON | 展開後に行が増えない、またはエラー | Listが正しく認識されていない | 「JSONの解析」を実行後、List展開 |
| ネストが深いJSON | 展開が途中で止まる、エラーが出る | 深い階層を一度に展開しようとしている | 一度にすべて展開せず、段階的にRecord→Listを繰り返す |
| エラー行が混在 | 展開処理が中断される | 一部のデータが欠損 | 事前にエラー行を削除、またはM言語で例外処理 |
| APIから空の応答や認証エラー | データが1行も読み込まれない | ネットワーク/認証の問題 | ブラウザーで直接APIを叩いて応答を確認し、管理者に報告 |
M言語を使った展開の具体例
標準機能で対応できない場合は、M言語を直接記述してJSONを展開します。以下に実務で使えるコード例を紹介します。
基本的なRecord展開
JSON列が単一のRecordオブジェクトの場合、次のようにしてテーブルに変換します。
let
Source = Json.Document(Web.Contents("https://api.example.com/data")),
#"Converted to Table" = Record.ToTable(Source)
in
#"Converted to Table"
ただし、APIの応答がすでにテーブル形式で読み込まれている場合は、列の展開に集中します。
Listを含むJSONの展開
JSON列がList(配列)を含む場合、以下のようにして各行のListを展開します。
let
Source = ... ,
#"Expanded List" = Table.ExpandListColumn(Source, "orders")
in
#"Expanded List"
この関数は、指定した列がListの場合、Listの各要素を新しい行として展開します。ただし、List内の要素がRecordの場合は、さらに展開が必要です。
エラーハンドリングを組み込む
エラー行がある場合、try式を使って安全に展開します。
let
Source = ... ,
#"Added Custom" = Table.AddColumn(Source, "ParsedData", each try Json.Document([RawJson]) otherwise null),
#"Expanded Parsed Data" = Table.ExpandRecordColumn(#"Added Custom", "ParsedData", {"id", "name", "email"})
in
#"Expanded Parsed Data"
この方法なら、nullになった行は無視して展開できます。ただし、展開するフィールド名は事前に把握しておく必要があります。
よくある質問
Q1: 展開ボタンが表示されないのですが、どうすれば良いですか?
A: 列のデータ型が「テキスト」になっている可能性が高いです。列を選択し、「データ型の変更」で「任意(Any)」または「Record」に変更してみてください。それでも表示されない場合は、JSONの解析機能を使って構造を認識させます。
Q2: 展開後に「Expression.Error: キーが見つかりません」と出ます。なぜですか?
A: 特定の行で、展開しようとしているプロパティ(キー)が存在しない場合に発生します。例えば、APIから取得したレスポンスがすべての行で同じ構造ではない場合です。この場合は、M言語のtry式を使ってエラー行をnullに変換するか、事前にエラー行を削除してください。
Q3: 管理者に確認すべきことは何ですか?
A: APIエンドポイントにアクセスできるかどうか(プロキシやファイアウォールの設定)、APIキーや認証情報が有効かどうか、そしてPower Queryのカスタム関数が組織のポリシーで許可されているかを確認してください。会社のセキュリティポリシーによっては、M言語の編集や外部データソースの使用が制限される場合があります。
まとめ
Power QueryでWeb APIのJSON列が展開できない場合、まずはデータ型とエラーメッセージを確認し、標準の展開ボタンやJSONの解析機能を試すことが基本です。それでも解決しない場合は、M言語で手動展開やエラーハンドリングを実装することで、ほとんどのケースに対応できます。ただし、会社のITポリシーに抵触しないように注意し、必要に応じて管理者に相談してください。この記事の手順を参考に、原因を切り分けて効率的に問題を解決しましょう。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
