[Power Platform] PowerApps + Microsoft Flow + Power BI の連携方法 Vol.2 ～構築編～

#はじめに
Vol.1 からの続きです。[前回](https://qiita.com/yugoes1021/items/b62111ca7bf22d35296b)記事を読まれていない方は、[Vol.1](https://qiita.com/yugoes1021/items/b62111ca7bf22d35296b) へどうぞ。
前回は **準備編** ということで、主にアカウント作成の話をさせていただきました。
**PowerApps, Flow, Power BI** がひとつの組織アカウントで使えるという方は、本記事から読み進めていただいて問題ありません。

今回からは３つのサービスの連携方法を手順として、説明していきます。

#今回のゴール
今回は以下の順番で進めていきます。この Vol.2 を終えることで**「PowerApps を入力用アプリ、結果を即座に Power BI に表示させる」**ということが実現できます。
###手順
1. Power BI でストリーミングデータセット作成
2. Flow で PowerApps ⇒ Power BI を作成
3. PowerApps でアプリを作成
4. Power BI でレポートを作成

#1. Power BI でストリーミングデータセットを作成
まずは ストリーミングデータセット を作成します。ストリーミングデータセットは Power BI で動くグラフを作成する際に必要となるデータの入れ物です。ここに Web API 経由でデータを POST することで動くグラフが作成できます。今回はこれを使うことで、PowerApps から送られたデータを Microsoft Flow を経由して、Power BI にデータ送信します。

ストリーミングデータセットについては以下を参考にしてください
- [MS 公式] https://docs.microsoft.com/ja-jp/power-bi/service-real-time-streaming
- [私が過去に書いた記事] https://qiita.com/yugoes1021/items/1b87a7205e6c659a9604

###1-1. まずは https://app.powerbi.com へアクセスしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f38908e7-0154-b8ec-f603-9496a0557bad.png)

###1-2. サインインをしたら、**[ワークスペース] - [データセット] - [+作成] - [ストリーミングデータセット]** を選択してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/6e0cb76e-fffb-1385-9d13-a984d0f9cfb5.png)
###1-3. この画面が開くので **[API]** を選択して **[次へ]**

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/abe39636-2f29-3c43-7b2e-e875dfe46b96.png)

###1-4. 今回は画像の通り、入力していきます

| 項目名       |       値 |    備考    |
|:-----------------|:------------------|:-------------------|
|データセット名|QiitaTest|任意|

■ストリームからの値
→この定義が PowerApps からもらうデータの定義となる

|項目名|型|備考|
|:-----------------|:------------------|:-------------------|
|日付|日時||
|名前|テキスト||
|メール|テキスト||

■履歴データの解析
通常ストリーミングデータセットからはレポートを作成することができないが、
これを On にすることでレポート作成が可能になる

- [x] オン

###1-5. 入力が完了したら、**[作成]** をクリック

ちなみに [ストリームからの値] で指定できる 型 は以下の通り、テキスト、数値、日時 の3種類。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/36d67e09-faa0-2e9b-4077-9e23166af717.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f14a68b7-1c33-5f0b-83dc-5ed9d0cf9da9.png)
この画面が出ればストリーミングデータセットの作成は完了！
この画面について解説をすると、[プッシュ URL] に [Raw] の JSON を POST することで、作成したストリーミングデータセットにデータを追加することができる。

[Raw], [cURL], [PowerShell] とある通り、サンプルソースが簡単に示されている。
■ cURL の場合
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/84ebd062-399a-7268-78b4-653d7e819e43.png)

■ PowerShell の場合
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/38fe2b89-ea87-08b4-62cb-158bc64d723e.png)

作成したストリーミングデータセットの確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b4bed1b4-d05f-6e13-6191-ee1623f7cfbc.png)
上記の通り、作成したデータセットが追加されています。

#2.Microsoft Flow で PowerApps から呼び出す Flow を作成
次は PowerApps から呼び出す Flow を作成します。https://flow.microsoft.com/ja-jp/ を開いて、Power BI と同じアカウントでサインインしてください。

###2-1. **[マイ フロー]** を開いて **[一から作成]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/1e9dca69-de2b-7636-85b4-18a2eed4e89a.png)

###2-2. **[一から作成]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/05d7c81d-a563-8691-a828-f31e5548e31d.png)

###2-3. 検索窓に **PowerApps** と入力し、トリガーの **PowerApps - PowerApps** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b219e719-d248-b00e-f114-e8f782a59b01.png)

###2-4. **[新しいステップ]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/bda4baf6-aa30-a4cb-7b6f-0d80a0bf0edb.png)

###2-5. 検索窓に 日付 と入力し、**日付と時刻 - 現在の時刻** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/529a8a3e-4392-cc5d-c390-cf2c7e26e46d.png)
Power BI のストリーミングデータセットに現在日時を挿入するために現在日時を取得しておきます。

###2-6. **[新しいステップ]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f7e7cdbc-c75d-4728-bbe4-29524c8ac05a.png)

###2-7. もう一度 **日付** と検索し、今度は [日付と時刻 - タイムゾーンの変換] をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/dfa9f093-6530-733e-5083-8d59a98a4923.png)
2-5 で取得した **現在日時** は UTC なので、日本時間(JST) にタイムゾーンを変換します。

###2-8. **タイムゾーンの変換** で以下の通り入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/d55fb777-48c7-b743-d574-58380152a99f.png)
**基準時間：** `現在の時刻` を選択（カーソルを基準時間に合わせると吹き出しが出てくるので `現在の時刻` を選択）
**ソース タイム ゾーン：** `(UTC)協定世界時`
**変換先のタイム ゾーン：** `(UTC+09:00) 大阪、札幌、東京`
**書式設定文字列：** **[カスタム値の入力]** を選択してから `yyyy/MM/dd HH:mm:ss` を手入力

###2-9. **[新しいステップ]** をクリック後、**Power BI** と検索。**[Power BI - Add rows to a dataset]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/ea8f7bff-8b55-45b9-0e60-a053660d3fe5.png)

初回の場合、Power BI へのサインインを求められることがあります。
その場合は、Power BI のアカウントを入力してください。

###2-10. 以下の通り、入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/fc3b59c0-a1c2-acd8-0833-c6ab99197282.png)
**Workspace：** 先ほどストリーミングデータセットを作成した **ワークスペース** を選択
**Dataset：** **先ほど作成したストリーミングデータセット** を選択
**Table：** `RealTimeData` を選択（ストリーミングデータセットの場合、必ずこのテーブル名になります）
**日付：** `変換後の時間` を選択
**名前：** カーソルを合わせて、右出てくる吹き出しで **[PowerApps で確認]** をクリックします。クリックすると **Addrowstoadataset_名前** という変数が追加・設定されます。
**メール：** **名前** と同様にカーソルを合わせて、右出てくる吹き出しで **[PowerApps で確認]** をクリックします。クリックすると **Addrowstoadataset_メール** という変数が追加・設定されます。

*注意：PowerApps をトリガーで選択した場合、この時点では PowerApps からどんな値が送信されるかまだ決まっていません。PowerApps から送信される値を定義する仁は、設定したい項目にカーソルを合わせて [PowerApps で確認] をクリックすると、このフローのパラメータ（引数）として、定義されます。なお、一度定義すると修正・削除ができないので、十分に注意してください。もし間違えて定義してしまったら、フロー自体を最初から作成しなおす必要が出てきます（非常に残念です）*

ここまでの手順で以下状態になります。これでフローの処理は完成です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f5cdb645-23cc-9464-364e-52ab07cac942.png)

###2-11. 名前を付けて保存をします
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/38e9ef4d-dcbf-8c87-3eee-2c51050541e0.png)
画面左上に [無題] となっている箇所があるので、クリックして、任意の名前を入力します。ここでは `QiitaTest` としています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/1e1f7081-f0ee-86a9-d1d9-c01138acfa43.png)
名前を付けたら、右上 または フローの一番下の [保存] をクリックすることで、保存ができます。

#3. PowerApps でアプリを作成
ここまでで Power BI でストリーミングデータセットを作成し、Microsoft Flow で PowerApps から呼び出すためのフローを作成しました。

つぎは PowerApps でアプリを作成します。もう少しです！頑張りましょー(/・ω・)/

###3-1. https://web.powerapps.com を開き、同じアカウントでサインインをする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f834d449-97f6-b91b-a4fd-ff3a5652dd9f.png)
**[空白から開始]** をクリック後、**[電話フォームファクター]** を選択して、[このアプリの作成] をクリックする

###3-2. 開いた画面で **[ラベル]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/9da09d40-cb1b-be89-a2b7-66feef484803.png)
クリックすると画面に **ラベル** が追加される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/bab059db-21c5-4e3f-54df-cb6073df56d5.png)
追加された **ラベル** をダブルクリックすると、入浴モードになるので `テキスト` を `名前：` に変更する
（Excel のように画面上部の fx の右側に入力するのも OK）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b007ea4f-ac70-c7d1-9eb7-d800e7d31f63.png)

###3-3. テキストボックスを追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/35601ee8-0812-d888-81f4-1a98ed254e50.png)
**[テキスト] - [テキスト入力]** をクリックすると画面に **テキストボックス** が追加される

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/98b2e543-e73d-c17e-4b33-dd7207d4e28f.png)
画面右側 [詳細設定] を以下の通りに変更する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/6a1d26a3-e7a8-1d33-8e8e-9fafef1c3e17.png)

###3-4. **[コントロール] - [ボタン]** をクリックして、ボタンを追加する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f60d1fd0-0712-19af-2937-9bd56a919e87.png)

###3-5. 追加されたボタンの位置を調整し、**[Text]** を `送 信` にする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/2e1d47cc-7037-1e5b-8d34-9c9469845f3b.png)

###3-6. ボタンを選択した状態で **[アクション] - [Flows]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/5902cfec-c11f-c41d-a1d4-54d8b041738e.png)
開いた画面に先ほど作成した Flow が表示されるのでクリック（ここでは **QiitaTest**）

###3-7. パラメータ入力待ちになる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/c0bd0033-49dd-88a4-299d-d9b9ddec995b.png)

ボタンの **OnSelect** イベントに **"フロー名".Run(パラメータ1, パラメータ2, ... パラメータn)** という関数を設定すると、Microsoft Flow のフローを呼び出すことができる。

今回はここに 第１パラメータ：名前、第２パラメータ：メール を渡す必要がある。

現状では
**TextInput1** が 名前 のテキストボックス
**TextInput1_1** が メール のテキストボックス
となっているのでこのコントロール名をパラメータに設定する。

###3-8. Run 関数のパラメータに **TextInput1.Text** と入力する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f9c6a626-ec1a-7ff7-e646-ae4e6e6f9412.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/329d9648-ad09-c7ba-5c96-64c13a091476.png)
"コントロール名"."プロパティ名" で値にアクセスできる。"コントロール名". まで入力すると選択候補（インテリセンス）が表示されるので、選択することで入力が補完される。

###3-9. このままだとコントロール名がわかりずらいので、コントロール名を変更する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/eb7f0c4e-852d-4a8b-3dfc-7e470ae497df.png)
画面左の [TextInput1] を右クリックし [名前の変更] をクリック。`txtName` に変更する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/5f832255-41f5-c35f-18dd-ecd92d702e78.png)
コントロール名を変更すると関数の引数で使用されている変数名も自動的に変更される。

**[TextInput1_1]** を **[txtName]** に変更する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/09eda4c1-7c6f-8343-b380-912c5953ee72.png)

###3-10. 試しに実行してみる（テスト）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/1eb48217-bfe6-43ad-6839-b0a5899e550b.png)
PowerApps では画面右上の ▷ をクリックする（または F5）で実行することができる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/d60e7a06-b2a5-febd-40a5-cd41b8a7f966.png)
**[名前]**、**[メール]** を入力して、**[送信]** ボタンをクリック
（特にボタン押下後の処理を設定していないため、処理完了はわからない）

###3-11. 実行結果を確認するために Microsoft Flow の画面を開く
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/ab8593e3-e446-308d-4a4c-d26c70059696.png)
**[QiitaTest]** をクリック

###3-12. [実行履歴] に **[Succeeded]** が表示されていれば、PowerApps から無事に Flow の呼び出しが成功している
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/dd26cbdf-c370-676e-4961-f9786276b9b7.png)

**[Succeeded]** をクリックすると、フローの実行結果の詳細を見ることができる
コネクタの右上に各コネクタの実行結果のアイコンが表示される。グリーンのチェックマークは正常終了を表す
処理が失敗している場合は赤い背景の×が表示される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/85f86e31-eaa8-c49a-1e44-cdf954fc13c6.png)
それぞれのコネクタをクリックすると、詳細な値が確認できる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/de3fdb5c-7d9c-998b-3316-6718e23df600.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/843b544c-5c03-bb97-2fc4-64a5470c762c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/7a278842-2ce6-e7f2-2f77-051eabf3bc26.png)

###3-13. PowerApps へ戻り、名前をつけて保存するため **[ファイル]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/cb3bbeb4-2526-b8c6-f432-b4b605cceac5.png)

###3-14. **[名前を付けて保存]** を開き、アプリに名前(QiitaTest)をつけて、画面右下 **[保存]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/219529e8-bf17-e9ab-ef73-92fac1085016.png)

###3-15. 保存が完了したので **[このアプリを共有する]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/c834fde8-eb3c-73a3-af57-6310a7805ab8.png)

###3-16. 共有したい相手を選ぶ。今回は **[組織内のすべてのユーザーを追加します]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/cef69410-a59e-f05b-29e4-00dc9f87f9a5.png)

*注意：自分ひとりだけで使用する場合は [共有] 自体が不要です。組織内の特定の相手にのみ、共有することも可能です。*

###3-17. **[組織と共有済み]** が追加されたことを確認して **[保存]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/463cc63a-f898-9baa-f1e9-b227fe510471.png)

ここまでで PowerApps アプリの作成まで終わりました！
あと**ラストワンマイル！！**

#4. Power BI でレポートを作成
###4-1. Power BI に戻り **[データセット]** を開き、対象のデータセットの **[レポートの作成]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/03e16c15-1658-b46e-ded6-b6d9ae6c7d71.png)

###4-2. **[視覚化]** の **...** (3点リーダー)をクリックし、**[Marketplace からインポート]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/4591b4fc-ceb7-ebba-87e8-deff71e2d166.png)

###4-3. 検索窓に **powerapps** と入力し **PowerApps (Preview) カスタムビジュアル** を **[追加]** する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/67a0bc87-6c38-64a0-a1c3-37f480b09216.png)

追加が完了すると **[視覚化]** にアイコンが追加される
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/4946cfc7-c690-9901-f7f4-80111f75fc23.png)

###4-4. **[PowerApps]** アイコン をクリック後、**フィールド[メール]** にチェックを入れ、PowerApps ビジュアルの **[Choose app]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/5f168204-d1ea-3064-3cac-9f2f2a09f41c.png)

###4-5. PowerApps アプリの一覧が表示されるので、作成したアプリ **[QiitaTest]** を選択して **[Add]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/8d32f9fa-a7c6-d754-57dc-9d8bb31d5b12.png)

この画面が表示されたら **[Skip]** をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/eb48efe3-fa57-68a5-6f5c-8c9aeade0f77.png)

###4-6. テーブルを追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/8a49e1ea-0692-0d84-8df8-ab415c1675c4.png)
**[視覚化]** の **[テーブル]** をクリック、**[メール]**、**[日付]**、**[名前]** をクリックする
さきほどテストで飛ばしたデータが表示される

###4-7. テーブルをお化粧する（お化粧はお好みで色々とイジってみてください）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/3db49328-63f2-b769-80c7-98461cf46e6d.png)
真ん中の **[書式]** (通称 **[ローラー]**) をクリックして、プロパティを表示させ、以下の通り設定
**スタイル：** [1行おきに色付け]
**列見出し：** テキストサイズ = 12
**値：** テキストサイズ = 12
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/1cefff43-6880-dd26-a437-6ef12ec882fa.png)
テーブルがこんな感じになる

###4-8. ためしにデータを入力して **[送信]** ボタンをクリック！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/5a6e2c2c-2998-37e2-c01f-2557e1d8d6ff.png)
画面上部の **[最新の情報に更新]** をクリックすると、テーブルにデータが追加されれば、正常に動作をしている
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/f83d2706-2f65-f92d-3ee2-8f99645c3471.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/b785aeaa-6544-5141-d538-9e84269b23f9.png)

###4-9. 忘れずにレポートを保存しておく
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/4b13a5a9-a3a9-529a-eb33-a2e8c6dd489e.png)
レポート名を入力（ここでは QiitaTest）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152946/32807c3f-8178-f391-adc7-042414569ee5.png)

#まとめ
お疲れ様でした！！！！！
今回は

1. Power BI でストリーミングデータセット作成
2. Flow で PowerApps ⇒ Power BI を作成
3. PowerApps でアプリを作成
4. Power BI でレポートを作成し、PowerApps カスタムビジュアルを使用して、アプリを張り付け、動作確認

までやりました。

初めてやられた方は、途中の操作の意味がよくわからなかったという方もいらっしゃるでしょう。
何はともあれ動くものができたのであれば、OK です。振り返ってみて、手順の意味を考えてみてください。もう一度最初からやってみて、いろいろと試してみるのもアリだと思います。より理解が深まれることでしょう。

さて、[次回（第3回）](https://qiita.com/yugoes1021/items/41b7d81ea3cff1f6ca22)は、今回作成したレポートにさらにもう一つ張り付けるための PowerApps アプリを作成し、出来上がったものを Power BI のダッシュボードに張り付けます。
ダッシュボードに張り付けることで、何がよいのか？想像してみてください。

それではまた[次回](https://qiita.com/yugoes1021/items/41b7d81ea3cff1f6ca22)まで！！