Help us understand the problem. What is going on with this article?

【PowerApps】データソースのレコードをランダムに表示する(重複なし)

・はじめに

「ランダムに表示」というと、関数を利用して ごちゃ! とした計算式が必要だと考えていませんか?
でも、この ごちゃ! とした計算式を考えるのが一苦労だし、重複しないようにするには複雑な計算式が必要になりますよね。

どうせならシンプルにいきましょう。
そこで「Shuffle」関数 の登場です!!
※ここで紹介する方法は一つの案ですので、参考程度にお考え下さい。

Shuffle関数
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-shuffle

・実現できる事

今回紹介する方法では、下記の要件を満たしたい場合に有効です。
・コレクションなどのデータソースに登録されたレコードをランダムに表示したい。
・表示するレコードは重複させたくない。

・利用例1(並び替えの結果をテーブル単位で表示する)

SharePoint リストを、ボタンクリックでランダムに並び替えて別のギャラリーに表示します。
説明用として下図のアプリを用意しました。

名称 用途
BeforeGarally SharePoint リストをそのまま表示したギャラリー
RandBtn クリック時に並び替えを実施して、コレクションに保存
AfterGarally 並び替え後のコレクションを表示したギャラリー

image.png

・Shuffle関数の使い方

Shuffle関数の構文は以下の通りです。

Shuffle('テーブル名')

今回ボタンをクリックして、ランダムに並び替えたテーブルを AfterGarally に表示するため、ボタンの OnSelected で ClearCollect します。

ClearCollect(temp,Shuffle('テーブル名'));

コレクション「temp」に並び替え後のデータが登録されます。
AfterGarally の Items に temp を指定すると、ランダムに並び替えられた値が表示されます。

実行結果はこの通り。ボタンを押すたびに実行結果が変わります。
shuffle_1.gif

・利用例2(並び替えの結果をレコード単位で表示する)

SharePoint リストをボタンクリックでランダムに並び替えて、ラベルの表示をすべて変更します。
説明用として下図のアプリを用意しました。

名称 用途
BeforeGarally SharePoint リストをそのまま表示したギャラリー
RandBtn クリック時に並び替えを実施して、コレクションに保存
AfterLabel1 ~ 5 並び替え後のコレクションを表示するラベル

image.png

利用例1同様に、ボタンクリックで、ランダムに並び替えたテーブルを AfterLabel1 ~ 5 に表示させるため、ボタンの 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 を上記のように設定すると、結果このようになります。
shuffle_2.gif

業務用アプリで、ランダム表示させるような要件は少ないかもしれませんが、ゲームアプリで利用できる場面は多いと思います。
参考になれば幸いです。

kura_yu
IT企業に勤めOffice365の研究に勤しむサラリーマン。 コーヒーを飲みながらのんびりするのが好き。 半分仕事、半分趣味でPower AppsやPower Automateの開発を行っています。 構築時に活用した今後役に立ちそうな技術を備忘録的に更新していく予定です。 Twitter⇒https://twitter.com/kurattyo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away