はじめに
業務アプリを構築する際、多くの場合、バックエンドにデータベースを利用します。Power Appsで課内やチームで使用するアプリを作成する場合、SharePointリストやDataverse for Teamsは手軽に利用できる選択肢となり得ます。データ管理では、一つのテーブルで全てを完結させるのではなく、例えば顧客管理アプリであれば、「顧客マスターテーブル」と「顧客対応テーブル」のようにデータを分割して管理することが、パフォーマンスや運用効率の面で適切です。
本記事では、Power Automateを使用して、このような複数のテーブルで管理されているデータを、特定のキーを基に結合し、Excelファイルとして出力する方法について紹介します。
なお、この記事は、Power Automate を起動してフローを作成し、タスクを自動化するなど、ある程度Power Automate の基本操作ができる方を対象にしています。Power Automate の基本操作から学びたい方は、別途関連サイトや書籍を参考にすることをおすすめします。
シナリオ
データベースに学生基本テーブルと相談記録テーブルがあります。学生基本テーブルには学生の学籍番号と学生氏名、生年月日などの基本情報が、相談記録テーブルには学籍番号と相談日時、相談内容などを記録します。
相談記録の一覧を確認するときにアプリ画面上で表示する場合はLookUp関数を用いて、次のようにある列をキーにして別のテーブルから任意の列を取り出して表示することができます。
LookUp('学生基本テーブル',学籍番号=学生番号,'氏名(姓)'&" "&'氏名(名)')
しかし、一覧をExcelに書き出す場合などは、アプリからPower Automateを呼び出して、学生基本テーブルと相談記録テーブルを学籍番号をキーに連結して、学籍番号、学生氏名、相談日時、相談記録などをExcel に書き出す処理を行います。このようにPower Automate で二つのテーブルを連結してデータを取り出す方法を紹介します。
効率的なテーブル設計のポイント
基本テーブル(例えば、学生基本)と記録テーブル(例えば、相談記録)を分けることには、データベース容量の効率化、データの整合性、パフォーマンス向上、セキュリティ強化といった多くのメリットがあります。この設計は、拡張性が高く長期的に安定したデータ管理を可能にします。
1. データの整合性と一貫性の向上
- 重複データの排除: 同じ情報が何度も保存されるのを防ぎ、データの整合性を保ちます。
- 更新作業の効率化: 一つのマスタデータを変更すれば、関連するすべてのデータが自動的に更新されます。
2. ストレージの効率化とパフォーマンス向上
- データ量の削減: 不必要なデータの保存を避けることで、データベースのサイズを縮小し、ストレージコストを削減できます。
- クエリ処理の高速化: 必要なデータに迅速にアクセスできるため、システムの応答性が向上します。
- インデックスの有効活用: 特定のデータに素早くアクセスするためのインデックスを効果的に活用できます。
3. データ管理の簡素化と保守性の向上
- 柔軟なデータ構造: データの追加や変更が容易になり、システムの拡張性が向上します。
- バックアップの効率化: バックアップ対象を絞り込むことで、バックアップ時間とストレージ容量を削減できます。
- セキュリティの強化: データへのアクセス権限を細かく設定し、セキュリティリスクを低減できます。
4. データ分析の効率化
- データの集計と分析: 正規化されたデータは、集計や分析に適しており、ビジネスインテリジェンスツールの活用も容易になります。
実装手順
ここでは、学生の相談履歴を管理する相談記録アプリを想定しています。Dataverse for Teamsの記録容量には2GBまでという制約があるため、チームでの共有が必要な学生基本情報(基本テーブル)にはSharepointリストを、一方である程度、相談内容など情報の保護が必要な相談記録(記録テーブル)には、Dataverse for Teamsを採用しました。
次のフローは、2つのテーブル(学生基本テーブルと相談記録テーブル)をキー(学籍番号)に基づいて結合し、Excelファイルに書き出す処理を行います。主なステップは以下の通りです。
ファイルコンテンツの取得とファイルの作成

まず、ExcelテンプレートファイルをSharePointから取得します。このテンプレートを元にSharePointの「Export_Folder」内に新しいExcelファイルを作成します。ファイル名は動的に決定(日時情報などを付加)されるため、毎回異なるファイルとして保存します。
- サイトのアドレス: SharePointサイトのURL
- ファイル識別子: テンプレートとなるExcelファイルのパス(例:
Shared Documents内のフォルダ
) - フォルダーのパス: Excelファイルを保存するフォルダパス(例:
Shared Documents内のフォルダ
) - ファイル名:
concat(...)
を使用して動的にファイル名を生成(例: 日付や一意の名前を含む) - ファイルコンテンツ: 先ほど取得したExcelテンプレートの内容
Dataverse for Teamsテーブルから行を一覧表示

ここでは、「相談記録テーブル」から指定期間内のデータ(crbeb_nichiji
:日付範囲)を取得します。
- テーブル名:
ssc_sodan_gaiyo
(Dataverse for Teamsのテーブル名) - 行のフィルター: 指定された日付範囲でフィルタリング
Apply to Each(ループ処理)

「行を一覧表示」で取得した複数の行データに対し、順番にループ処理を行います。SharePointリスト(学生基本テーブル)から、学籍番号に一致する学生情報を取得します。
- サイトのアドレス: SharePointサイトのURL
- リスト名: 学生基本テーブル(マスタ情報を含むリスト)
- フィルタークエリ: 当該学生を抽出
- 上から順に取得: 1つの行のみ取得
- ビューによる列の制限: SharePointリストで、必要な列だけを含むビューを指定
ビューの作成が有効な理由
学生基本テーブルは、学籍番号、学生氏名のほか、所属情報や連絡先、保護者情報、出身校、入試情報など情報量が多いため、SharePointリスト内の列数が多くなるほど転送されるデータ量が増え、パフォーマンスに影響を与えます。ビューを使って、最小限の必要なデータだけを対象にすることで、効率よくデータを扱えます。
このような場合、パフォーマンスの向上を図るために最初に取得するデータ量自体を削減するために、「ビュー」を作成する方法が有効です。
「ビュー」を作成すると必要な列(例えば、学籍番号と学生氏名)だけが送信されるため、データ転送量が減少して、パフォーマンスが向上し、後続の処理も軽くなる効果が期待できます。
SharePointリストでビューを作成する方法
・SharePointリストの「設定」から、新しいカスタムビューを作成します。
・必要な列(学籍番号、学生氏名など)のみを表示するように設定します。
タイムゾーンの変換

相談日付データがUTC形式で保存されているため、日本時間(JST)に変換します。
- 基準時刻: 相談日付(
crbeb_nichiji
) - 変換元のタイムゾーン: UTC
- 変換後のタイムゾーン: UTC+09:00(日本時間)
Excelの表に行を追加

取得した各行の情報をもとに、Excelの「相談記録一覧」テーブルにデータを追加します。
- 場所: ExcelファイルのSharePointサイトの場所
- ファイル: Excelファイルのパス
- テーブル: Excelファイル内のテーブル名(相談記録一覧)
- 行: 追加するデータを動的に設定(以下はフィールド内容):
- 相談日付: 変換後の相談日付(
formatDateTime(outputs('作成'),'yyyy/MM/dd tthh:mm')
) - 学生番号: Dataverse for Teamsの当該行の学籍番号
- 氏名(姓): SharePpointリストから当該学生の氏名(姓)
- 氏名(名): SharePpointリストから当該学生の氏名(名)
- その他の情報: Dataverse for Teamsの当該行のそれぞれの情報
- 相談日付: 変換後の相談日付(
まとめ
本記事では、Power Automateを活用して、SharePointリストとDataverse for Teamsのテーブルからデータを取得し、それらを結合してExcelファイルに書き出す方法について紹介しました。このアプローチは、以下のような多くの利点があります。
- 効率的なデータ管理
基本テーブルと記録テーブルを分けることで、データの整合性を保ちながらストレージを効率的に活用できます。 - パフォーマンスの最適化
必要なデータだけを取得するために、SharePointリストのビューを作成し、データ転送量を削減することで、フローの応答速度を向上させる方法を紹介しました。 - 柔軟なデータ処理
タイムゾーンの変換や、複数のデータソースを統合する処理など、業務要件に応じたフローの柔軟性を確保できます。 - 実用的なアウトプット
最終的に、顧客や業務担当者が利用しやすい形式でExcelファイルとして出力することで、業務効率化が図れます。
Power AppsやPower Automateでも複数のデータソースを統合した効率的な業務アプリケーションを構築することができます。特に、定期的なデータ出力が求められるプロセスでは、自動化のメリットを最大限に引き出せます。本記事が皆さまの業務アプリケーション開発の一助になれば幸いです。