Power Automate　「スケジュール済みクラウドフロー」の注意点

#概要　
「スケジュール済みクラウドフロー」は便利なのですが、ケースによっては設定に注意が必要という話です。
#注意
Power Automateの「Power BIデータセットの更新アクション」は現状ではプレビューですので実働は考慮する必要があります。
2020年12月の情報になります。

#検証したケース
休日データーと更新時刻設定をDataverseに設置。
更新時刻は8:00　10:00 12:00 13:00 14:00 15:00 16:00 17:00
スケジュール済みクラウドフローを1時間ごとに発火させ、
条件に合致したときにPower BIデータセットを更新することを想定。



Power BIのインポートモードにはスケジュール更新する機能があります。
しかし曜日と時間の指定は可能ですが日時指定はできません。


基幹サーバやオンプレミスデータゲートウェイのあるPCが365日稼働していれば問題ないのですが
非稼働日にサーバやPCが停止する場合、曜日指定を変更する必要が出てくるのでメンドクサイです。
変更忘れてほったらかしにしておくと何度かエラー通知が来た後停止、手動で復旧させる必要があります。

また条件としてPower BIの[公式Docs](https://docs.microsoft.com/ja-jp/power-bi/connect-data/refresh-data#data-refresh)には
>1 日あたりの更新に関する共有容量の制限は、スケジュールされた更新と API による更新の両方に適用されることを周知することも重要です。

とあるように 非Premium環境では
1日8回の更新制限があります。（オンデマンド更新は含まれず）

[@yamada365](https://qiita.com/yamad365)様の[記事 Power Automate 非稼働日はフローを処理中断する方法](https://qiita.com/yamad365/items/3213dcb49e93358c8df4)を参考にさせていただき以下のようなフローを作成し検証を行いました。
![スクリーンショット 2020-12-10 143349.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/7a876c27-fa5f-a1fe-742f-49c63414418a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/a7dae023-5a70-b444-dd52-800fb0c7b138.png)

Dataverseの休日カレンダーはオンプレサーバから定期更新するように設定したので、
これで設定変更忘れても平気だｗｗｗと思ったのですが、はやる気持ちを抑えて一応テスト。
「Power BIデータセットの更新」をアクションをDataverseレコード作成に変更。

起動する時間を記録してみました。

#結果
![スクリーンショット 2020-12-24 141307 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/9a9831d8-854a-e59e-1ed3-622cbf88c76c.png)

なんか微妙にフライングしている(;'∀')
これではPower BIの更新制限回数を超えてしまうのでダメです。（Proを使用しているため）
フローのつくりが現在時刻HHと予定時刻（時間）の合致を条件としているので、多少の遅れは許容できてもフライングした場合は期待していたように動作しません。

とりあえず[Docs](https://docs.microsoft.com/ja-jp/azure/connectors/connectors-native-recurrence)を読んでみました。
>単純なスケジュールでは、開始時刻と最初の実行時刻が一致するのに対して、複雑なスケジュールでは、トリガーが作動するのは開始時刻以降となります。 

中略

>注 :トリガーされた実行のタイムスタンプが、スケジュールされた時刻から最大 1 分ずれることがあります。 後続のアクションに対し、タイムスタンプをスケジュールどおりに正確に渡す必要がある場合は、テンプレート式を使用してタイムスタンプを適宜変更してください。 詳細については、式の日付と時刻の関数に関するページを参照してください。


遅れることはありそうな雰囲気で書かれていますが、適宜変更してくださいとあるので、まぁそういうことなのだと思います。

次のようなフローを作成し1時間ごとに動かしてみることにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/0ba40291-955c-734d-34f7-f552b9a33284.png)
フライング対策として詳細オプションの開始時刻をちょうどの時刻から+3秒ずらしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/0cbec838-5c86-a8c7-e0af-b24b5ab71c35.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/520a2107-122f-3caf-9a62-ae84486a6218.png)

想定した時刻より前に動作せずに済みそうです。

#まとめ（推察）
トリガーしているサーバとフローで現在時刻を取得しているサーバが同じとは限らない、とういか多分別。（フライングしているので）
相対的なことなので仕方ありませんが、遅れることはあるかなと思ったのですが、フライングするとは想像力が足りませんでした。
「スケジュール済みクラウドフロー」は便利ですがケースによっては検証をしっかりしたほうがいいです。
フライングの対策としてとりあえず詳細オプションの開始時刻で＋3秒してみましたが、書いていて関数の方でaddMinutes(utcNow(),541)して動作させた方が確実と気づいたので後日記事を更新しようと思います。
もう少し検証を重ねてから「Power BIデータセットの更新」を使ってみようと思います。

###参考
[@yamada365](https://qiita.com/yamad365)様[Power Automate 非稼働日はフローを処理中断する方法](https://qiita.com/yamad365/items/3213dcb49e93358c8df4)
[Docs Power BI でのデータの更新](https://docs.microsoft.com/ja-jp/power-bi/connect-data/refresh-data#data-refresh)
[Docs Azure Logic Apps で繰り返しトリガーを使用して繰り返しタスクおよびワークフローを作成、スケジュール設定、および実行する](https://docs.microsoft.com/ja-jp/azure/connectors/connectors-native-recurrence)