【PowerAutomate】アレイのフィルター処理が失敗する。エラーの原因と対策6選

スポンサーリンク




作業を自動化する
  • アレイのフィルター処理がエラーになる
  • エラーメッセージの意味がよくわからない
  • 思い通りフィルターされない

この記事では、そんな方に向けてアレイのフィルター処理がエラーになる原因と対策を6つ紹介します。

みずしぶき
みずしぶき

この記事を読めば、今起きているエラーを解決できます。
さらに自力で調査する方法も最後に紹介しています。

まだPowerAutomateを使った事が無いという方はこちらの記事を参考にしてください。

PowerAutomateはブラウザで操作するのでインストール無しで利用できます。Windows10ではないMacユーザも自由に使えます。

>>PowerAutomateで自動化した具体例9選<<

スポンサーリンク

失敗する原因と対策

アレイのフィルター処理は、多様なデータを処理するのでエラーになる頻度が高いアクションになります。
私が使っていてエラーになった内容を原因と対策でまとめました。

  1. 原因:タイプが違う
  2. 原因:item()がitems()になっている
  3. 原因:JSONのキー指定が誤っている
  4. 原因:差出人に配列以外を指定している
  5. 原因:Excelの日付がシリアル値になっている
  6. 原因:どうしてもわからない場合

6つ目は原因ではありませんが、原因がどうしても分からない場合の調べ方を紹介します。

公式の説明を見たい方はこちらを参照してください。

(1)原因:タイプが違う

100,200,300,400から200より大きな300と400を取り出したい場合。
この条件で実行してみると、

エラーになります。

InvalidTemplate. The execution of template action 'アレイのフィルター処理_2' failed: The evaluation of 'query' action 'where' expression '@greater(item(), 200)' failed: 'The template language function 'greater' expects two parameter of matching types. The function was invoked with values of type 'String' and 'Integer' that do not match.'.
テンプレートが無効です。テンプレート アクション 'アレイのフィルター処理_2' の実行に失敗しました: 'query' アクション 'where' 式 '@greater(item(), 200)' の評価に失敗しました: 'テンプレート言語関数 'greater' は、一致する型の 2 つのパラメーターを予期していました。この関数は、一致しない型「String」と「Integer」の値で呼び出されました。

エラー内容に書いてありますが、比較する2つのタイプが違います。

配列のデータがカンマで囲まれて文字になっているので、文字として認識されています。
比較する値は200の数値なのでタイプが違います。

  • createArray(‘100′,’200′,’300′,’400’)←文字になっているのでNG
  • createArray(100,200,300,400)←数値ならOK

アクションの動きです。
1つ目の比較でタイプが合わなかったのでエラーになりました。

item()>200結果
“100”>200ここでエラー
“200”>200
“300”>200
“400”>200

  対策:int関数で数値に変換する。int(item())

文字列の内容が数値だと分かっている場合はint関数を使って解決します。

  • 【修正前】item()
  • 【修正後】int(item())

修正後の条件がこちら

アクションの動きです。
200より大きい300と400がTrueになります。

int(item())>200結果
100>200False
200>200False
300>200True
400>200True

(2)原因:item()がitems()になっている

100,200,300,400から200より大きな300と400を取り出したい場合。
この条件で実行してみると、

エラーになります。

The template validation failed: 'The template action 'アレイのフィルター処理_4' at line '1' and column '2405' is not valid: "The template language function 'items' must have at least one parameter.".'.
テンプレートの検証に失敗しました: '行 '1' および列 '2405' のテンプレート アクション 'アレイのフィルター処理_4' は無効です: 「テンプレート言語関数 'items' には少なくとも 1 つのパラメーターが必要です。」 .'.

公式ではitem()関数で各項目にアクセスすると書かれています。items()ではないので注意しましょう。

パラメータに「アレイのフィルター処理_4」を入力しても、

使い方が違うのでエラーになります。

フローの保存がコード 'InvalidTemplate' およびメッセージ 'The template validation failed: 'The repetition action(s) 'アレイのフィルター処理処理_4' referenced by 'inputs' in action 'アレイのフィルター処理_4' are not defined in the template.'.' で失敗しました。

  対策:item()に直す

item()に修正しましょう。

  • 【修正前】items()
  • 【修正前】items(‘アレイのフィルター処理_4’)
  • 【修正後】item()

修正後の条件がこちら

(3)原因:JSONのキー指定が誤っている

100,200,300,400から200より大きな300と400を取り出したい場合。
この条件で実行してみると、

エラーになります。

InvalidTemplate. The execution of template action 'アレイのフィルター処理' failed: The evaluation of 'query' action 'where' expression '@greater(item(), 200)' failed: 'The template language function 'greater' expects all of its parameters to be either integer or decimal numbers. Found invalid parameter types: 'Object'.'.
テンプレートが無効です。テンプレート アクション 'アレイのフィルター処理' の実行に失敗しました: 'クエリ' アクション 'where' 式 '@greater(item(), 200)' の評価に失敗しました: 'テンプレート言語関数 'greater' はすべてのパラメーターを予期しています整数または 10 進数のいずれかになります。無効なパラメータ タイプが見つかりました: 'Object'.'。

これもタイプ違いのエラーになります。

アクションの動きです。
配列の中身が{}で囲まれたJSONのオブジェクトになっているので数値と比較できません。
JSONの場合はキーとなる文字を指定する必要があります。

item()>200結果
{“No”:100}>200ここでエラー
{“No”:200}>200
{“No”:300}>200
{“No”:400}>200

100,200,300,400の左側にあるNoがキーになります。

こちらはキーの名前を間違えたパターンです。

エラーになりました。

InvalidTemplate. The execution of template action 'アレイのフィルター処理' failed: The evaluation of 'query' action 'where' expression '@greater(item()?['Name'], 200)' failed: 'The template language function 'greater' expects all of its parameters to be either integer or decimal numbers. Found invalid parameter types: 'Null'.'.
テンプレートが無効です。テンプレート アクション 'アレイのフィルター処理' の実行に失敗しました: The Evaluation of 'query' action 'where' expression '@greater(item()?['Name'], 200)' failed: 'The template language function 'greeater ' expectedすべてのパラメータを整数または小数にします。無効なパラメーター タイプが見つかりました: 'Null'.'。

こちらも正解はNoを指定する事です。

  • キー:No
  • キー:Name←存在しないのでNG

アクションの動きです。
存在しないキーを指定しているので1つ目でエラーになります。

item()?[‘Name’]>200結果
>200ここでエラー
>200
>200
>200

  対策:キーを正しく指定する。item()?[‘No’]

配列がJSONオブジェクトの場合はキーを正しく指定しましょう。

  • 【修正前】item()?[‘Name’]
  • 【修正後】item()?[‘No’]

修正後の条件はこちら

アクションの動きです。
200より大きい300と400がTrueになります。

item()?[‘No’]>200結果
100>200False
200>200False
300>200True
400>200True

(4)原因:差出人に配列以外を指定している

この条件で実行してみると、

エラーになります。

BadRequest. The 'from' property value in the 'query' action inputs is of type 'Integer'. The value must be an array.
要求の形式が正しくありません。 'query' アクション入力の 'from' プロパティ値はタイプ 'Integer' です。値は配列でなければなりません。

配列以外を差出人に指定するとこのエラーになります。
int(‘100’)は数値型なので配列ではありません。

こちらはJSONオブジェクトを指定した場合です。

同じくエラーになります。

BadRequest. The 'from' property value in the 'query' action inputs is of type 'Object'. The value must be an array.
要求の形式が正しくありません。 'query' アクション入力の 'from' プロパティ値はタイプ 'Object' です。値は配列でなければなりません。

  対策:配列を指定する

アレイのフィルター処理なので配列を指定しましょう。

  • 【修正前】int(‘100’)
  • 【修正前】json(‘{“No”:100}’)
  • 【修正後】createArray(100,200,300,400)

修正後の条件がこちら

(5)原因:Excelの日付がシリアル値になっている

Excelのデータを取得した場合、Excelでは日付だったデータがPowerAutomateでは文字列のシリアル値になります。

この中から2022/08/26より後の日付を取得したい場合。
この条件で実行してみると、


エラーにはなりませんが、日付がシリアル値で全てTrueになってしまいました。

item()?[‘Date’]>“2022/08/26”結果
“44799”>“2022/08/26”True
“44800”>“2022/08/26”True
“44801”>“2022/08/26”True
“44802”>“2022/08/26”True

Excelの日付はシリアル値の文字列として取得されて、エラーにならないのが厄介です。

  対策:シリアル値を日付に変換する

Excelの日付を取得した場合は、シリアル値をyyyy/MM/dd形式に変換する式に書き換えます。

  • 【修正前】item()?[‘Date’]
  • 【修正後】addDays(‘1899/12/30’,int(item()?[‘Date’]),’yyyy/MM/dd’)

修正後の条件がこちら

アクションの動きです。
予定通り8/27〜8/29がTrueになりました。

addDays(‘1899/12/30’,int(item()?[‘Date’]),’yyyy/MM/dd’)>“2022/08/26”結果
“2022/08/26”>“2022/08/26”False
“2022/08/27”>“2022/08/26”True
“2022/08/28”>“2022/08/26”True
“2022/08/29”>“2022/08/26”True

(6)原因:どうしてもわからない場合

この中から2022/08/26より後の日付を取得したい場合。
この条件で実行してみると、

エラーになります。

InvalidTemplate. The execution of template action 'アレイのフィルター処理_5' failed: The evaluation of 'query' action 'where' expression '@greater(addDays('1899/12/30', int(item()?['Date']), 'yyyy/MM/dd'), '2022/08/26')' failed: 'The template language function 'int' was invoked with a parameter that is not valid. The value cannot be converted to the target type.'.
テンプレートが無効です。テンプレート アクション 'アレイのフィルター処理_5' の実行に失敗しました: 'query' アクション 'where' 式 '@greater(addDays('1899/12/30', int(item()?['Date' ]) , ' yyyy /MM/dd'), '2022/08/26')' が失敗しました: 'テンプレート言語関数 'int' が無効なパラメーターで呼び出されました。値をターゲット タイプに変換できません。

シリアル値を日付に変換する処理のint関数でエラーになっています。
Excelのデータを見てみるとNo3のDateがハイフンになっています。このハイフンは数字ではないのでここでint関数が失敗したようです。

アレイのフィルター処理でエラーが出た場合、1つのデータが原因でもどのデータか特定ができないという問題があります。
今回のようにデータが4つしか無ければ直接見て気づくかもしれないが、データが多いと探せません。

  対策:Apply to eachで調べる

アレイのフィルター処理が失敗しても、どのデータに問題があったか調べることができません。
Apply to eachなら問題のあるデータを調べることができます。

アクションApply to eachを追加して、その中にアレイのフィルター処理を入れます。

修正後の条件がこちら

items(‘apply_to_each’)のデータは配列ではないので差出人に設定するとエラーになりますが、array関数を使う事で配列として扱う事ができます。

【差出人へ追加】array(items(‘apply_to_each’))

この状態でフローを動かすと同じエラーが発生しました。

InvalidTemplate. The execution of template action 'アレイのフィルター処理_6' failed: The evaluation of 'query' action 'where' expression '@greater(addDays('1899/12/30', int(item()?['Date']), 'yyyy/MM/dd'), '2022/08/26')' failed: 'The template language function 'int' was invoked with a parameter that is not valid. The value cannot be converted to the target type.'.
テンプレートが無効です。テンプレート アクション 'アレイのフィルター処理_6' の実行に失敗しました: 'query' アクション 'where' 式 '@greater(addDays('1899/12/30', int(item()?['Date' ]) , ' yyyy /MM/dd'), '2022/08/26')' が失敗しました: 'テンプレート言語関数 'int' が無効なパラメーターで呼び出されました。値をターゲット タイプに変換できません。

今回はApply to eachで1つずつ処理しているので失敗したデータを調べることができます。
Apply to eachを開き「次の失敗」を押すとエラー部分が表示されました。

3つ目で止まっています。
後は、エラー文とデータを見比べればDateの値がシリアル日付ではなくハイフンだったのでint関数が失敗したことがわかります。

  補足:シリアル値に「ハイフン」が混ざっている場合の対処法2つ

1つめはExcelから取得するタイミングでフィルタークエリで取り除く

2つめはExcelから取得した直後にアレイのフィルター処理で取り除く

このようにフィルタークエリで絞っておいたり、アレイのフィルター処理を重ねる事で例外のデータを除外することができます。

まとめ

アレイのフィルター処理がエラーになる原因と対策を6つ説明しました。

  1. 原因:タイプが違う
  2. 原因:item()がitems()になっている
  3. 原因:JSONのキー指定が誤っている
  4. 原因:差出人に配列以外を指定している
  5. 原因:Excelの日付がシリアル値になっている
  6. 原因:どうしてもわからない場合

アレイのフィルター処理は「配列を指定する」「値のタイプを合わせる」JSONキーを指定するこの3つが基本になります。ExcelやSharePointのリストとも相性が良いのでエラーの傾向を覚えておきましょう。

PowerAutomateの記事まとめ
まだ試してないアクションがあれば見ておきましょう。
初心者向け
【初心者向け】PowerAutomateの使い方。無料で誰でも使えます。
基本的なアクション
【PowerAutomate】メールの添付ファイルをOneDriveへ保存する。
【PowerAutomate】Excelのデータをメールで送信する。
【PowerAutomate】メールを受信したらExcelにデータを入力する。
アクションの応用
【PowerAutomate】第1~5○曜日の日付を求める。
【PowerAutomate】メール本文から名前を抽出する。文字列抽出のキホン。
【PowerAutomate】ソートするフローを作る。配列の並べ替え。
【PowerAutomate】SharePointのリストから列と行をフィルターして表にする。
【PowerAutomate】ExcelからSharePointのリストに一括転記する
【PowerAutomate】SharePointのテキストファイルに改行を付けてメール送信
関数・アクション
【PowerAutomate】日付の関数まとめ。月末月初やExcelシリアル値変換など。
【PowerAutomate】Apply to eachの使い方。勝手に出てくる原因や遅い時の高速化など!

>>PowerAutomateで自動化した具体例9選<<

タイトルとURLをコピーしました