2023年リリースサイクル2でPower Appsから直接ストアドプロシージャを実行できるようになりました。
早速触ってみたので、設定方法やPower Automateとの実行時間の比較を紹介します。
目次 閉じる
設定方法
当然ですが、ストアドプロシージャを作成する必要があります。
今回利用したテーブルはこちらです。
Pythonで100万行のCSVを作り、それをインポートしました。
そして今回作成したストアロプロシージャはこちら
CREATE PROCEDURE [dbo].[SearchBirthdayBetween] @start_date DATE, @end_date DATE
AS
BEGIN SET NOCOUNT ON; SELECT * FROM mockdata WHERE birthday BETWEEN @start_date AND @end_date;
END;
日付を2つ受け取り、その期間内の誕生日のデータのみ取得するクエリです。
左のメニューの「データ」から「SQL Server」を選択し、SQL Serverのテーブルとの接続を作成する際と同じように接続を作成します。
右側でテーブルを選択する画面が表示されますが、「ストアロプロシージャ」タブを選択すると、作成したストアロプロシージャが選択できます。
選択し、「接続」を選択することで、「データ」にストアロプロシージャを追加できます。
追加すると末尾に「_1」などのように、自動で番号などが振られた名前になります。実際にはストアド単位で「データ」に追加されていきますので、複数のストアドを利用する場合には、名前を変更して使うことをおすすめします。
「ギャラリーやテーブルに安全に使用できますか?」のチェックボックスはよくわかりませんでした。
詳しくわかる方、コメントいただけると嬉しいです。
基本的な構文はこちら
'データの名前'.ストアドの名前(
{
引数1:引数1の内容,
引数2:引数2の内容
})
左のメニューの「データ」の名前、その後ろにはストアドの名前を入力し、その引数を入力します。
※引数がなければ省略可です。
今回は取得したデータをギャラリーに表示させることにしました。
実際にはボタンのOnSelectに下記のように設定しています。
UpdateContext( { sqlst11: '20240909database'.dboSearchBirthdayBetween( { start_date: Text( DatePicker1.SelectedDate, "yyyy/mm/dd", "ja-JP" ), end_date: Text( DatePicker1_1.SelectedDate, "yyyy/mm/dd", "ja-JP" ) } ) }
);
データを表示するギャラリーの「Items」には下記の様に設定します。
sqlst11.ResultSets.Table1
あとはボタンなどから実行することでデータを取得できます。
Power Automateと処理速度比較
これまでSQL SERVERのストアドプロシージャを実行するには、Power Automateを経由しての実行でした。今回Power Appsでも可能になりましたので、実行時間を計測してみました。
正しい処理速度の計測方法が分からず、ブラウザのデベロッパーツールの機能で計測しました。
取得件数 | Power Apps | Power Automate |
---|---|---|
1125 | 515ms | 817ms |
41268 | 921ms | 4.11s |
81139 | 1.48s | 12.69s |
280757 | 4.17s | 25.48s |
計測する度に数値が異なるので、あくまで目安としての値になります。ただし、Power AutomateよりPower Appsが早い点は変わりがありませんでした。