エラー処理
Excel や DAX 言語に IFERROR
関数があるのと同様に、Power Query にも、エラーをテストしてキャッチするための独自の構文があります。
Power Query でのエラーの処理に関する記事で説明されているように、エラーはステップ レベルまたはセル レベルで発生する可能性があります。 この記事では、独自のロジックに基づいてエラーを検出して管理する方法に焦点を当てます。
Note
この概念を示すために、この記事では、そのデータ ソースとして Excel ブックを使用します。 ここに示されている概念は、Excel ブックから取得された値だけでなく、Power Query でのすべての値に適用されます。
このデモのサンプル データ ソースは、次の表を含む Excel ワークブックです。
Excel ワークブックのこのテーブルには、標準レート列に#NULL!、#REF!、#DIV/0! などの Excel エラーがあります。 このテーブルを Power Query エディターにインポートすると、次の図にどのように表示されるかを示します。
Excel ブックのエラーが、各セル内の [Error]
値にどのように表示されているかに注意してください。
この記事では、エラーを別の値に置き換える方法を学習します。 さらに、エラーを捕捉し、それを独自のロジックに使用する方法も学びます。
この場合の目標は、標準レート 列の値を使用する新しい 最終レート 列を作成することです。 何らかのエラーが存在する場合は、対応する [Special Rate] 列の値が使用されます。
エラーを見つけたときに代替値を提供する
この場合の目標は、標準レート 列の値を使用する新しい 最終レート列をサンプル データ ソースに作成することです。 エラーがある場合は、対応する Special Rate 列の値が使用されます。
新しいカスタム列を作成するには、[列の追加] メニューに移動し、[カスタム列] を選択します。 [カスタム列] ウィンドウで、数式 try [Standard Rate] otherwise [Special Rate]
を入力します。 この新しい列に「Final Rate」という名前を付けます。
上記の数式では [Standard Rate] 列の評価を試み、エラーが検出されなければその値を出力します。 [Standard Rate] 列でエラーが検出された場合は、otherwise
ステートメントの後に定義されている値 (この場合は [Special Rate] 列) が出力されます。
テーブル内のすべての列に正しいデータ型を追加した後の、最終的なテーブルの外観を次の図に示します。
Note
別の方法として、式 try [Standard Rate] catch ()=> [Special Rate]
を入力することもできます。これは前の式と同等ですが、パラメーターを必要としない関数で catch キーワードを使用します。
catch
キーワードは、2022 年 5 月に Power Query に導入されました。
独自の条件付きエラー ロジックを提供する
前のセクションと同じサンプル データ ソースを使用して、新しい目標は、[Final Rate] の新しい列を作成することです。 [Standard Rate] の値が存在する場合は、その値が使用されます。 それ以外の場合は、#REF!
エラーのある行を除き、特別レート 列の値が使用されます。
Note
#REF!
エラーを除外する唯一の目的は、デモンストレーションのためです。 この記事で紹介されている概念を使用すると、エラー レコードから任意のフィールドを選択してターゲットにすることができます。
エラー値の横にある空白のどこかを選択すると、画面の下部に詳細ウィンドウが表示されます。 この詳細ウィンドウには、エラーの理由 DataFormat.Error
とエラー メッセージ Invalid cell value '#REF!'
の両方が含まれています。
一度に 1 つのセルしか選択できないため、実質的には、一度に 1 つのエラー値のエラー コンポーネントのみを表示できます。 ここで新しいカスタム列を作成し、try
式を使用します。
カスタム ロジックで try
を使用する
新しいカスタム列を作成するには、[列の追加] メニューに移動し、[カスタム列] を選択します。 [カスタム列] ウィンドウで、数式 try [Standard Rate]
を入力します。 この新しい列に「All Errors」という名前を付けます。
try
式では、値とエラーを、try
式でエラーが処理されたかどうかを示すレコード値と、適切な値またはエラー レコードに変換します。
列ヘッダーの横にあるアイコンを選択することにより、この新しく作成された列をレコード値で展開し、展開に使用できるフィールドを確認できます。
この操作では、次の 3 つの新しいフィールドが公開されます。
- All Errors.HasError - Standard Rate 列の値にエラーがあるかどうかを表示します。
- All Errors.Value - 標準レート 列の値にエラーがない場合、この列には 標準レート 列の値が表示されます。 エラーがある値の場合、このフィールドは使用できず、展開操作中のこの列の値は
null
になります。 - すべてのエラー.エラー - 標準レート 列の値にエラーがあった場合、この列には 標準レート 列の値のエラー レコードが表示されます。 エラーがない値の場合、このフィールドは使用できず、展開操作中のこの列の値は
null
になります。
さらに調査を行う場合は、[All Errors.Error] 列を展開して、エラー レコードの次の 3 つのコンポーネントを取得できます。
- エラーの理由
- エラー メッセージ
- エラーの詳細
展開操作を行うと、[All Errors.Error.Message] フィールドには、各セルにどのような Excel エラーがあるかを正確に伝える特定のエラー メッセージが表示されます。 このエラー メッセージは、エラー レコードの [エラー メッセージ] フィールドから派生しています。
これで、新しい列に各エラー メッセージが表示されたので、次の句を含む [Final Rate] という名前の新しい条件列を作成できます。
- [All Errors.Errors.Message] 列の値が
null
と等しい場合は、[Standard Rate] 列の値が出力されます。 - それ以外の場合、All Errors.Errors.Message列の値が
Invalid cell value '#REF!'.
と等しくない場合、出力は Special Rate 列の値になります。 - それ以外の場合は、null になります。
Account、Standard Rate、Special Rateおよび Final Rate 列のみを保持し、各列に正しいデータ型を追加した後 , 次の画像は、最終的なテーブルがどのようになるかを示しています。
カスタム ロジックで try
とcatch
を使用する
あるいは、 try
およびcatch
キーワードを使用して新しいカスタム列を作成することもできます。
try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null
その他のリソース
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示