Power Appsでのデータフロー
データフロー
というとPower BI
🧐!!
となりそうですが、Power Appsでのデータフローという機能が存在します。
こちらはPower Apps ポータル
から活用することができる高度なデータ活用機能です。
Power Apps
、Power Automate
において、データ統合の手段は複数存在しますが、お勧めはダントツでデータフローを用いる方法です。
こちらについて解説していきたいと思います。
この内容は2024.11.28~30に開催された Japan Microsoft 365 コミュニティ カンファレンス 2024の登壇でも取り扱わせていただきました。
Power Platform でもこの機能が使えるんだ👀✨となれば幸いです!
データフローの詳細
データフロー
はPower Apps ポータルの中に存在します。ナビゲーション ウィンドウ
からデータフロー
を選択すると出ています。
この機能は、多様なSaaS・ビジネスデータとの接続、データの保管、加工を可能にします。
データの格納先は、Microsoft Dataverse
または Azure Data Lake Gen2 ストレージ
です。
方法 | ストレージ | Power Query | 他アプリケーションとの連携 | 増分読み込み | スケジュール更新 | 備考 |
---|---|---|---|---|---|---|
標準データフロー Standard V2 | Dataverse | ○ | Dataverseを通して可能 | 既定 | ○ | ビジネスユーザー部門でも利用しやすい ※AI関数・計算されたテーブルは対象外 |
分析データフロー | Azure Data Lake Gen2 | ○ | Power BIのみ | フルロード ※設定可能 |
○ | 高度な機能を含めて提供 |
データフローを利用する条件
データフローの活用自体は、有償ライセンスが必要です。
2024.12現在では下記のライセンスが該当します。
Power Apps の開発者向けプラン
では利用できません。ご注意ください。
「有償ライセンス💰」と聞くと、躊躇してしまう部分もありますが、Dataverse
のリッチなデータ管理機能を使えるというだけでも十分にペイする機能ではないかと思います。
そして個人的にこれは👀🔥ということが、公式の資料にも記載があります。
注意
データフローを使用するには、有料の Power Apps プランを使用する必要がありますが、データフローを使用することによって別々に請求されることはありません。
コストコントロールが一定可能であるともいえます。
データフローの活用手順
データフローは単一のPower Platform
の環境内に作成されます。
環境を選択したうえで、下記の順序でデータフローを定義します。
- データフローの作成
- Power Queryを用いたデータ加工の定義
- テーブル(Dataverse)へのマッピング
- 更新頻度の設定
「3.テーブル(Dataverse)へのマッピング」ですが、新しいテーブルへの読み込み
・既存のテーブルへの読み込み
の二つをサポートしています。
個人的には既存のテーブルへの読み込み
を選択し、あらかじめ定義しておいたテーブルにデータを蓄積していく方法がやり易いです。
推しのポイント: 2. Power Queryを用いたデータ加工‼
Power BI Desktop
の Power Query エディター
と同じPower Queryの機能を利用することができます。
私自身、Power Automate
のデータ加工、Office Scripts
の解説など、Qiitaで取り上げてきましたが、それぞれ操作性に癖があります。Power Apps
も同様です。
完全に主観で比較すると下記のようになりました。
Power Platform データフロー | Power Automate | Office Scripts | |
---|---|---|---|
手段 | ローコード | ノーコード | コード |
データ変換 | 高度な変換可能 | 高度な変換にはテクニックを要する | 柔軟に制御可能 |
エラーハンドリング | 標準で失敗処理通知を制御 | 柔軟 | カスタマイズ |
スケジュール実行 | 標準 | 標準 | 要Power Automate |
外部システム | ◎ 多数のコネクタ | ◎ 多数のコネクタ | 限定的 |
大量データ処理 | 百万単位 | 千単位 | 万単位 |
バッチ処理 | ◎ | 並列処理は限定的 | 実装は可能 |
リアルタイム処理 | 要Power Automate | 最適 | 要Power Automate |
コスト | 要プレミアムライセンス | 追加費用が必要である可能性あり | 低コスト |
アクセス制御 | ◎ 詳細な設定可 | ◎ 詳細な設定可 | - |
ログ | 標準 | 標準 | - |
DLP対応 | ◎ 対応 | ◎ 対応 | - |
データ加工の手段として、ユーザーフレンドリーである強力な機能は、Power Queryに軍配が上がると自分は考えています。視覚的に加工プロセスを把握することができ、クイックに加工プロセスを定義することが非常に魅力的です。
この部分は考え方の相違により、ご意見をいただきそうな部分のため、これ以上の持論は避けます。
そしてPower Query自体の説明についても、ほかの文献やlearnに解説を譲らせていただきます。
4. Tips !! LoopによるPower Queryのドキュメンテーション
コラボレーションアプリであるMicrosoft LoopでMermaid図が描画できます。
Power Queryの基本機能でクエリの依存関係
を可視化することができますが、Power Query M式
からMermaid図の描画がCopilotからクイックにできます。
下記のPower Query M式をもとに依存関係をMermaid図で描画してください。
# Power Query M
{コードを貼り付け}
結果
上記の例は少し微妙ですが、クエリやテーブルの依存関係の可視化し、保守性向上に役立ちますね!
ちなみにマニュアル作成でもCopilotは大活躍するため、ガンガン使い倒すことをおススメします!
3. テーブル(Dataverse)へのマッピング
「2. Power Queryを用いたデータ加工」の結果は、Dataverseのテーブルに格納することができます。
カスタムテーブルだけではなく、標準テーブルも同様です。
どの列に「2. Power Queryを用いたデータ加工」の結果を当てはめるか、これがマッピングに該当します。
4. 更新頻度を設定する
そして嬉しい機能として更新頻度の設定があります。
コチラは任意のスケジュールでデータフローを更新を自動で設定することができます。
この機能はPower Automate
による更新とは別物です。
さらに更新頻度をフレキシブルに設定したい場合は、後述するPower Automateとの連携をご参照ください。
原則的に、Power Appsのデータフローは増分更新です。
取引履歴のようなデータを蓄積し続けます。
マスタのようなデータを更新する機能にする場合は、Power Platform 管理センター
の機能を活用します。
豊富なDataverse
・Power Platform 管理センター
との組み合わせでハンドリングできるイメージです。魅力が満載です。
大規模なデータを一括で処理するオプションとして、ビジネスユーザー部門からでも心強い機能ではないでしょうか。
Power Automate テンプレート
Microsoft learnにて、データフロー コネクタを利用したテンプレートが紹介されています。
自分で一から考えずとも用意されているのは、ありがたいです🐟
さっそく作成してみましょう🐟
せっかくなので、データフローを作成する手順をみていきます。
今回は特定のデータソースからデータを取得せずに、Power Queryによる計算結果を用いたカレンダーテーブルを作成します。
let
// 現在の年を取得
CurrentYear = Date.Year(DateTime.LocalNow()),
// 会計年度のロジック
GetFiscalYear = (date) =>
let
year = Date.Year(date),
month = Date.Month(date)
in
if month >= 4 then Text.From(year) & "-" & Text.From(year + 1) else Text.From(year - 1) & "-" & Text.From(year),
// 開始日と終了日
StartDate = #date(CurrentYear, 1, 1),
EndDate = #date(CurrentYear, 12, 31),
// 日付リストの生成
DateList = List.Dates(StartDate, Duration.Days(Duration.From(EndDate - StartDate)) + 1, #duration(1, 0, 0, 0)),
// テーブル化
DateTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"Date"}),
// 必要カラムを追加
AddYear = Table.AddColumn(DateTable, "Year", each Date.Year([Date]), Int64.Type),
AddFiscalYear = Table.AddColumn(AddYear, "FiscalYear", each GetFiscalYear([Date]), type text),
AddMonth = Table.AddColumn(AddFiscalYear, "Month", each Date.Month([Date]), Int64.Type),
AddDayOfMonth = Table.AddColumn(AddMonth, "DayOfMonth", each Date.Day([Date]), Int64.Type),
AddDayOfWeekName = Table.AddColumn(AddDayOfMonth, "DayOfWeekName", each Date.DayOfWeekName([Date]), type text),
AddDayOfWeekNumber = Table.AddColumn(AddDayOfWeekName, "DayOfWeekNumber", each Date.DayOfWeek([Date]) + 1, Int64.Type),
// 祝日データのモックアップ(ここをカスタマイズ)
AddHolidayName = Table.AddColumn(AddDayOfWeekNumber, "HolidayName", each if Date.Day([Date]) = 1 and Date.Month([Date]) = 1 then "New Year's Day" else null, type text),
AddHolidayType = Table.AddColumn(AddHolidayName, "HolidayType", each if [HolidayName] <> null then "Public Holiday" else null, type text),
AddHolidayDescription = Table.AddColumn(AddHolidayType, "HolidayDescription", each if [HolidayName] = "New Year's Day" then "Celebration of the new year" else null, type text),
AddIsNationalHoliday = Table.AddColumn(AddHolidayDescription, "IsNationalHoliday", each if [HolidayName] <> null then true else false, type logical),
DuplicatedColumn = Table.AddColumn(AddIsNationalHoliday, "strDate", each Text.From([Date], "ja"), type text),
TransformColumnTypes = Table.TransformColumnTypes(DuplicatedColumn, {{"Date", type date}})
in
TransformColumnTypes
具体的な作成の流れ
-
登壇に合わせて
#JapanM365CC2024
という名称の環境を作成しています。 -
ソリューション
にカスタムテーブル
を設けてデータフロー
を作成 -
ソリューション
からDataflow
を選択
Dataflow
を選択したあと、分析
にチェックを入れないで、データフロー
の作成画面に遷移しましょう。 -
データソースを選択する
データソースとして空のクエリ
を選択します。
今回はサンプル
としてカレンダーを作成してテーブル
に読み込ませます。コネクタ
の認証に関する解説は、公式記事をご参照ください。 -
Power Query M式でカレンダーを作成
- 空のクエリで以下のPower Query M式を使用してカレンダーを作成
-
宛先を設定する
画面で設定を行う6-1. 読み込み先の設定
メタデータからサジェストされることが凄いAIパワーを感じますね📊
-
設定の更新と更新頻度のスケジュール
実行するとDataverseに値が格納されます!
最初は面食らうところがありますが、これにより外部システムから、システムジョブとしてデータを取り込むことができます。
多様なコネクタがサポートされ、定期的にデータを更新できるCoolな機能です!
是非試してみてください。