徹底解説|Collectionの初期化・追加・削除・更新・結合の方法|PowerApps
PowerAppsのコレクションは、
テーブル型のデータを格納できる変数です。
このコレクションを扱うには、
まず基本的な「CRUD」=初期化、追加、削除、更新、(結合)を行うことができるようになりたいところです。
これらを扱うようになれれば、
あとは、自由にコレクションを操作して表示させるなりデータを加工するなりできるようになります。
今回は、この基本的な(でも大事な)
コレクションの初期化・追加・削除・更新・結合の方法を紹介します。
具体例も交えて紹介していきますので、ぜひ最後まで一緒に見ていきましょう。
目次(クリックで読みたい部分にジャンプできます)
コレクションとは?
コレクションとは、
テーブル型のデータをアプリ内で一時的に格納するためのデータ構造です。
コレクションは、複数のレコード(行)と各レコードの複数のフィールド(列)を保持することができます。
このコレクションに対して、
- 初期化
- 追加
- 更新
- 削除
- 結合
などの関数がそれぞれ準備されており、それらの関数を駆使することで、コレクションを操作することが可能になります。
では、次以降これらの操作についてそれぞれ紹介していきましょう。
コレクションの初期化
コレクションを初期化するには、「ClearCollect」関数を使用します。
ClearCollect関数は、既存のコレクションをクリアし、新しいデータでコレクションを際作成することができます。
ClearCollectの基本文法
ClearCollectの基本文法
ClearCollect( コレクション名, 格納するデータ );
コレクション名
→ コレクション名には好きな値を入れることができます。
格納するデータ
→ テーブル型のデータを設定します。変数や既存のコレクションを設定することもできます。
例えば、以下のように直接データを指定して初期化する場合が一番簡単な例です。
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30},
{ID: 2, Name: "Bob", Age: 25}
);
また、既存のコレクションに対して、行うことも可能です。
コレクションからコレクションを設定する
コレクションからコレクションを設定する
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30},
{ID: 2, Name: "Bob", Age: 25}
);
ClearCollect(MyCollection,
EmployeeCollection
);
こうすると、MyCollectionの中にも、以下のようなEmployeeCollectionと同じデータが格納されます。
同名のコレクションを宣言した場合には、コレクションは最後に宣言したもののみ残ります。
同名のコレクションを初期化すると
同名のコレクションを初期化すると
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30},
{ID: 2, Name: "Bob", Age: 25}
);
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30}
);
同じコレクション名を指定すると、宣言するごとに初期化されます。
よって、最終的にEmployeeCollectionの中身は以下のようなデータになります。
コレクションへのレコードの追加
初期化ができたら、次はコレクションに対してレコードを追加します。
レコードの追加を行うには、「Collect」関数を用います。
基本的な文法は以下の通りです。
Collectの基本文法
Collectの基本文法
Collect(コレクション名, 追加したいデータ);
コレクション名
→追加したいコレクションの名前
追加したいデータ
→テーブル型のデータを指定します。変数や既存のコレクションを設定することもできます。
初期化の時とほぼ同じ引数を追加しています。
例えば、以下のように追加したいデータを追加することができます。
Collect(MyCollection, {ID: 3, Name: "Charlie"});
上記のコードでは、MyCollectionというコレクションに、(ID: 3, Name: "Charlie")というデータを追加しています。
指定する列名が不足している場合は追加できる?
指定する列名が不足している場合は追加できる?
では、追加するときの疑問の1つを解消していきましょう。
データを追加するときに、列名と値をセットで引数として指定してあげる必要があります。
では、コレクションの列名よりも不足している場合には、追加できるのでしょうか?
答えは、追加できます。
例えば、以下のようなコレクションに対して、列名が不足している状態でCollect関数を使用してみたとしましょう。
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30},
{ID: 2, Name: "Bob", Age: 25}
);
Collect(EmployeeCollection, {ID: 3, Name: "Charlie"});
これにより、追加後のデータは以下のようになります。
そうです。もし列名が不足している場合には「null」が入ることで補完されます。
そのため、列名について全て入れなくてもエラーになったりはしないので、覚えておいてください。
Patch関数を使用したコレクションへのレコード追加
また、Patch関数を使用してCollectionにレコードを追加することもできます。
Patch関数を使用したコレクションへのレコード追加
Patch関数を使用してレコードを追加することも可能です。
Patch関数では、テーブル型のデータに対して「更新・作成」の2つを行うことができます。
例えば以下のように使用します。
// EmployeeCollectionがまだ存在しない場合は初期化
ClearCollect(EmployeeCollection,
{ID: 1, Name: "Alice", Age: 30},
{ID: 2, Name: "Bob", Age: 25}
);
// 新しいレコードを追加
Patch(EmployeeCollection, Defaults(EmployeeCollection), {ID: 3, Name: "Charlie", Age: 28});
Collectと使用方法を見比べてみてもらえるとわかりますが、使用方法はほぼ同じです。
どちらでも使えますので、状況に応じて使用を分けてください。
Patch関数では、Defaults関数を使用しないで追加する方法もあります。
以下の記事で詳しく紹介しているので、興味があれば見てみてください。
PowerApps|Patch関数でレコードを新規作成する2つの方法(表付き解説) - プロラブ (abyblog.online)
コレクションの更新
コレクションの更新を行うには、「Patch」関数を使用します。
Patch関数は、テーブル型のデータに対してデータを更新するのに使用します。
基本的な文法は以下の通りです。
Patchの基本文法
Patchの基本文法
Patch(コレクション名, 更新対象データ, 更新するデータ);
コレクション名
→先ほどと同様で、コレクションの名前を指定します。
更新対象データ
→更新したいレコードを指定します。
例えば、LookUpなどで特定の条件に合うレコードを探して指定することができます。
更新するデータ
→対象のレコードに対して、どう更新するかを指定します。
列名と値をセットにして指定してあげます。(コレクションなどのテーブル型の変数で指定することも可能です。)
例えば、以下のようにデータを更新するのに使用します。
Patch(MyCollection, LookUp(MyCollection, ID = 2), {Name: "Bobby"});
Patchを用いた一括更新
Patchを用いた一括更新
更新の仕方は分かりましたが、一括更新をしたい場合もあるかと思います。
一括更新をしたい場合は、Patch関数に加えて「ForAll」関数も組み合わせます。
例えば、ForAllとPatch関数を組み合わせて以下のような処理を行うことができます。
ForAll(
Filter(Employees, Department = "Sales"),
Patch(
Employees,
ThisRecord,
{ Status: "Active" }
)
)
Filter関数により、テーブル内で更新したいレコードを絞り込みます。
その後Patch関数により、抽出したデータすべてに対して更新作業をします(=一括更新)
詳しくは以下の記事で解説していますので、一括更新について参考にしてみてください。
コレクションの削除
コレクションのレコードの削除のためには、以下2つの関数を使用することができます。
- Remove
- Removeif
それぞれの使い方について紹介しましょう。
Remove, RemoveIf関数の基本文法
Remove関数の使い方
Remove関数は、特定のレコードを指定し削除します。
Remove(コレクション名, Item);
コレクション名
→削除したいレコードがあるコレクションの名前を指定
Item
→レコードを指定します。
LookUpなどで指定してあげることができます。
RemoveIf関数の使い方
RemoveIf関数は、特定の条件に合うレコード全てを削除します。
RemoveIf(コレクション名, 条件);
コレクション名
→削除したいレコードがあるコレクションの名前を指定
条件
→「列名=値」のような演算子を用いて条件を記載します。
例:Age = 25 , Age>=25 , Age<>25 など
実際に2つの関数を使用してみましょう。
以下のコレクション「EmployeeCollection
」 があるとします。
Remove関数を用いた削除
このコレクションから、「Remove関数」を使用して IDが2のレコードを削除するには次のようにします。
Remove(EmployeeCollection, LookUp(EmployeeCollection, ID = 2));
すると、以下のようにID=2のレコードのみを削除することができます。
RemoveIf関数を用いた削除
RemoveIf関数を使用すると、条件に合うレコード全てを削除することができます。
「EmployeeCollection
」に対して、Ageが25のレコードを削除するとしましょう。
RemoveIf(EmployeeCollection, Age = 25);
当てはまるレコードは2つありますので、2つどちらも削除され以下のようになります。
Remove関数とRemoveIf関数の違い
Remove関数とRemoveIf関数はどちらもレコードを削除する関数です。
それぞれの違いは、「何を」削除条件に指定するかです。
Remove関数は、特定のレコードを指定してあげることで削除します。
一方、RemoveIf関数はレコードを指定するのではなく、条件を指定してあげます。
そのためRemoveIf関数は、条件に合うレコード全てを削除することができるのです。
複数条件でのレコード削除〜RemoveIf〜
複数条件でのレコード削除〜RemoveIf〜
RemoveIfを用いると、複数条件でレコードを削除することができます。
例えば、Ageが25でかつNameがBobのレコードを削除したいとしましょう。
RemoveIf(EmployeeCollection, Age = 25 && Name = "Bob");
こうすると、条件に合うレコード1つのみが削除されます。
PowerAppsの演算子には他にも種類がありますので、以下公式サイトから参考にしてみてください。
コレクションの結合
コレクションの結合のためには、2つの関数を使用することができます。
- Collect
→既存のコレクションに追加する - ClearCollect
→新しいコレクションに結合する
どちらもコレクションの結合をすることができますが、結合先に違いがあります。
Collectによるコレクションの結合
まずは、「Collect」関数を使用したコレクションの結合を行います。
まずは、以下のような2つのコレクションがあるとしましょう。
ClearCollect(Collection1,
{ID: 1, Name: "Alice"},
{ID: 2, Name: "Bob"}
);
ClearCollect(Collection2,
{ID: 3, Name: "Charlie"},
{ID: 4, Name: "David"}
);
「Collect」関数で、Collection1に対してCollection2のデータを追加してみましょう。
Collect(Collection1, Collection2);
するとCollection1は以下のようになります。
ClearCollectによるコレクションの結合
「ClearCollect」関数を使用してコレクションを結合してみましょう。
先ほど同様に、2つのコレクションを準備します。
ClearCollect(Collection1,
{ID: 1, Name: "Alice"},
{ID: 2, Name: "Bob"}
);
ClearCollect(Collection2,
{ID: 3, Name: "Charlie"},
{ID: 4, Name: "David"}
);
次に、ClearCollect
関数を使用して
新しいコレクションCombinedCollection
を作成します。
そして、Collection1
とCollection2
のデータを結合します。
ClearCollect(CombinedCollection, Collection1, Collection2);
こうすることで、Collection1 と Collection2 の既存のコレクションには変更を加えずに、新しく作成したコレクションにのみ結合したデータを加えることができます。
結合するコレクションの列数が違う場合
結合するコレクションの列数が違う場合
もし、以下のような列数が違うコレクションがありそれらを結合したいとするとどうなるのでしょうか。
Collection1
Collection2
この2つのコレクションを結合する場合には、不足している列の値は、「BLANK」空として扱われます。
Collect関数により、結合をしたとしましょう。
Collect(Collection1, Collection2);
すると、Collection1は以下のようになります。
エラーは起きずに結合することができますので、列名が一致しているかどうか特に気をつける必要はないと言えるでしょう。
ClearCollect関数を使用しても同様に不足している値は全て「BLANK」空になります!
PowerAppsを学ぶにはUdemyがおすすめ
この記事では
「PowerApps|Collectionの初期化・追加・削除・更新・結合の方法(具体例で解説)」を詳しく解説しました。
PowerAppsについての記事や書籍はまだまだ少ないのが現状です。
実は、Udemyでは本には載っていない専門的な分野や最新の技術トレンドに関する豊富なコースが用意されています。
これらのコースを通じて、私は多くの実践的なスキルを身につけることができました。
定期的に限定セールを行なっていますので、ぜひチェックしてみてください。
PowerAppsのさらに深い理解と実践的なスキルを身につけるために、Udemyのコースを活用することをお勧めします。
まとめ
コレクションを初期化・追加・削除・更新・結合ができるようになることで、コレクションを他の機能と組み合わせて使用することができるようになります。
特にギャラリーがその1つであり、コレクションを使用することで表示するデータを適切に加工することができるようになります。
ぜひ、コレクションとギャラリーを組み合わせて使用してみるとより活用することができるようになるでしょう。
あなたのPowerAppsがさらに進化することを願っています。