5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

見出し込みのGalleryを生成する

Last updated at Posted at 2019-12-11

image.png

Twitterで流れてきたカテゴリヘッダー込みのデータをGalleryに表示する方法を考えました。
今回のキーはGroupBy 関数ForAll 関数

データの完成イメージはこんな感じ。
image.png

試す

方法なんてどうでもいいから試したい人向け。

まずボタンを三つ用意し、OnSelectに以下の式をそれぞれ入れてください。

ボタン1元テーブル生成
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"
        }
    )
)
ボタン2グループ化テーブル生成
ClearCollect(
    グループ化テーブル,
    GroupBy(
        元テーブル,
        "見出し",
        "見出し以外"
    )
)
ボタン3見出し込みテーブル生成
Clear(見出し込みテーブル);
ForAll(
    グループ化テーブル,
    Collect(
        見出し込みテーブル,
        {見出しデータ: 見出し}
    );
    Collect(
        見出し込みテーブル,
        見出し以外
    )
)

ボタン1から順に押すと、Collection見出し込みテーブルを表示しているGalleryはこうなるはずです。
image.png

何をやったか

元データ

まず、カテゴリ分けに使う見出し付きのテーブルを用意します。
image.png

カテゴリでグループ化

元テーブルを見出しでGroupByします。
するとそれぞれの見出しに属するレコードがテーブルとしてネストされます。
image.png
GroupBy 関数の挙動はこんな感じ。

グループ化テーブル
GroupBy(
    元テーブル,///グループ化するテーブル
    "見出し",///グループ化に使う列
    "見出し以外"///それ以外の列を格納する列の列名
)

見出しレコードをCollectし、続けてグループ化にネストされたテーブルをCollectする

後はグループ化テーブルを一行ずつForAllで処理していくだけです。
ForAllの第二引数は数式で、;で区切る事で複数の数式を実行できます。

操作の実行

この数式には、 Patch 関数と Collect 関数によるデータ ソースのレコードの変更など、操作を実行する関数を含めることができます。 また、この数式は、接続に対してメソッドを呼び出すこともできます。 ; 演算子を使用すると、レコードごとに複数の操作を実行できます。 ForAll 関数の対象であるテーブルを変更することはできません。

よってForAll(データソース,Collect();Collect())のように順番に処理する記述が可能です。

今回は以下の順番でCollectしています。

  1. 見出し用のレコードをCollectionに追加
  2. グループ化テーブルの見出し以外にネストされているテーブルをCollectionに追加

この処理がGroupByされた見出しごとに回り、見出しレコードで区切りされたテーブルが完成します。

こんな感じで動いてます。

見出し込みテーブル
ForAll(
    グループ化テーブル,///これを対象に1レコードずつ処理を繰り返す
    Collect(
        見出し込みテーブル,///見出しレコードを追加
        {見出しデータ: 見出し}
    );
    Collect(
        見出し込みテーブル,///その下に見出しに該当するテーブルを追加
        見出し以外
    )
)

Galleryで表示

Gallery内のコントロールのVisibleにIsBlank(ThisItem.見出し)をうまく使って、見出しとそれ以外のテンプレートを分けましょう。
image.png

まとめ

  • GroupByでまとめる
  • まとめたデータをForAllでレコードごとに処理する
  • Collectはテーブルを第二引数にした場合、中のレコードをCollectionに追加してくれる

皆さんがデータ型と関数の挙動を学び、充実したPower Platform Lifeを送れますように。
No Data, No Life.

5
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?