やりたい事
アンケートで集めたデータをギャラリーコントロールで簡単に表示をしようと思ったら意外とてこずりました。
例えばデータソースに下図の様なデータがあるとします。
Googleフォームやマイクロソフトフォームで集めたデータはこの様になりがちです。
この様な横方向のデータはギャラリーでは簡単に表示できません。
ちなみに下記のコードをボタンのOnSelect属性に入れてコレクションを作って、実習をできる様にしました。
ClearCollect(アンケート,{質問1:"あいう",質問2:"かきく",質問3:"さしす",質問4:"たちつ",質問5:"なにぬ"})
Split関数の説明
エクセルでしたら行と列の入れ替えで簡単に縦方向に変換できますが、PowerAppsにはその機能がありません。
しかし工夫をすればSplit関数で行から列へは変換ができます。(列から行への変換はできません。)
Split関数は「,(カンマ)」などの区切り記号が入った文字列をその区切り記号で分離してテーブルに入れてくれます。
試しに下記のコードをボタンのOnSelect属性に入れて「テスト」コレクションを作ります。
ClearCollect(テスト,Split("ABC,DEF,GHI",","))
With関数とSplit関数を使って行を列に変換する
このSplit関数の特性を使うと先ほどのアンケートのデータを縦方向に変換してギャラリーコントロールに表示できます。
ギャラリーを追加してそのItems属性に次のコードをコピペします。
With({レコード:First(アンケート)},Split(レコード.質問1 & "," & レコード.質問2 & "," &レコード.質問3 & "," &レコード.質問4 & "," &レコード.質問5, ","))
First関数で「アンケート」コレクションに入っているデータをレコード毎取得して、それをWith関数で一時的変数:「レコード」にレコード毎入れています。
With関数の第二引数で実際に行いたい数式を書きます。ここでSplit関数を使っています。
最初の「レコード.質問1」は「質問1」列の値になります。全ての列の値を「,(カンマ)」を入れて繋げて長い文字列を作っています。
そしてSplit関数の第二引数に「","」にして、区切り記号としてカンマを指定しています。
これのギャラリーの結果が下図の様になり上手くいきました。