Power Apps テーブルデータを完全に逆順表示する方法

Power Apps
この記事は約4分で読めます。

Power Appsでテーブルデータを逆順に表示したいけど、Sort関数だけではうまくいかなくて困ったことはありませんか?実は、Sort関数を使っても想定した並び順にならないケースがあるんです。

今回は、データの形をそっくりそのまま逆から並べる方法について解説します。例えば、「Banana、Apple、Date」の順番で表示されているデータを、「Date、Apple、Banana」のように完全に逆順で表示したい場合の実装方法です。

Sort関数の限界とは?

例えば以下のテーブルデータをそのまま逆に並べたい場合はどうすればよいでしょうか?

SampleItems = Table(
        { Name: "Cherry" },
        { Name: "Elderberry" },
        { Name: "Banana" },
        { Name: "Apple" },
        { Name: "Date" }
    );

Power Appsでデータを並び替える場合、Sort関数を使うのが一般的ですね。しかし、今回のようなデータをそのままSort関数で並び替えてしまうと、想定した並び順にはなりません。

ここで重要なのは、単純なソートではなく、データの順番をそのまま逆転させたいということです。

解決策:3つの関数を組み合わせる

そんな時に便利なのが、ForAll関数Sequence関数、そしてLastN関数を組み合わせて使う方法です。ちょっと複雑に見えるかもしれませんが、実際にやってみると意外とシンプルなんです。

実装手順

では、実際に実装してみましょう。

ステップ1: 連続数値テーブルの作成

まずはForAll関数Sequence関数CountRows関数を使って、指定したテーブルの行数分の連続した数値のテーブルを作成します。

ForAll( Sequence(CountRows(SampleItems))

ステップ2: 逆順データの取得

続いてLastN関数Sequence関数の結果のバリューを使って、並び替えたいテーブルのデータを逆から順に取得します。

ForAll( Sequence(CountRows(SampleItems)),LastN(SampleItems,Value)) 

ここでのポイントは、以下のような仕組みになっていることです:

  • 1週目は最後の行
  • 2週目は最後から2番目と最後の行

↓この時点でのデータのイメージ

といったように、データが取得できるんですね。

ステップ3: 最終的な並び替え

そのため、赤色の箇所が最終的に取得できれば完成しそうです。LastN関数で取れた結果の一行目だけ取得できれば逆に並ぶため、First関数LastN関数を囲って完成です。

最終的な式は以下になります。

ForAll( Sequence(CountRows(SampleItems)),First(LastN(SampleItems,Value))) 

実際の動作確認

実装が完了したら、実際に動かしてみましょう。正しくデータが並び替えられていることが確認できるはずです。

ギャラリーコントロールに設定することで、視覚的にも分かりやすく逆順表示が実現できますね。

まとめ

いかがでしたでしょうか?Sort関数だけでは実現できない完全な逆順表示も、ForAll関数Sequence関数LastN関数の組み合わせを使えば簡単に実装できます。

特に、データの順番をそのまま保持しつつ逆転させたい場合には、この方法がとても有効です。ぜひ試してみてください。

YAML 形式のコードも用意しましたので、必要に応じてご利用ください。(動作の保証は致しかねます)

Screens:
  Screen1:
    Properties:
      OnVisible: |-
        =ClearCollect(SampleItems,Table(
                { Name: "Cherry" },
                { Name: "Elderberry" },
                { Name: "Banana" },
                { Name: "Apple" },
                { Name: "Date" }
            ));
    Children:
      - Gallery2:
          Control: Gallery@2.15.0
          Variant: Vertical
          Properties:
            Items: '=ForAll( Sequence(CountRows(SampleItems)),First(LastN(SampleItems,Value))) '
            TemplateSize: =90
            Width: =560
            X: =33
            Y: =387
          Children:
            - Label7:
                Control: Label@2.5.1
                Properties:
                  OnSelect: =Select(Parent)
                  Text: =ThisItem.Name
                  X: =18

Power Apps学習の決定版!コントロール別YouTube再生リスト完全ガイド

Power Appsを学習していて「どのコントロールをどう使えばいいのかわからない」「実際の使い方を動画で見ながら覚えたい」と思ったことはありませんか?

実践的な知識を効率よく身につけられるよう、現在公開している動画を整理したYouTube再生リスト集をご紹介します。

Power Apps 学習リソース一覧

コントロール・機能 リンク
ギャラリー 再生リスト
テキストラベル 再生リスト
テキスト入力 再生リスト
フォーム 再生リスト
ラジオ 再生リスト
スライダー 再生リスト
トグル 再生リスト
コンボボックス 再生リスト
ドロップダウン 再生リスト
ボタン 再生リスト
日付選択 再生リスト
画像 再生リスト
タイマー 再生リスト
コンポーネント 再生リスト
Copilot 再生リスト
クラシックコントロール 再生リスト
表示加工 再生リスト
バリデーション 再生リスト
ひと手間デザイン 再生リスト
ハンズオン 再生リスト
全体Tips 再生リスト
無料配布 再生リスト

コメント

タイトルとURLをコピーしました