【Power Apps by Teams】フォームから抽出条件を指定して一致するデータを表示する方法(Filter関数の使い方)

Microsoft Power App(以下、Power Apps)は、専門性の高い技術や開発の経験を持たなくてもビジネス ニーズに対応するモバイル アプリや Webアプリを比較的簡単に作成できるローコード ツールです。

Microsoft Teams(以下、Teams)では、Power Appsアプリを使用して、該当するチームのメンバー全体又は権限を有するメンバーが利用できるアプリを作成することができます。

本サイトでは、Power Appsを利用してアプリを作成する上で役に立つちょっとしたテクニックを紹介しています。

はじめに

この記事では、フォームで入力した抽出条件に基づき、Filter関数でデーターを表示する方法を紹介します。Filter関数は、テーブルから条件に合致するレコードを抽出する関数です。Filter関数とフォームの組み合わせは、データの検索や絞り込みに便利な方法です。

なお、この記事は、Power Appsを起動してアプリを作成し、スクリーン上にコントロールを配置するなど、ある程度Power Appsの基本操作ができる方を対象にしています。Power Appsの基本操作から学びたい方は、別途関連サイトや書籍を参考にしていただくことをおすすめします。

機能の概要

この記事では、学生情報を管理するシステムを想定し、以下のフォームを用意します。

  • 複数の抽出項目(例えば、学籍番号、学生氏名、所属等)を入力するテキストボックスをコンテナーコントロールに配置したフォーム(以下、抽出フォーム)。
  • 抽出条件で絞り込まれたデータの学籍番号と学生氏名の一覧を表示するためのギャラリーコントロールによるフォーム(以下、一覧フォーム)。
  • 学生の詳細情報を表示するための表示フォームコントロールによるフォーム(以下、詳細フォーム)。
powerapps_filter01b

このシステムの動作の流れは次の通りです。

  • メインスクリーン上の[抽出]ボタンを選択すると抽出フォームが表示される。
  • 抽出フォームに条件を入力して[決定]ボタンを選択すると抽出したデータが一覧フォームに表示される。
  • 一覧フォームからいずれかのデータを選択するとその詳細情報が詳細フォームに表示される。

実装の方法

まず、抽出フォームで指定した学籍番号や学生氏名などの条件に一致するレコードをデータソースから抽出して一覧フォームに表示します。

このような抽出フォームと一覧フォームを作るには、Filter関数を使います。Filter関数は、テーブルで1つ以上のレコードを検索する関数です。公式ドキュメント(新しいタブで開く)の記載は次の通りです。

Filter(Table*, Formula1 [, *Formula2*, ... ] ) 

Table - 必須。 検索するテーブル。 
Formula(s) - 必須。 テーブルの各レコードが評価される数式。 関数は、結果が true のすべてのレコードを返します。 テーブル内の列を参照することができます。 複数の数式を指定した場合、すべての数式の結果は And 関数を使用して組み合わせられます。

Filter関数は、一覧フォーム(Galleryコントロール)のItemsプロパティに設定します。Itemsプロパティは、Galleryコントロールに表示するデータを指定するプロパティです。

また、抽出フォームで指定した抽出条件を一覧フォームに受け渡すには、UpdateContext 関数を使います。UpdateContext 関数は、コンテキスト変数を作成する関数です。コンテキスト変数は、同一スクリーン内で値が保持される変数です。

コンテキスト変数に抽出条件を代入して、Filter関数の数式に参照させることで、一覧フォームに抽出結果を表示させることができます。

UpdateContext 関数の使い方はこちらの記事もご覧ください。

関連記事

Microsoft Power App(以下、Power Apps)は、専門性の高い技術や開発の経験を持たなくてもビジネス ニーズに対応するモバイル アプリや Webアプリを比較的簡単に作成できるローコード ツールです。 Micro[…]

powerapps_updatecontext_00

具体的には、次の通り、抽出フォームの[決定]ボタンのOnselectプロパティで抽出要件をコンテキスト変数に代入し、一覧フォーム側では、ItemsプロパティにFilter関数を設定します。

なお、Sort関数を使うことで、表示するデータの並び順を変更することもできます。

//抽出フォームの[決定]ボタンのOnsekectプロパティに設定
//TargetGakuseiBango:学生番号のコンテキスト変数
//TargetGakuseiSimei:学生氏名のコンテキスト変数
//TargetSyozoku:所属のコンテキスト変数

UpdateContext({TargetGakuseiBango:txtbox_tyusyutu_gakuseibango.Value});
UpdateContext({TargetGakuseiSimei:txtbox_tyusyutu_gakuseisimei.Value});
UpdateContext({TargetSyozoku:txtbox_tyusyutu_syozoku.Value});
//一覧フォームのItemsプロパティに設定
//学生番号の昇順で並び替え

Sort(Filter(データソース,
(TargetGakuseiSimei in '氏名(姓)' & " " & '氏名(名)') ,
TargetGakuseiBango in 学籍番号 ,
TargetSyozoku in '所属(専攻コース)'),学籍番号,SortOrder.Ascending)

このような設定を行うことで抽出条件によって一覧フォームの表示を変更させることができます。

powerapps_filter03c

次に、一覧フォームから任意のレコードを選択すると、そのレコードの詳細が詳細フォームに表示される機能を実装します。

ギャラリーコントロールは、選択したデータの値を取得するためのselectedプロパティを持っています。Onselectプロパティを使用してselectedを呼び出すと、データソースの任意の列の値を取得できます。

しかし、ギャラリーコントロールは最後に選択した値を保持しているため、新たにデータを抽出した直後でも、何も選択していないにも関わらず、詳細フォームには一覧フォームで最後に選択した学生の詳細が表示されてしまいます。

これを解決するために、学生番号のテキストボックスを別途配置し、データを新たに抽出した直後はこのテキストボックスをブランクに設定します。その後、このテキストボックスを参照することで、適切な学生の詳細を表示することができます。

powerapps_filter05a

この方法で、一覧フォームから選択したレコードの詳細を正確に詳細フォームに表示することが可能になります。

powerapps_filter04c

ただ、詳細フォームのitemsプロパティにギャラリーのselectedプロパティを設定するとギャラリー内で選択したアイテムの詳細情報を編集フォームに表示できます。こちらの方が処理速度は速いようです。

おわりに

以上が、Power Appsで抽出条件入力フォームと一覧フォームを作る方法の説明です。Filter関数を使って、データソースから条件に合うレコードを検索して表示することができます。抽出条件入力フォームと一覧フォームの見た目や動作をカスタマイズすることで、ユーザーにとって使いやすいアプリを作ることができます。ぜひ、試してみてください。