キャンバスアプリ 並び替え機能 SortとSortByColumns

はじめに

別の記事でソート機能の実装について書いてたので、この部分だけ別記事にしました。
ソート(並び替え)については基本的な実装なので今更感はありますが💦
すでにソート関連の記事は結構あると思いますが、2023年に追加されたレスポンシブレイアウトの自動生成アプリだと実装入ってなかったりもするので、あらためてここでも書いておこうかという感じです。

SortとSortByColumns

ソート用の関数にはSortSortByColumnsがあります。違いのポイントとしては、

  • 書き方:Sortの場合は列名そのままでよい、SortByColumnsは内部列名を””で囲ってやる必要あり
  • Sortの場合のみ数式での指定が可能(A列とB列の合計でソートなど)
  • SortByColumnsの場合は複数列のソートが書きやすい(Sortでもネストすれば可能)
  • SortByColumnsの場合のみ、テーブルを使ったソートが可能(曜日順に並び替えるなど)

という感じです。シンプルなものはどっちでもいいですね。なので自分はSortで書きがち(”内部名”が面倒)
やりたいことに合わせてどちらかを選択する感じですね。

TIPSSortとSortByColumns関数は似ていますが、書き方や出来ることが若干違います。
実装したいパターンによって切り分ける感じです。詳細は以下の抜粋や公式をご参考ください。
Sort および SortByColumns 関数 – Power Platform | Microsoft Learn

構文:公式より抜粋

SortTableFormula [, SortOrder ] )

  • Table – 必須。 並べ替えるテーブル。
  • Formula – 必須。 この数式は、それぞれのテーブルのレコードに対して評価され、結果はテーブルの並べ替えに使用されます。 テーブル内の列を参照することができます。
  • SortOrder – オプション。 SortOrder.Descending を指定して、降順でテーブルを並べ替えます。 SortOrder.Ascending が既定値です。

SortByColumnsTableColumnName1 [, SortOrder1ColumnName2SortOrder2, … ] )

  • Table – 必須。 並べ替えるテーブル。
  • ColumnName(s) – 必須。 文字列として、並べ替える列名。
  • SortOrder(s) – オプション。 SortOrder.Ascending または SortOrder.Descending。 SortOrder.Ascending が既定です。 複数の ColumnNames が指定されている場合は、最後の列以外に、SortOrder を含める必要があります。

SortByColumnsTableColumnNameSortOrderTable )

  • Table – 必須。 並べ替えるテーブル。
  • ColumnName – 必須。 文字列として、並べ替える列名。
  • SortOrderTable – 必須。 並べ替えの対象となる、値を含んだ単一列テーブル。

委任について

一部の列は委任対象外となっています。SPOの場合でも基本はOKですが、複雑な列は不可となっています。
複雑なものとしては選択肢やユーザー列のDisplayName順などの構造化されているデータなどです。
※選択肢は<選択肢>.Value 、ユーザー列は<ユーザー列>.DisplayName などとなります。
Sortだと委任警告は出ますが上記の指定も一応可能です。SortByColumnsだとそもそも指定できないはずです。
委任警告が出る場合はその列を対象とするかは全体のデータ件数などをもとに検討ください。

NOTE一部委任できない種類の列があります。委任については記事がたくさんでているので割愛しますが、各種記事や公式をご参照ください。
キャンバス アプリでの委任について – Power Apps | Microsoft Learn
SharePoint – Connectors | Microsoft Learn

SPOでのSort、SortByColumnsの委任対応列の一覧の抜粋

ギャラリーにソートを適用する例( 対象列・並び順固定)

シンプルにギャラリーの並び順を指定するのは簡単です。
基本的にはデータソースやフィルターした結果をSortやSortByColumnsで囲って、対象列、昇順または降順の指定をすればOKです。昇順、降順の部分を省略すると昇順となります。

以下それぞれのサンプルです。商品リストがデータソースで、次の引数が対象列です。(この場合タイトル)
SortByColumnsの場合は内部名を””で囲って文字列として指定が必要です。(この場合”Title”)
並び順は列挙帯のSortOrderAscending(昇順)、Descending(降順)のいずれかを指定します。省略した場合は昇順になります。

TIPS内部名はちゃんとつけていれば英語名で指定できますが、SPOやエクセルの場合にはエンコードされた列名になってたりもするのでわかりずらかったりします。またインテリセンス(入力候補)にも出てこないので調べないといけません。
その辺が手間だったりするのでどっちでもいい場合は自分はSortを使う派です。

CodeSort(商品リスト,タイトル) →タイトル昇順
Sort(商品リスト,タイトル,SortOrder.Descending) →タイトル降順
SortByColumns(商品リスト,”Title”,SortOrder.Ascending) →タイトル昇順

SortとSortByColumnsでのタイトル順、左は昇順、右は降順の例

列を指定変更すればその順になります。IDや登録日時、更新日時など任意の列を指定します。

更新日時の降順→最新更新アイテムを上位に表示する

委任のセクションで書いた通り、ユーザー列の名前順や選択肢を指定した場合は以下のように委任警告が出ます。
データ量が少なかったりすでにフィルターしてデータ行の制限以下(500~2000)になっている前提であれば影響はないですが(100行ずつではなく一括で取得される違いはあり)、そうでない場合は正しく結果が取れないケースがあるので極力指定しない方がいいかと思います。

数式を使用、複数列での並び替え、テーブル(配列)を使った並び替え

この辺りについては、公式に実装列が載っているのでご参照ください。
Sort および SortByColumns 関数 – Power Platform | Microsoft Learn

数式を使用するソートはSort関数のみが対応
複数列の並び替えはSortByColumnsの方が書きやすい(Sortだとネストが必要)
テーブル(配列)を使った並び替えはSortByColumnsのみとなります。

SharePoint リストの列の内部名についてと調べ方

この点はよく記事を書いていると出てくる話題なので、別記事として作成しました。

・列の内部名は日本語や記号が入っているとクチャクチャっとエンコードされたものになっている
列:「承認期限」という名前で列を作ると、「_x627f__x8a8d__x671f__x9650_」となる

TIPSSharePointだとこれは有名なので、知っている人(がちゃんと作ろうとする場合)は、
最初に英語名で列を作ってから日本語名に変更することで内部名を英語に、表示名を日本語にします。
知らない場合はそのまま作ると思うのでこうなっているケースが多いですね。

また、エクセルから取り込むと「field_1」、「field_2」となる という事象もあります。

以下の記事に事象や確認方法など載せていますので内部列を使用する際はご参考ください。

おわりに

上記までは基本的なソートの書き方を記事にしました。
実際には昇順、降順をアイコンやボタンで切り替える実装が多いですね。また、対象とする列も切り替えたいという要件も多いと思います。
そのあたりは別の記事で自動生成アプリのカスタマイズサンプルを絡めてご紹介いたします。それでは。

関連記事

ソートの昇順・降順と対象列の切り替えを自動生成アプリカスタムの記事で書きました。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS