Twitterで流れてきたカテゴリヘッダー込みのデータをGalleryに表示する方法を考えました。
今回のキーはGroupBy 関数とForAll 関数。
試す
方法なんてどうでもいいから試したい人向け。
まずボタンを三つ用意し、OnSelectに以下の式をそれぞれ入れてください。
ClearCollect(
元テーブル,
Table(
{
見出し: "見出しA",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しA",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しA",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しB",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しB",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しC",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しC",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しC",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しC",
値1: 1,
値2: "Z",
値3: "Z1"
},
{
見出し: "見出しC",
値1: 1,
値2: "Z",
値3: "Z1"
}
)
)
ClearCollect(
グループ化テーブル,
GroupBy(
元テーブル,
"見出し",
"見出し以外"
)
)
Clear(見出し込みテーブル);
ForAll(
グループ化テーブル,
Collect(
見出し込みテーブル,
{見出しデータ: 見出し}
);
Collect(
見出し込みテーブル,
見出し以外
)
)
ボタン1から順に押すと、Collection見出し込みテーブル
を表示しているGalleryはこうなるはずです。
何をやったか
元データ
カテゴリでグループ化
元テーブルを見出しでGroupByします。
するとそれぞれの見出しに属するレコードがテーブルとしてネストされます。
GroupBy 関数の挙動はこんな感じ。
GroupBy(
元テーブル,///グループ化するテーブル
"見出し",///グループ化に使う列
"見出し以外"///それ以外の列を格納する列の列名
)
見出しレコードをCollectし、続けてグループ化にネストされたテーブルをCollectする
後はグループ化テーブルを一行ずつForAllで処理していくだけです。
ForAllの第二引数は数式で、;
で区切る事で複数の数式を実行できます。
この数式には、 Patch 関数と Collect 関数によるデータ ソースのレコードの変更など、操作を実行する関数を含めることができます。 また、この数式は、接続に対してメソッドを呼び出すこともできます。 ; 演算子を使用すると、レコードごとに複数の操作を実行できます。 ForAll 関数の対象であるテーブルを変更することはできません。
よってForAll(データソース,Collect();Collect())
のように順番に処理する記述が可能です。
今回は以下の順番でCollectしています。
- 見出し用のレコードをCollectionに追加
- グループ化テーブルの
見出し以外
にネストされているテーブルをCollectionに追加
この処理がGroupByされた見出しごとに回り、見出しレコードで区切りされたテーブルが完成します。
こんな感じで動いてます。
ForAll(
グループ化テーブル,///これを対象に1レコードずつ処理を繰り返す
Collect(
見出し込みテーブル,///見出しレコードを追加
{見出しデータ: 見出し}
);
Collect(
見出し込みテーブル,///その下に見出しに該当するテーブルを追加
見出し以外
)
)
Galleryで表示
Gallery内のコントロールのVisibleにIsBlank(ThisItem.見出し)
をうまく使って、見出しとそれ以外のテンプレートを分けましょう。
まとめ
皆さんがデータ型と関数の挙動を学び、充実したPower Platform Lifeを送れますように。
No Data, No Life.