Power Query では、次の 2 種類のエラーが発生する可能性があります。
- 段階レベルのエラー
- セルレベルのエラー
この記事では、各レベルで見つかる可能性のある最も一般的なエラーを修正する方法について提案し、それぞれのエラー理由、エラー メッセージ、エラーの詳細について説明します。
ステップ レベルのエラー
ステップ レベルのエラーにより、クエリが読み込まれるのを防ぎ、エラー コンポーネントが黄色のウィンドウに表示されます。
- エラーの理由: コロンの前の最初のセクション。 前の例では、エラーの理由は Expression.Error です。
- エラー メッセージ: 理由の直後のセクション。 前の例では、 エラー メッセージはテーブルの列 'Column' が見つかりませんでした。
- エラーの詳細: 詳細: 文字列の直後のセクション。 前の例では、エラーの詳細は Column です。
Power Query Online では、少し異なる詳細が表示されます。 エラーの詳細は 列のままですが、オンライン エラー メッセージにはエラー理由 (Expression.Error) とエラー コード (10224) も含まれています。
一般的なステップ段階のエラー
いずれの場合も、エラーの原因、エラー メッセージ、およびエラーの詳細を詳しく確認して、エラーの原因を理解することをお勧めします。 [ 詳細の表示 ] ボタン (使用可能な場合) を選択すると、エラーの詳細を表示できます。
ソースが見つかりません - DataSource.NotFound
このエラーは、通常、ユーザーがデータ ソースにアクセスできない場合、ユーザーがデータ ソースにアクセスするための正しい資格情報を持っていない場合、またはソースが別の場所に移動された場合に発生します。
例: ドライブ D に配置され、ユーザー A によって作成されたテキスト タイルからのクエリがあります。ユーザー A は、ドライブ D にアクセスできないユーザー B とクエリを共有します。このユーザーがクエリを実行しようとすると、環境内にドライブ D がないため 、DataSource.NotFound が取得されます。
考えられる解決策: テキスト ファイルのファイル パスを、両方のユーザーがアクセスできるパスに変更できます。 ユーザー B は、ファイル パスを同じテキスト ファイルのローカル コピーに変更できます。
テーブルの列が見つかりませんでした
通常、このエラーは、クエリに存在しない列名への直接参照をステップが行うときにトリガーされます。
例: 列名の 1 つが Column であったテキスト ファイルのクエリがあります。 クエリには、その列の名前を Date に変更する手順 があります。 しかし、元のテキスト ファイルに変更があり、手動で Date に変更されたため、列という名前の列見出しはなくなりました。 Power Query では 列という名前の列見出しが見つからないため、列の名前を変更できません。 次の図に示すエラーが表示されます。
考えられる解決策: このケースには複数の解決策がありますが、これらはすべて、実行する内容によって異なります。 この例では、正しい Date 列ヘッダーはテキスト ファイルから既に取得されているため、列の名前を変更する手順を削除できます。 この変更により、このエラーなしでクエリを実行できます。
その他の一般的な段階レベルのエラー
複数のデータ ソース間でデータを結合またはマージすると、次の図に示すような Formula.Firewall エラーが発生することがあります。
このエラーは、データ ソース間のデータ プライバシー レベルや、これらのデータ ソースを結合またはマージする方法など、さまざまな理由で発生します。 この問題を診断する方法の詳細については、「 データ プライバシー ファイアウォール」を参照してください。
セル単位のエラー
セル レベルのエラーはクエリの読み込みを妨げるものではなく、エラー値を [ エラー ] としてセルに表示します。 セルで空白を選択すると、データ プレビューの下にエラー ウィンドウが表示されます。
注
データ プロファイル ツールは、列品質機能を使用してセル レベルのエラーをより簡単に識別するのに役立ちます。 詳細については、「 データ プロファイル ツール」を参照してください。
セル レベルでのエラーの処理
セル レベルのエラーが発生した場合、Power Query には、エラーの削除、置換、または保持によってそれらを処理する一連の関数が用意されています。
次のセクションでは、指定した例では、開始点と同じサンプル クエリを使用します。 このクエリでは、変換エラーが原因でエラーが発生した 1 つのセルを含む Sales 列があります。 そのセル内の値は NA でしたが、その列を整数に変換すると、Power Query で NA を数値に変換できなかったため、次のエラーが表示されます。
エラーを削除する
Power Query でエラーが発生した行を削除するには、まずエラーを含む列を選択します。 [ ホーム ] タブの [ 行の削減 ] グループで、[ 行の削除] を選択します。 ドロップダウン メニューから、[ エラーの削除] を選択します。
その操作の結果を次の表に示します。
エラーを置換
エラーのある行を削除する代わりに、エラーを固定値に置き換える場合は、同様に行うことができます。 エラーがある行を置き換えるには、まずエラーを含む列を選択します。 [ 変換 ] タブの [ 任意の列 ] グループで、[ 値の置換] を選択します。 ドロップダウン メニューから、[ エラーの置換] を選択します。
[ エラーの置換 ] ダイアログで、すべてのエラーを値 10 に置き換えるため、値 10 を入力します。
その操作の結果を次の表に示します。
エラーを保持する
Power Query は、エラーを修正しない場合でも、エラーのある行を識別するための優れた監査ツールとして機能します。 この状況では、 エラーの保持 が役立ちます。 エラーのある行を保持するには、まず、エラーを含む列を選択します。 [ ホーム ] タブの [ 行の削減 ] グループで、[ 行の保持] を選択します。 ドロップダウン メニューから、[ エラーの保持] を選択します。
その操作の結果を次の表に示します。
一般的なセルレベルのエラー
ステップ レベルのエラーと同様に、エラーの原因、エラー メッセージ、およびセル レベルで提供されるエラーの詳細を詳しく見て、エラーの原因を理解することをお勧めします。 次のセクションでは、Power Query で最も頻繁に発生するセル レベルのエラーについて説明します。
データ型変換エラー
通常、テーブル内の列のデータ型を変更するときにトリガーされます。 列内の一部の値を目的のデータ型に変換できませんでした。
例: Sales という名前の列を含むクエリがあります。 その列の 1 つのセルはセル値として NA を持ち、残りは値として整数を持ちます。 列のデータ型をテキストから整数に変換することにしますが、 NA 値を持つセルではエラーが発生します。
考えられる解決策: エラーのある行を特定した後、NA ではなく正しい値を反映するようにデータ ソースを変更するか、エラーの原因となる NA 値の値を指定する置換エラー操作を適用できます。
操作エラー
テキスト値に数値を乗算するなど、サポートされていない操作を適用しようとすると、エラーが発生します。
例: "Total Sales: " と Sales 列の値を連結したテキスト文字列を作成して、クエリのカスタム列を作成します。 連結操作ではテキスト列のみがサポートされ、数値列はサポートされないため、エラーが発生します。
考えられる解決策: このカスタム列を作成する前に、 Sales 列のデータ型をテキストに変更します。
入れ子になった値がエラーとして表示される
入れ子になった構造化値 (テーブル、リスト、レコードなど) を含むデータを操作すると、次のエラーが発生することがあります。
Expression.Error: We cannot return a value of type {value} in this context
Details: In the past we would have returned a text value of {value}, but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information.
これらのエラーは、通常、次の 2 つの理由で発生します。
- データ プライバシー ファイアウォールがデータ ソースをバッファーすると、入れ子になった非スカラー値が自動的にエラーに変換されます。
-
Any
データ型で定義された列に非スカラー値が含まれている場合、このような値は読み込み中にエラーとして報告されます (Excel のブックや Power BI Desktop のデータ モデルなど)。
考えられる解決策:
- エラーを含む列を削除するか、そのような列に対して
Any
以外のデータ型を設定します。 - 関係するデータ ソースのプライバシー レベルを、バッファーなしで結合できるデータ ソースに変更します。
- 結合を実行する前にテーブルをフラット化して、入れ子になった構造化値 (テーブル、レコード、リストなど) を含む列を排除します。