くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerApps】テーブルからレコードを集計して件数を表示する方法

今回は「アンケートの集計結果」のように、PowerApps でレコードを集計して件数を表示する方法を紹介します。

目次

データソースの構成

サンプルのデータソースは、下図構成のSharePoint リスト(旅行先リスト)を使用します。
本記事では下記リストを利用して説明を行います。

列名 列の種類
希望旅行先 1行テキスト
年齢 選択肢

画面の構成

PowerAppsにはギャラリーを配置しています。
ギャラリーのレイアウトは「タイトルとサブタイトル」を選択しています。

手順

手順1.Gallery の設定

Gallery には集計後(重複を削除した状態)の「旅行先リスト」を表示するので、Gallery の「Items」に下図のコードを入力します。

Distinct 関数は、指定した列から重複レコードを削除する関数です。
上図では「希望旅行先」列で重複のチェックをしています。
 Docs - PowerApps での Distinct 関数

手順2.Title の設定

Galley - Title の「Text」に下図のコードを入力します。
「ThisItem.Result」で Distinct 関数の結果を表示します。



Distinct関数は結果を「テーブル形式」で返します。
返されたテーブル値はResult で取得・参照します。
今回は Result で、重複なしの「希望旅行先」を取得しています。

手順3.SubTitle の設定

Galley - SubTitle の「Text」に下記のコードを入力します。



Filter関数は、条件に一致するレコードを絞り込んでテーブル形式で返します。
 Docs - PowerApps での Filter、Search、および LookUp 関数
CountRows関数は、テーブルのレコード件数を数値で返します。
 Docs - PowerApps の Count、CountA、CountIf、および CountRows 関数

下図は完成イメージです。
「旅行先リスト」から「希望旅行先」列ごとに集計を行ったので「沖縄」をカウントしたら5件あった、というイメージですね。
しかし、1点補足に記載の注意事項があります。

補足.注意事項

委任問題

PowerApps でデータを扱う場合、委任の問題が大きく関係してきます。
Docs - キャンバス アプリでの委任について

PowerApps は、データ処理を PowerApps 側で行わず、データソース(SharePointSQLServerなど)に処理を委任して、処理結果を PowerApps 側に持ってくることができます。
これにより端末や通信時の負担を大幅に減らせるのです。

この「データソースに処理を委任することができるかどうか」が PowerApps で大規模なデータセットを操作する上で重要なポイントになります。

大規模なデータセットを操作するには、委任できるデータソースと数式が必要です。
 ・データソースと数式で委任がサポートされている場合は、データソース側に処理が委任されて、処理結果がPowerAppsに返されます。
 ・データソースと数式で委任がサポートされていない場合は、PowerApps 側で処理が必要なため、連携されるレコード数などが制限されます。

PowerApps の仕様で、PowerApps 側で処理可能なレコード件数は、500 件に制限されます。
※手動による設定変更で、MAX 2,000 件まで増加可能。

委任可能な関数と、委任不可の関数を組み合わせた場合

委任可能な関数(Filterなど)と委任不可な関数(CountRowsなど)を組み合わせた場合、委任不可なものとなり、返されるレコード数は最大500件となります。

本記事で利用した「旅行先リスト」を使って500件を超えるとどうなるのか試してみました。

下図右側の集計後リストは、今回の記事と同じ方法で作成した Galley です。
SharePointの旅行先リストには「沖縄」は523件あるのに、PowerAppsでは「沖縄」が500件に減っています。

理由は、CountRows 関数は委任不可の関数であるため、PowerApps 側で処理可能な件数500件を超えたからです。
データソース全体が500件を超える場合、もしくは、絞り込まれた後の件数が500件を超える場合は、正確な計算ができないため、十分にご注意ください。