ここから、モデル名だけのリストを作りたい場合、または容量の違いを見ずに、モデル名とカラーだけのリストを作りたい場合、どうしたらよいでしょうか?
そんな、"簡単にできそうだけどちょっと苦戦しそう"な課題の解決方法をご紹介します。
重複の排除
単純に、重複を排除するのであれば、Power AppsではDistinct関数というものが提供されています。
これは、指定したコレクション/テーブルに対して、指定した列に関する重複を排除し、結果のリストを返す関数です。
結果は、Splitなどの時と同様、Resultという名前の列で返ってきます。
上の例でいえば、例えばName列に関して重複を排除したい場合(結果はiPhone XRとiPhone 11だけになることが想像できる量ですが)、対象となるコレクションをprodListという名前とすると、以下のように書けます。
Distinct(prodList, Name)
※列名は""で囲ったりしない
これだけで、モデル名に関しての一意なリスト(重複を排除した結果)が得られました!
と、これだけだと使い道も思いつかない。特に今回の場合には、1つのレコードがName-Color-Capacityで一意になっていますよね。
ここからNameとColorを含む、重複のない一覧を作るにはどうしたらよいでしょうか。
AddColumns + Ungroupで解決
戦略としては、まずNameで一意なリストを作っておいて、そこにAddColumnsしてあげればよいです。例えばNameとColorなら以下のような進め方で。
結果だけ書くと
RenameColumns(
Ungroup(
AddColumns(
RenameColumns(
Distinct(
prodList,
Name
),
"Result",
"ProdName"
),
"col",
Distinct(
Filter(
prodList,
Name = ProdName
),
Color
)
),
"col"
),
"Result",
"Color"
)
こんな数式です。AddColumnsしてUngroupするのは、以前のデータ結合の投稿で詳しく解説していますので、よろしければ見てみてください。
結果は、目的通り、モデル名とカラーだけで一意なリストが出来上がりました。
解説
一気に書いちゃったので、部分ごとに解説します。
AddColumns(
RenameColumns(
/*ここは名前でDistinctしたところ*/
Distinct(
prodList,
Name
),
/*AddColumnsの時のために名前を変えておく*/
"Result",
"ProdName"
),
"col",
Distinct(
Filter(
prodList,
Name = ProdName
),
Color
)
)
ここでは、まず元のDistinct(...)でRenameColumnsしています。これは便宜的にです。
そのあとのAddColumnsですが、追加する列は上で図示したように、もとのリストを、Distinctした結果の各行(モデル名)でフィルターして、さらにカラーでDistinctしています。中間の結果として、以下のようなデータが作られます。
残りのパートですが、UngroupしてRenameColumnsしています。
RenameColumns(
Ungroup([上の結果],"col"),
"Result",
"Color"
)
Ungroupは入れ子になっているテーブルをほどくための操作です。ここではcolという列で展開することで入れ子がほどけて、
こんなデータになります。
最後はResultをもとの名前、Colorに戻しているだけです。
ということで、
Distinctして、AddColumns、その際追加するのはFilterしたリストのDistictしたもの。Ungroupで入れ子解除。
という手順で2つの列で一意なリストを作成することができました。
おわり
Power Appsのデータ操作は中間の結果見ながら進めるのがよいです。
なれるまでは一個一個分解して、コレクションに格納して、データテーブルで中身を確認しながら進めてみましょう。
とにかく、一意なデータ = Distinctを利用 ということだけ覚えていただけたら、次につながりやすいと思います!
ご質問はTwitterまで!