11
11

More than 3 years have passed since last update.

Power Appsで一意なデータを取り出す方法

Posted at

例えばこんなデータがあったとしましょう。
image.png

ここから、モデル名だけのリストを作りたい場合、または容量の違いを見ずに、モデル名とカラーだけのリストを作りたい場合、どうしたらよいでしょうか?
そんな、"簡単にできそうだけどちょっと苦戦しそう"な課題の解決方法をご紹介します。

重複の排除

単純に、重複を排除するのであれば、Power AppsではDistinct関数というものが提供されています。
これは、指定したコレクション/テーブルに対して、指定した列に関する重複を排除し、結果のリストを返す関数です。
結果は、Splitなどの時と同様、Resultという名前の列で返ってきます。
上の例でいえば、例えばName列に関して重複を排除したい場合(結果はiPhone XRとiPhone 11だけになることが想像できる量ですが)、対象となるコレクションをprodListという名前とすると、以下のように書けます。

Distinct(prodList, Name)

※列名は""で囲ったりしない

image.png

これだけで、モデル名に関しての一意なリスト(重複を排除した結果)が得られました!

と、これだけだと使い道も思いつかない。特に今回の場合には、1つのレコードがName-Color-Capacityで一意になっていますよね。
ここからNameとColorを含む、重複のない一覧を作るにはどうしたらよいでしょうか。

AddColumns + Ungroupで解決

戦略としては、まずNameで一意なリストを作っておいて、そこにAddColumnsしてあげればよいです。例えばNameとColorなら以下のような進め方で。
image.png

結果だけ書くと

RenameColumns(
    Ungroup(
        AddColumns(
            RenameColumns(
                Distinct(
                    prodList,
                    Name
                ),
                "Result",
                "ProdName"
            ),
            "col",
            Distinct(
                Filter(
                    prodList,
                    Name = ProdName
                ),
                Color
            )
        ),
        "col"
    ),
    "Result",
    "Color"
)

こんな数式です。AddColumnsしてUngroupするのは、以前のデータ結合の投稿で詳しく解説していますので、よろしければ見てみてください。
結果は、目的通り、モデル名とカラーだけで一意なリストが出来上がりました。
image.png

解説

一気に書いちゃったので、部分ごとに解説します。

        AddColumns(
            RenameColumns(
                /*ここは名前でDistinctしたところ*/
                Distinct(
                    prodList,
                    Name
                ),
                /*AddColumnsの時のために名前を変えておく*/
                "Result",
                "ProdName"
            ),
            "col",
            Distinct(
                Filter(
                    prodList,
                    Name = ProdName
                ),
                Color
            )
        )

ここでは、まず元のDistinct(...)でRenameColumnsしています。これは便宜的にです。
そのあとのAddColumnsですが、追加する列は上で図示したように、もとのリストを、Distinctした結果の各行(モデル名)でフィルターして、さらにカラーでDistinctしています。中間の結果として、以下のようなデータが作られます。
image.png

残りのパートですが、UngroupしてRenameColumnsしています。

RenameColumns(
    Ungroup([上の結果],"col"),
    "Result",
    "Color"
)

Ungroupは入れ子になっているテーブルをほどくための操作です。ここではcolという列で展開することで入れ子がほどけて、
image.png
こんなデータになります。
最後はResultをもとの名前、Colorに戻しているだけです。

ということで、
Distinctして、AddColumns、その際追加するのはFilterしたリストのDistictしたもの。Ungroupで入れ子解除。
という手順で2つの列で一意なリストを作成することができました。

おわり

Power Appsのデータ操作は中間の結果見ながら進めるのがよいです。
なれるまでは一個一個分解して、コレクションに格納して、データテーブルで中身を確認しながら進めてみましょう。
とにかく、一意なデータ = Distinctを利用 ということだけ覚えていただけたら、次につながりやすいと思います!

ご質問はTwitterまで!

11
11
0

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
11
11