はじめに:そのデータ、「画面遷移」が必要ですか?
Power Appsで業務アプリを開発していると、必ずと言っていいほど「一対多」のデータ関係を扱う場面に直面します。
「一社の顧客に、複数の注文履歴がある」「一つのプロジェクトに、複数のタスクがある」といったケースです。
これらを表現する際、多くの方が採用するのは「顧客を選んでから、別画面で履歴を見る」という遷移型のUIです。しかし、ユーザーからはこんな要望が来ないでしょうか?
「いちいち画面を行き来するのが面倒だ」
「紙の帳票のように、全体像をパッと見たい」
本記事では、この課題を解決する「ネスト(入れ子)ギャラリー」というテクニックを紹介します。
ギャラリーの中にギャラリーを入れることで、「あえて分離させず、1画面に集約する」プロの表現力をマスターしましょう。
※本記事では、データソースとして「SharePointリスト」を使用する場合の実装手順を解説します。
こう選ぶ!「ネスト型」を使うべきシーン
構築に入る前に、重要な設計思想の話をします。
「ギャラリーを入れ子にする」という処理は、アプリに一定の負荷をかけます。そのため、何でもかんでもネストすれば良いわけではありません。
| 形式 | 構成イメージ | 向いているシーン |
| 分離型 (マスタ・詳細) | 左で親を選択 → 右に子を表示 | データ入力・編集がメインのアプリ 動作が軽く、大量データの管理に最適。 |
| ネスト型 (入れ子) | 親の中に子を表示 (今回のテーマ) | 閲覧・報告・カタログ用のアプリ 「請求書」のような帳票ビュー、FAQ、製品カタログなど、一覧性が最優先される場合。 |
今回の記事は、後者の「一覧性・閲覧性」を担保するためのテクニックです。
完成イメージ:請求書のような画面を実現
目指すのは、以下のような画面です。

親(顧客)ごとに枠があり、その中に子(注文履歴)が明細として展開されています。
この構造を作るには、ギャラリーのテンプレート(1行)の中に、さらにもう一つのギャラリーを配置します。
【ハンズオン】実装手順
ポイントは、Power Appsの操作以前に「SharePoint側の列設定」にあります。
Step 0: データソース(SharePointリスト)の準備
以下の2つのリストを作成します。特に「子リスト」の参照列の設定が重要となります。
親リスト:顧客マスター
| 列の表示名 | データ型 | 備考 |
| Title (顧客名) | 1行テキスト | Title列の名前を変更して使用 |
| 担当者 | 1行テキスト | – |
リスト2:受注製品リスト(子リスト)
| 列の表示名 | データ型 | 備考 |
| Title (受注製品名) | 1行テキスト | Title列の名前を変更して使用 |
| 受注日 | 日付 | – |
| 金額 | 数値 | – |
| 顧客ID | 参照 | 重要 |
【重要】参照列の設定手順
受注製品リストを作成する際、顧客ID列は以下の手順で作成します。
- SharePointリストの設定で [列の追加] > [参照] を選択。
- 情報の取得先として
顧客マスターを選択。 - 表示する列として
Title(顧客名) を選択。
これにより、見た目は「会社名」ですが、内部的には「ID」で紐づくリレーションシップが完成します。

Step 1: 親ギャラリーの配置
- Power Apps Studioで、[挿入] > [レイアウト] > [高さが伸縮可能な空のギャラリー] を選択し、配置します。
- ※ネストする場合は、子データの数に応じて高さが自動調整されるこのギャラリータイプを選ぶのが鉄則です。
- データソースに
'顧客マスター'を設定します。 - 配置した親ギャラリーの一番上の行(テンプレート)を選択して、編集状態にします(左上の鉛筆アイコンをクリック)。
- 親ギャラリーの中にテキストラベルを追加し、「顧客名」や「担当者」を配置します。
Step 2: 子ギャラリーの挿入(ネスト)
ここが操作のポイントです。
- 親ギャラリーの編集状態で、[挿入] > [レイアウト] > [空の垂直ギャラリー] をクリックします。
- 親ギャラリーの中に、子ギャラリーが挿入されます。これが「ネスト」です。
Step 3: 子ギャラリーのフィルタリング設定
子ギャラリーを選択し、Items プロパティに以下の数式を設定します。
Filter(
'受注リスト',
顧客ID.Id = ThisItem.ID
)
顧客ID.Id:子リストの参照列が裏で持っている内部ID。ThisItem.ID:親ギャラリーの現在の行のID。- これらを比較することで、会社名が変わっても紐付けが切れないフィルタリングになります。
【注意:委任の警告について】
この数式を入力すると、波線(委任の警告)が出ることがあります。
これはSharePointリストの仕様上、参照列のID検索がサーバー側での処理に対応していないためです。
- データが2000件以内なら: このままで問題なく動作します。Power Appsが自動的に処理してくれます。
- データが大量にあるなら: 後述の「上級者向けコラム」の方法を使うか、Dataverseへの移行を検討する必要があります。
Step 4: レイアウトの調整
- 子ギャラリーの中にテキストラベルを追加し、「受注製品名」や「受注日」「金額」 を表示させます。
- 子ギャラリーのレコード数に応じて算出したギャラリーの高さを
Hightプロパティに設定します。
CountRows(Self.AllItems) * (Self.TemplateHeight+10)
これで、注文が4件ある顧客の枠は広く、2件しかない顧客の枠は狭く、自動で調整されるスマートな画面が完成します。
【コラム】2000件の壁を突破する「連携用ID列」
実務で数万件のデータを扱う場合、前述の「委任の警告」は無視できない問題になります。
SharePointのまま大量データを正しく扱いたい場合は、少し手間ですが以下の方法で回避可能です。
- 連携用フィールドの作成:子リスト(受注リスト)に、参照列とは別に「数値」型の列(例:ParentID_Num)を作成します。
- データの保存:データ登録時(Patch関数など)に、参照列だけでなく、この数値列にも親のID(1や2)を二重に保存するようにします。
- フィルタリング:Power Apps側の数式を以下のように変更します。
Filter('受注リスト', ParentID_Num = ThisItem.ID)
SharePointでは、数値列の比較であれば委任が可能です。この一手間を加えることで、SharePointリストでも大規模なデータを扱う「ネストギャラリー」を構築できます。
【参考】Dataverseなら「設定なし」で検索できる!
今回、SharePointリストで実装しましたが、もしあなたが「数万件のデータを扱いたい」「部分一致で検索したい」と考えているなら、以下の違いを知っておく必要があります。
SharePointリストでは「部分一致検索(〜を含む)」を行おうとすると委任警告が出てしまいますが、Dataverseなら標準機能で委任可能です。
特に、Filter 関数と in 演算子の組み合わせが最強です。
// Dataverseなら、この書き方で委任警告なし!
// 設定も不要で、大量データから部分一致検索ができます
Filter('学生情報', TextInput_検索.Text in 学生姓)
SharePointでは不可能なこの「検索の手軽さ」と「パフォーマンス」こそが、データソースにDataverseを選ぶ大きな理由の一つです。
アプリの規模が大きくなり、SharePointの制限(委任問題)に悩まされるようになったら、Dataverseへの移行を検討してみてください。
まとめ:まずは「一覧性」を手に入れよう
本記事では、SharePointリストとギャラリーのネストを使い、関連データを1画面に集約する方法を紹介しました。
この方法を使えば、「請求書ビューを作ってほしい」「印刷用に1画面にまとめてほしい」といった要望に応えることができます。
「でも、データ量が多いときはどうすればいいの?」
そんな方のために、次回は動作の軽さと管理のしやすさを重視した王道の設計パターン、「マスタ・詳細(分離型)」の構築手法を紹介する予定です。