#今回やったこと
会社で使うランチマップ&口コミまとめアプリを作成している中で、社員のレビュー一覧から、お店ごとの評価一覧をPowerApps上で作成した際のTIPSです。
社員のレビュー一覧はSharePointのカスタムリストで管理している前提で、
レビュー一覧側
{ お店の名前, お店のID, 評価(1~5), コメント }
から ↓ このような表を作成することを目指します。
お店ごとの評価一覧側
{ お店の名前, 評価の数, 評価の平均 }
#セットアップ
サンプルとしてSharePointのカスタムリストは以下のようなものを利用します。
レビューの一覧なので、お店の名前、お店のIDに重複があるリストです。別のリストで、評価の数や評価の平均を格納してもよいのですが、今回はなるべく管理するリストを減らすためにこの一覧のみで対応しました。
単純にPowerAppsでGalleryコントロールを用意して、各列を表示すると以下のようになります。
ここから、たとえば「コーヒーショップA」は評価数3, 評価の平均2.3 のような値を取り出します。
#まとめリストを作成する
重複を含むリストをいずれかの列で重複を排除するには、Distinct 関数を利用します。
関数の詳細はDistinct 関数 - PowerApps | Microsoft Docs こちらから。
今回はお店のIDでリストの重複を排除し、得られたID一覧から、再度元のリストを参照するような操作を行います。
まずまとめリストを表示するGalleryコントロールのItemsは
Gallery.Items=Distinct(もとのリスト,重複を排除する列)
で指定します。この結果、Itemsには重複を排除した列の値が入ります。(この場合はShopIDが3つ入っています)
あとは、{ お店の名前, 評価の数, 評価の平均 } を、このGalleryコントロールの各アイテムに入っているShopIDから、もとのリストを参照することで表示させます。
お店の名前:LookUp(レビュー一覧.ShopID = ThisItem.Result,Title)
※ThisItem.Resultに重複を排除した結果が入ります
評価数:CountRows(Filter(レビュー一覧.ShopID = ThisItem.Result))
評価の平均:Average(Filter(レビュー一覧.ShopID = ThisItem.Result).Stars)
以上で簡単なまとめリストがPowerApps上で作成されます。
注意:評価数と評価の平均では、Warningが出ていますが、これはSharePointリストがここで使っている、Average, CountRowsの委任をサポートしていないためです。(実際には期待通り動いています)