1
0
はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

【Power Apps】App.OnStartとApp.Formulasの使い分け

Last updated at Posted at 2024-06-12

ビリビリ☆Power Apps 同好会 登壇大会#1への登壇ネタとして、App.OnStartとApp.Formulasの使い分けについて考えてみました。

登壇資料:App.OnStartとApp.Formulasの使い分け (ビリビリ☆Power Apps 同好会 登壇大会#1)

細かい話なので読み飛ばしてOK:
便宜上App.OnStartはここで定義するグローバル変数、App.FormulasはGA済みの引数なしの名前付き計算式として説明しています。
厳密に書くと以下ですが、わかりやすさ重視でプロパティ名で説明します。
App:オブジェクト名(プロパティをもつ要素)
OnStart, Formulas:プロパティ名(コードを書く場所)
グローバル変数、名前付き計算式:変数、関数(コード)

Power Apps の App オブジェクト - Power Platform | Microsoft Learn

違いまとめ

image.png

App.OnStartとApp.Formulasの違いは大きく以下の3点です。

  • 値が動的であるか、静的であるか
  • 値の更新タイミング
  • コードを書く場所や記述方法

これらを踏まえて、個人的には以下の使い分けをすべきと考えます。
App.OnStart:特定の時点での値を呼び出す回数が多い場合
App.Formulas:最新の値を呼び出す回数が多い場合

App.OnStartとApp.Formulasの違い

値が動的であるか、静的であるか

image.png

最も大きな違いは、値が動的(=関数)であるか、静的(=変数)であるかです。
この差が大きすぎるため、App.FormulasはApp.OnStartの完全な代替手段にはなりません。

値の更新タイミング

image.png

動的か静的かという点に大きくかかわってきますが、値の更新タイミングが全く違います。

またOnVisibleはOnStartの処理完了を待たないため、OnStartに長い処理を書く際はOnVisibleにOnStartで定義している変数やコレクションを利用していないか注意が必要です。
image.png

コードを書く場所や記述方法

image.png

App.OnStartのグローバル変数はAppオブジェクトの動作プロパティであるOnStartで定義します。
グローバル変数は他の動作プロパティで更新ができます。

一方App.FormulasはAppオブジェクトのプロパティの一つで、他のプロパティとは書き方がかなり異なっています。

image.png

名前付き計算式もグローバル変数も左側の変数タブからプレビューで一覧表示できます。
image.png

使用例

App.OnStart

image.png
最も使うのは、アプリの起動時にユーザーの情報をグローバル変数に格納する使い方です。

image.png

またマスタのようなデータをコレクションに格納して利用することもありますが、2000行を超えるデータは格納できないのと、数式が複雑だと起動に時間がかかってしまう場合があることに注意です。

App.Formulas

image.png

パフォーマンス比較してみた

App.OnStartとApp.Formulasで同様の処理をしたときのパフォーマンスをデータソースごとに比較してみました。
ロード画面を作成してOnVisibleでOnStartと同じ動作をさせるという代替案もあるので、併せて計測しました。

結果

参照なし Excel SharePoint Dataverse
起動時間 処理時間 起動時間 処理時間 起動時間 処理時間 起動時間 処理時間
OnStart 0.001 0.008 3.759 0.022 3.996 0.011 0.741 0.025
OnVisible 0.339 0.011 4.984 0.014 5.420 0.013 2.141 0.012
Formulas 0.000 0.022 0.000 2.250 0.000 2.707 0.001 1.259
データソースごとの各プロパティで値を定義した場合の起動時間と処理時間

この結果から以下のことがわかります。

  • OnStartやOnVisibleは起動に時間がかかる一方、処理時間はほぼかかっていない
  • Formulasは呼び出すたびに処理時間がかかってしまうため、定数の呼び出しには向いていない
  • Formulasは一度目の呼び出しに時間がかかり、その後はOnStart、OnVisibleでの処理と同様の時間しかかからない​

3つ目は時間をあけると同じくらいの処理時間がかかったので、一定の時間は処理結果が保持されるようです。(この動作は通常の数式の出力でも同様です)

計測方法

OnStartとOnVisibleはそれぞれのプロパティでマスタ用のコレクションに、Formulasはユーザー定義関数でマスタのテーブルを定義しています。image.png

image.png

このマスタの一行目と各行の値をかける処理を行うことで処理時間を計測しています。

ちなみに「参照なし」はデータソースの参照ではなくTable関数で定義した値を使用しています。
ChatGPTでテストデータを作ると便利です。
image.png

元記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0