ADVERTISEMENT

【Power Automate】休日を除く計算で困った時の実行履歴から原因を読む方法

【Power Automate】休日を除く計算で困った時の実行履歴から原因を読む方法
🛡️ 超解決
Power Automateで休日を除いた営業日計算を実装しても、実際に動かしてみると期待した日付が得られないことがあります。多くの場合、休日リストの読み込みミスや計算ロジックの誤りが原因ですが、どこで問題が起きているのかを特定するには実行履歴が役立ちます。本記事では、フローの実行履歴を詳細に確認し、休日除外計算のトラブルを効率的に解決する方法を解説します。具体的なログの見方や、よくある設定ミスのパターンを紹介します。

【要点】この記事で確認すること

  • 最初に見る場所: フローの実行履歴画面で、各アクションの「入力」タブと「出力」タブを比較します。特にデータ取得と条件分岐の箇所を重点的に確認します。
  • 切り分けの軸: 休日リストのデータが正しく取得できているか、計算ロジック(ループや条件式)が意図通りに動作しているか、タイムゾーンや日付形式のミスがないかを段階的に調べます。
  • 注意点: 会社の休日リストをSharePointやExcelで管理している場合、アクセス権限や列のデータ型が原因でエラーが発生することがあります。管理者に変更を依頼する前に、実行履歴の出力を証拠として共有してください。

ADVERTISEMENT

休日を除く計算の基本とよくある誤解

休日を除く計算では、一般的に「基準日から指定された営業日数後の日付を求める」処理を実装します。例えば「本日から3営業日後の提出期限を計算する」といったシナリオです。Power Automateには標準で営業日計算関数が存在しないため、独自のロジックで実装する必要があります。

多くの場合は、日付を1日ずつ加算しながら、その日が土日または休日リストに含まれているかをチェックし、含まれていればスキップするというループ処理を使います。しかし、このループが正しく動かない原因として、以下のような誤解があります。

営業日計算の一般的なアプローチ

基本的なロジックは「Apply to each」などのループアクションで実装します。変数に基準日をセットし、カウンターが指定営業日数に達するまで以下の処理を繰り返します。

  1. 変数を1日進める(addDays関数)
  2. その日が土曜日または日曜日かを確認(dayOfWeek関数で0または6)
  3. その日が休日リストに含まれているか確認(contains関数など)
  4. 上記のいずれにも該当しなければ、カウンターを1増やす

このアプローチは単純ですが、休日リストのデータ形式やループの終了条件を間違えると期待通りになりません。

休日リストの準備と注意点

休日リストはSharePointリスト、Excelテーブル、SQLテーブルなどで管理します。注意すべきポイントは以下のとおりです。

  • 日付のデータ型: 文字列ではなく日付型で保存してください。文字列の場合、比較時に変換が必要となりミスの原因になります。
  • タイムゾーン: Power Automateとデータソースのタイムゾーンが一致しているか確認します。UTCとローカル時刻のズレで日付が1日ずれることがあります。
  • 重複や範囲外の日付: 同じ日付が複数登録されていたり、未来の日付しかないなどの不備があると計算に影響します。

実行履歴で確認すべき主要なアクション

フローの実行履歴は、各アクションの「入力」と「出力」を確認できる強力なツールです。休日計算で問題が起きた場合、以下のアクションを重点的にチェックします。

「開始日」と「経過日数」の入力値の確認

最初に、フローを起動したときのトリガーや変数の初期値が正しいか確認します。実行履歴で該当アクションを開き、入力タブに表示された開始日と営業日数が意図した値になっているかを見ます。例えば、開始日が文字列になっていたり、営業日数が0や負の数になっていないかをチェックします。

「休日リストの取得」アクションの出力確認

SharePointの「Get items」やExcelの「List rows present in a table」などのアクションで休日リストを取得している場合、その出力が空でないか、正しい日付が含まれているかを確認します。出力タブにはデータの配列が表示されるため、期待する日付が含まれているか、またはエラーメッセージが出ていないかを確認します。

「条件分岐」や「ループ」の各イテレーションのログ

Apply to eachやDo untilなどのループアクションでは、各反復の入力と出力を展開して確認できます。ループ内で日付を1日ずつ進めている場合、何回目の反復でカウンターが増えているか、どの条件でスキップされたかを追跡できます。特に、休日子ェックの条件式の結果が想定と異なる場合、その条件式の評価結果が出力に現れるため、そこを見誤りを特定します。

休日リスト関連のトラブルシューティング

休日リストに関連するトラブルは、データの取得段階か比較段階で発生します。以下に代表的なパターンを示します。

リストが空で返ってくる場合の原因

Get itemsアクションの出力が空配列の場合、休日リストが取得できていません。原因として、接続が切れている、リストのパス(サイト名やリスト名)が間違っている、アクセス権限がない、フィルタークエリが誤っている(例えば日付フィルターが正しくない)などがあります。実行履歴で出力が空であることを確認し、まず接続とパスを再確認します。

日付形式が文字列になっている場合の変換ミス

休日リストの日付列が文字列型で保存されていると、contains関数などで正しく比較できません。出力タブで日付が「2025-01-01」のような文字列として表示される場合、数式で日付型に変換する必要があります。変換ミスがあると常に一致しないため、営業日がカウントされ続けます。このケースでは、出力タブのデータ型を確認し、必要に応じてformatDateTime関数などで変換します。

リスト内の日付が重複している、または範囲外の日付

同じ日付が複数登録されていると、ループ内で同じ休日を何度もスキップしてしまい、結果的に営業日数が少なくなることがあります。また、過去の日付しか登録されていない場合、未来の日付が休日として認識されず、計算が狂います。実行履歴で取得したデータの配列をすべて確認し、不自然な値がないかチェックします。

計算ロジックのデバッグ手順

ここでは、具体的なデバッグ手順を5つのステップで説明します。フローに「営業日計算」という名前の変数やループがある前提です。

  1. 手順1: フローを保存してテスト実行する
    まずフローを保存し、実際にトリガーを起動して実行します。テストデータとして、開始日と営業日数が明確な値を与えます。
  2. 手順2: 実行履歴を開く
    Power Automateポータルで該当フローの「実行履歴」タブを開き、最新の実行をクリックします。
  3. 手順3: 各アクションの「入力」タブと「出力」タブを見比べる
    「休日リストの取得」アクションで、出力に期待する日付の配列が含まれているか確認します。次に、最初の条件分岐やループの開始部分で、入力の日付が正しいか確認します。
  4. 手順4: ループ内の各反復を確認する
    Apply to eachアクションを展開し、各反復の出力を確認します。特に「日付を1日進める」アクションと「休日チェック」の条件アクションの結果に注目します。条件がFalse(休日ではない)となった回数と、カウンターが増えた回数が一致しているか確認します。
  5. 手順5: エラーメッセージの有無と変数の最終値を確認する
    ループ後のアクション(最終日付を設定するなど)の出力で、期待する日付と実際の日付を比較します。変数の値が予想と異なる場合、ループ内のどこで変数が更新されたかを遡って調べます。

失敗パターンと対処法の比較表

現象 考えられる原因 実行履歴の確認ポイント 対処法
休日が除外されず、土日のみ除外される 休日リストのデータが取得できていない、または比較条件が間違っている 休日リスト取得アクションの出力が空、またはcontains関数の結果が常にFalse リスト接続の確認、フィルタークエリの見直し、データ型の変換
期待より少ない営業日数で計算される 休日リストに重複が多い、またはループのカウンター条件ミス ループ内でカウンターが増えるタイミング、重複した日付が複数回スキップされている 休日リストから重複を削除、カウンター増加条件を一度だけにする
計算結果が1日ずれる タイムゾーンの違い、または開始日の時刻が0時でない 開始日の値に時刻が含まれていないか、UTCとローカルのズレ convertTimeZone関数で調整、開始日を日付のみに整形

管理者へ確認する情報と再発防止策

トラブルが発生した場合、管理者に正確な情報を伝えることが重要です。実行履歴から得られた証拠を添えて、以下の点を確認依頼します。

  • 休日リストのアクセス権限: フローが使用するサービスプリンシパルやユーザーアカウントに、リストへの読み取り権限があるか
  • リストの列定義: 日付列のデータ型と名称がフロー内の参照と一致しているか(例えば「HolidayDate」が「Date」になっていないか)
  • タイムゾーンの設定: SharePointサイトやExcelファイルのタイムゾーン設定とPower Automateのタイムゾーンが整合しているか

再発防止策としては、以下の対策が有効です。

  • 休日リストの定期的な更新: 年間スケジュールをまとめて登録し、年に一度メンテナンスする運用を徹底します。
  • エラーハンドリングの組み込み: リスト取得が空の場合に代替値を設定する、またはフローを停止する分岐を追加します。
  • テストケースの準備: 曜日パターンや祝日を含む複数のテストシナリオを用意し、フロー修正時には必ず実行します。

よくある質問

Q1: 実行履歴に「アクションがスキップされました」と表示されるのはなぜですか?

条件分岐で条件が満たされなかった場合、そのアクションはスキップされます。例えば、休日チェックで「日付が休日リストに含まれる」という条件がFalseになれば、スキップされたアクションが表示されます。実行履歴の概要でスキップされたアクションを特定し、条件式を見直してください。

Q2: ループが無限に続いているように見えます。どこを調べればいいですか?

ループが無限に続く場合、Do untilの終了条件が満たされていない可能性があります。実行履歴でループアクションの出力を開き、現在の反復回数と変数の値を確認します。特にカウンターが増加していない、または終了条件の変数が更新されていないことが原因です。

Q3: 休日リストの取得に時間がかかり過ぎてタイムアウトします。どうすればいいですか?

大量のデータを取得するとタイムアウトする場合があります。フィルターで必要な範囲のみ取得する、またはリストを年別に分割するなどの対策を検討してください。実行履歴で「タイムアウト」エラーが表示される場合は、データ量の削減が必要です。

Q4: 休日リストの日付を手動で追加したのに反映されません。なぜですか?

フローがキャッシュや過去の実行結果を使っている可能性は低いですが、リストの変更後はフローを再実行する必要があります。また、SharePointリストの場合、インデックスが更新されるまでタイムラグがあることもあります。実行履歴の出力で新しい日付が含まれているか確認してください。

まとめ

Power Automateで休日を除く計算に問題が発生した場合、実行履歴は原因特定の決定的な手がかりとなります。入力と出力を比較し、特にデータ取得と条件分岐の結果を丁寧に追跡することで、設定ミスやデータ不備を発見できます。休日リストの管理を徹底し、テストケースを用意しておくことで、再発を防ぎ安定したフロー運用が可能になります。実行履歴を活用したトラブルシューティングのスキルは、Power Automate全体の品質向上にも役立つでしょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT