Power Appsコレクション操作関数関数関数解説

【Power Apps】コレクション操作でよく使用する関数まとめ

Power Apps

Power Appsのコレクション操作関数をまとめます。

やりたいことに合わせて関数を使用し、コレクションを思い通りに操作できるようになりましょう。

コレクションについてはこちらをご覧ください。

コレクションを操作する関数

Power Appsでコレクションを操作する関数を、以下のSharePointリストを使用して説明します。

このSharePointリスト(Apple製品一覧)を、Power Apps内のコレクション(Apple製品一覧_コレクション)に格納して各関数で操作します。

コレクションを作成する

ClearCollect関数

完全に新規のコレクションを作成します。(コレクションの初期化)

ClearCollect(Apple製品一覧_コレクション,Apple製品一覧)

ボタンコントロールに以下のOnSelectを割り当てた際の出力結果は以下のようになります。(以下関数でも同様)

Apple製品一覧_コレクションのレコードをすべて削除し、Apple製品一覧_コレクションにApple製品一覧のレコードを移動

データソースをそのままコレクションへ移動するイメージです。

後述するClear関数の後にCollect関数を合わせた関数ですので、何度ボタンを押しても同じものが表示されます。

詳しく→ClearCollect関数の使い方、解説

Collect関数

既存のコレクションの末尾にレコードを追加、新規のコレクションを作成します。

Collect(Apple製品一覧_コレクション,Apple製品一覧)

↓Apple製品一覧_コレクションにApple製品一覧のレコードを移動

1度目のクリックはClearCollect関数と変わりません。

2度目のクリックでは末尾にデータソースのレコードが追加されました。

詳しく→Collect関数の使い方、解説

コレクションのレコードやデータを編集する

Update関数

レコードを指定し、その値を変更します。

Update(
    Apple製品一覧_コレクション,
        LookUp(
            Apple製品一覧_コレクション,"iPhone12" in Title),
    {Title:"iPhone13"}
)

↓LookUp関数(後述)で取得したTitle列にiPhone12を含む最初のレコードのTitle列の値をiPhone13へ変更

このようにClearCollect関数を動作させるボタンを置いておくことでいつでもコレクションを初期化出来るようにしておきます。

画像を見てわかる通り、指定しなかった箇所は空白になってしまいます。

また、この方法ですとLookUp関数の入れ子になってしまいますのでUpdateIf関数を使用しましょう。

また、レコードを選択すればよいので以下のようなことも出来ます。

Update(
    Apple製品一覧_コレクション,
        DataTable1.Selected,
    {Title:"iPhone13"}
,All)

↓テーブルで選択したレコードの値を変更

レコードを指定できる場合にはUpdate関数の方がよいかもしれません。

単体では基本的に1つのレコードしか変更できません。

詳しく→Update関数の使い方、解説

UpdateIf関数

条件式に一致したすべてのレコードの値を変更します。

UpdateIf(
    Apple製品一覧_コレクション,
        "iPhone" in Title,
    {値段:値段*0.8}
)

↓タイトル列でiPhoneを含むもののみ値段を0.8倍する

Update関数と異なり、指定していない列の値はそのままです。

このように変更したい箇所を指定して複数のデータの変更が可能ですので大変便利です。

ここで、13インチMacBook Proが2つあることに気が付きました。(ミスです)

データソース自体を変更するためにソースをデータソース(Apple製品一覧)に変更しましょう。

UpdateIf(
    Apple製品一覧,
        Title="13インチMacBook Pro" && 値段=273680,
    {Title:"16インチMacBook Pro"}
)

このようにAnd関数や&&を使用して複数条件でレコードを指定することも出来ます。

ClearCollect関数を使用して再度データソースを読み込むときちんと値が変更されていました。

Update関数とUpdateIf関数の使い分け

Update関数はレコード(Gallery.Selectedなど)、UpdateIf関数はデータ(iPhone12など)を指定して変更するという風に使い分けましょう。

詳しく→UpdateIf関数の使い方、解説

コレクションのレコードを削除する

Clear関数

コレクションのレコードをすべて削除します。

Clear(
    Apple製品一覧_コレクション
)

↓Apple製品一覧_コレクションのレコードをすべて削除

どのレコードを削除するか選択できないのでClearCollect関数を切り離して使用したい時などに使用しましょう。

詳しく→Clear関数の使い方、解説

Remove関数

レコードを指定して削除します。

Remove(
    Apple製品一覧_コレクション,
    Search(Apple製品一覧_コレクション,"iPhone","Title")
)

↓Search関数(後述)で取得したTitle列にiPhoneを含むレコードを削除

こちらはUpdate関数と異なりSearch関数などで複数レコードを指定してレコードを削除出来ます。

ですが、同様に入れ子は好ましくないためRemoveIf関数を使用しましょう。

詳しく→Remove関数の使い方、解説

RemoveIf関数

条件式に一致したレコードを削除します。

RemoveIf(
    Apple製品一覧_コレクション,
    "i" in Title
)

↓Title列に"i"または"I"を含むレコードを削除

Remove関数と比較してすっきりしたコードになっていることがわかります。

Update関数、UpdateIf関数と同様の使い分けをしましょう。

詳しく→RemoveIf関数の解説、使い方

コレクションのレコードそれぞれに対して処理をする(For each)

ForAll関数

テーブルのレコードすべてに数式を実行します。

ここまで紹介してきたUpdate関数、Remove関数はソースにコレクションを設定することが出来ました。

しかしPower Apps上にはそれが出来ない関数(Power関数など)やコネクタの関数があります。

そのような場合にコレクション内のそれぞれの値に対して処理することが出来ます。

ForAll(Apple製品一覧_コレクション,
    Office365Outlook.SendEmailV2(User().Email,"Test",ThisRecord.Title&":"&ThisRecord.値段&"円")
)

たくさんメールが送り付けられてきました。コレクションをメールアドレスの一覧にすると色んな人にメールを送り付けることが出来ますね。

この関数とThisRecord(省略可)を組み合わせると他のプログラミング言語に慣れている方におなじみの繰り返し処理(For each)をすることが出来ます。

コレクションのレコードを絞り込む・データを検索する

Filter関数

条件式に一致するレコードを絞り込みます。

ClearCollect(Apple製品一覧_コレクション,
    Filter(
        Apple製品一覧_コレクション,
        種類.Value="iPhone"
    )
)

↓種類がiPhoneであるレコードのみに絞り込む

また、複数の条件(And)で絞り込むことが出来ます。

ClearCollect(Apple製品一覧_コレクション,
    Filter(
        Apple製品一覧_コレクション,
        種類.Value="iPhone",
        値段<100000
    )
)

↓種類がiPhoneかつ値段が100000円以下のレコードのみに絞り込む

詳しく→Filter関数の使い方、解説

LookUp関数

あるレコードのみ、またはそのレコードで指定された列の値だけ表示させます。

ClearCollect(Apple製品一覧_コレクション,
    LookUp(
        Apple製品一覧_コレクション,
        種類.Value="iPhone"
    )
)

↓種類がiPhoneである最初のレコードを出力

Filter関数は条件に一致したものすべてを返すのに対し、LookUp関数は最初に条件に一致したレコードのみを返します。

First関数とFilter関数を組み合わせたイメージです。

他にも、3つ目の引数に列名を指定することで特定の値を出力することが出来ます。

LookUp(
    Apple製品一覧_コレクション,
    種類.Value="iPhone",
    Title
)

↓種類がiPhoneである最初のレコードのTitle列の値を出力

LookUp関数の末尾に.列名としても同様の結果が得られます。

LookUp(
    Apple製品一覧_コレクション,
    種類.Value="iPhone"
).Title

↓種類がiPhoneである最初のレコードのTitle列の値を出力し、そのTitle列を表示

詳しく→LookUp関数の使い方、解説

Search関数

文字列でコレクションを絞り込みます。

ClearCollect(Apple製品一覧_コレクション,
    Search(
        Apple製品一覧_コレクション,
        "a","Title"
    )
)

↓Title列に"a"または"A"を含むレコードを絞り込み

Filter関数でin演算子を使用した時と同じ結果を返します。(大文字小文字を区別しない)

詳しく→Search関数の使い方、解説

コレクションのレコードを並び替える

SortByColumns関数

列を指定してレコードを並べ替えます。

ClearCollect(Apple製品一覧_コレクション,
    SortByColumns(
        Apple製品一覧_コレクション,
        "Title"
    )
)

↓Title列を昇順で並べ替え

3つ目の引数を指定しない場合は昇順で並べ替えられます。

複数条件かつ昇順・降順を指定するには以下のようにします。

ClearCollect(Apple製品一覧_コレクション,
    SortByColumns(
        Apple製品一覧_コレクション,
        "値段",Ascending,
        "Title",Descending
    )
)

↓値段が安いものから順に並び替えた後、同じものに対してはTitle列で降順に並び替え

データの値を指定して並べ替えることも出来ます。

ClearCollect(Apple製品一覧_コレクション,
    SortByColumns(
        Apple製品一覧_コレクション,
        "Title",["iPhone12","iPad"]
    )
)

↓iPhone12,iPadのレコードが最初に来るように並べ替え

記入例を一番上に固定しておきたい時などに使えます。

詳しく→SortByColumns関数の使い方、解説

Sort関数

数式でレコードを並べ替えます

ClearCollect(Apple製品一覧_コレクション,
    Sort(
        Apple製品一覧_コレクション,
        値段<100000
    )
)

100000円以上の列を先に表示

入れ子にすることで複数条件で並び替えすることも出来ます。

ClearCollect(Apple製品一覧_コレクション,
    Sort(
        Sort(
            Apple製品一覧_コレクション,
            値段,Descending),
        種類.Value
    )
)

↓種類ごとに値段が高い順に表示

入れ子になってしまいますが、Sort関数の方がより詳細に条件を組めそうです。

詳しく→Sort関数の使い方、解説

コレクションの列を操作する

列を指定する関数はユーザー側で列の指定が出来ないので注意が必要です。

また、参照元と同じソースに書き換えることの出来ない関数が多いです。

そのためここではデータテーブルのItemsに直接式を入力しています。

AddColumns関数

データソースやコレクションに新しく列を追加したコレクションを出力します。

AddColumns(
       Apple製品一覧_コレクション,
       "税抜",値段/1.1
)

↓税抜列を追加

列を操作する関数のみデータテーブルのItemsにコードを入力しています。

ただし、列名は固定(アプリユーザー側で変更できない)であり、ソースに列を追加するコレクションやデータソースと同じものを指定できません。

このようにデータソースに使用するには制約が多いため、AddColumns関数で列の値に対して計算などを行い、その結果をレコードとして出力する際によく使用します。

詳しく→AddColumns関数の使い方、解説

RenameColumns関数

コレクション内の列の名前を変更したコレクションを出力します。

RenameColumns(
        Apple製品一覧_コレクション,
        "OData__x5024__x6bb5_","価格"
)

↓列の名前を価格へ変更

列を操作する関数のみデータテーブルのItemsにコードを入力しています。

SharePointリストなどから読み込んだ列名が日本語のものだとODataで始まるものに変わっていることがあります。

そのような時に列名をわかりやすいものに変えるために使用します。

詳しく→RenameColumns関数の使い方、解説

ShowColumns関数

コレクションの中で選択した列のみのコレクションを出力します。

ShowColumns(
        Apple製品一覧_コレクション,
        "Title"        
)

↓Title列以外を削除

無駄な列を表示させたくない際に使用します。

詳しく→ShowColumns関数の使い方、解説

DropColumns関数

コレクションの中で選択した列を除いたコレクションを出力します。

DropColumns(
      Apple製品一覧_コレクション,
      "Title"        
)

↓Title列のみ削除

ShowColumns関数と同様に無駄な列を表示させたくない際に使用します。

詳しく→DropColumnsの使い方、解説

最後に

コレクションを操作する関数はデータソースのようなテーブルをPower Appsで表示、読み書きする際に必須です。

少し多くて大変ですが、今回紹介した関数を使用すればほとんどのコレクション操作が可能になります。

コメント

  1. […] この記事では、【Power Apps】コレクション操作でよく使用する関数まとめで使用したデータテーブルを使用しています。 […]

タイトルとURLをコピーしました