・はじめに
こんにちは、くらっちです。
今回紹介するのは、PowerApps 開発で利用できる関数の「Shuffle 関数」です。
例えば、1~10まで並ぶデータを重複なくランダムに表示させたい場合などに便利です。
Shuffle関数
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-shuffle
PowerApps 業務用アプリで、データをランダム表示する要件は稀だと思いますが、ゲームアプリで利用できる場面は多いと思います。
初めて使ったときはその便利さにすごく感動したのでぜひ使っていただきたいオススメの関数です。笑
・目次
・実現できる事
今回紹介する方法は、下記の要件を満たしたい場合に有効です。
・データソースのレコードをランダムに表示したい。
・表示するレコードは重複させたくない。
・Shuffle関数の使い方
Shuffle関数の構文は以下の通りです。
Shuffle('テーブル名')
・利用例1(並び替えの結果をテーブル単位で表示する)
説明用に下図のPowerApps アプリを用意しました。
SharePoint リストを、ボタンクリックでランダムに並び替えて別のギャラリーに表示します。
名称 | 用途 |
---|---|
BeforeGarally | SharePoint リストをそのまま表示したギャラリー |
RandBtn | クリック時に並び替えを実施して、コレクションに保存 |
AfterGarally | 並び替え後のコレクションを表示したギャラリー |
例では RandBtn をクリックすることで、BeforeGarally のデータをランダムに並び替えて AfterGarally に表示しています。
RandBtn の OnSelected に ClearCollect を入力します。
ClearCollect(temp,Shuffle('テーブル名'));
コレクション「temp」に並び替え後のデータが登録されます。
今回の例では テーブル名に BeforeGarally.AllItems を入力していますが、SharePointリストに置き換えてもOKです。
AfterGarally の Items に temp を指定すると、BeforeGarally.AllItems をランダムに並び替えた値が表示されます。
実行結果はこの通り。ボタンを押すたびに実行結果が変わりデータも重複していません。
・利用例2(並び替えの結果をレコード単位で表示する)
説明用に下図の PowerApps アプリを用意しました。
SharePoint リストをボタンクリックでランダムに並び替えて、ラベルの表示をすべて変更します。
名称 | 用途 |
---|---|
BeforeGarally | SharePoint リストをそのまま表示したギャラリー |
RandBtn | クリック時に並び替えを実施して、コレクションに保存 |
AfterLabel1 ~ 5 | 並び替え後のコレクションを表示するラベル |
利用例1同様に、RandBtn をクリックすることで、BeforeGarally のデータをランダムに並び替えて AfterLabel1 ~ 5 に表示しています。
RandBtn の OnSelected に ClearCollect を入力します。
ClearCollect(temp,Shuffle('テーブル名'));
コレクション「temp」に並び替え後のデータが登録されます。
各ラベルに並べ替え後の値を表示させるために、AfterLabel1 ~ 5 の Text に下記例のように入力することで N 番目のレコード が取得できます。
下記例では、
「FirstN(temp,2)」 で temp 内 1 ~ 2 番目までの 2 レコードを取得して、
「Last( ).タイトル」で取得した 2 レコードのうち 最後( 2 レコード目)のタイトル列を取得しています。
例:AfterLabel2 に「temp」内、2レコード目のタイトルを表示する Last(FirstN(temp,2)).タイトル
AfterLabel1 ~ 5 を上記のように設定すると、結果このようになります。
以上です。
楽しい PowerApps アプリ作成の一助となれば幸いです。
最後に、以前筆者は Shuffle関数を利用してこんなアプリを作りました。
#PowerApps で作成したゲームアプリ第4弾!
— kuramoto (@kurattyo) September 12, 2020
ランダムに数字を配置して順番に数字を押してfinishで終了。
ボタンをランダムに配置するのに一苦労だった😅 #脳トレ pic.twitter.com/s0MWnHfrpo