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

#【はじめに】#
今回紹介するのは「テーブルから集計したレコード件数を表示する」方法です。
小ネタ記事です。笑
PowerApps でちょっとしたアンケートの集計結果を表示する場合などに利用できるかと思います。

ちなみに私は、息子のトイトレ用アプリを作成する際に、毎日の回数を集計し表示する際に利用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/2e372cdd-db93-2360-260d-42b81738c386.png)

#・サンプルアプリの構成#
サンプルとして作成したアプリの構成です。
SharePointリスト（希望旅行先リスト）をデータソースとして、集計結果を Gallery で表示しています。
Gallery のレイアウトは「タイトルとサブタイトル」を選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/0d5b1f34-4eba-26b6-1243-b1afddaca82e.png)

#手順１．Gallery の設定#
Gallery のデータソースは「希望旅行先リスト」、レイアウトは「タイトルとサブタイトル」を選択します。
Gallery の「Items」に下記コードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/36a444d7-cf17-2a4c-4ad4-1aa8a6a11c2b.png)

今回は「旅行先リスト」の「希望旅行先」列で重複をチェックしています。
**結果は「テーブル形式」で返され、参照する場合は Result を指定します。**
Result から取得可能なデータは、重複なしの「希望旅行先」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/58e04461-af9c-d7b4-137a-f796f4c8769e.png)

※Distinct 関数は、指定した列から重複レコードを削除する関数です。
　[Docs - PowerApps での Distinct 関数](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-distinct)

#手順２．Title の設定#
Galley - Title の「Text」に下記コードを設定します。
「ThisItem.Result」とすることで Distinct 関数の結果を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/2f4060f1-68c3-9872-a311-4334d90f645e.png)

#手順３．SubTitle の設定#
Galley - SubTitle の「Text」に下記コードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/48aed1a0-a665-2dee-1750-ed3ed6560f2a.png)
Filter関数は、条件に一致するレコードを絞り込んでテーブル形式で返します。
　[Docs - PowerApps での Filter、Search、および LookUp 関数](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-filter-lookup)
CountRows関数は、テーブルのレコード件数を数値で返します。
　[Docs - PowerApps の Count、CountA、CountIf、および CountRows 関数](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/functions/function-table-counts)

「旅行先リスト」から「沖縄」でフィルタリングしてカウントしたら３件あった。
というイメージですね。
出力結果は下図赤枠内の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/11d4e509-f664-80f0-3b9b-12406bb25e89.png)


これで完成です。
ただし、ここで１点補足に記載している注意事項があります。

#補足．注意事項#
PowerApps でデータを扱う場合、委任の問題が大きく関係してきます。
[Docs - キャンバス アプリでの委任について](https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/delegation-overview#delegable-data-sources)

PowerApps は、**データの処理を PowerApps 側では行わず、データソース（SharePoint、SQLServerなど）に処理を委任して、その処理結果を PowerApps 側に持ってくることができます。**　
これにより端末や通信時の負担を大幅に減らせるのです。
この「データソースに処理を委任することができるかどうか」が PowerApps で大規模なデータセットを操作する上で重要なポイントになります。

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

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

また、委任可能な関数（Filterなど）と委任不可な関数（CountRowsなど）を組み合わせた場合、委任のサポート対象外となり返されるレコード件数は仕様で制限された 500 件となります。

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

```サンプルコード.
CountRows( Filter(旅行先リスト,ThisItem.Result = 希望旅行先))
```

上記サンプルコードでは、Filter関数は委任可能ですが、CountRow関数は委任できません。
実際に、旅行先リスト（SharePointリスト）を使ってどのような結果になるのか試してみました。

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

理由は、CountRows 関数は委任できないため、Filter関数で絞り込まれた後の件数が PowerApps 側で処理可能な件数500件を超えたからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613247/0ddc4b00-71ae-7cb2-3f4b-7e2a96b29e43.png)

データソース全体が500件を超える場合、もしくは、絞り込まれた後の件数が500件を超える場合は、正確な計算ができず表示結果も問題ありとなる可能性があるため、十分にご注意ください。