【Microsoft Power Platform】ノーコーディングでオンプレミス環境を自動監視・通知・管理するアプリケーションを作成

#はじめに
本記事は以下の記事の続きとなります。
[【Microsoft Power Platform】Power AppsでNoCodeでアプリ作成](https://qiita.com/kento_gm/items/b912e72f344b950afda7)
前回は[ノーコード・ローコードのあれこれ](https://qiita.com/kento_gm/items/34c46a9bc6b3017c9345)で紹介したプラットフォーム、ツールの中からMicrosoftのPower PlatformサビースであるPower Appsを利用して簡単な出欠確認アプリを作成しました。
今回はPower Platformの`Power Apps`だけではなく`Power Automate`、`Power BI`も連携したアプリケーションを作成します。
各サービスの説明等で間違いがあればコメントしてくださると嬉しいです。

#Power Platformとは
Power PlatformとPower Appsは前回説明したので割愛

## Power Automateとは
[概要](https://docs.microsoft.com/ja-jp/power-automate/getting-started)
お気に入りのアプリとサービス間の自動ワークフローを作成し、ファイルの同期、通知の受信、データ収集などを行うことができ、わずかなコード(Excelで使用する関数等)でワークフロー、プロセスを自動化することを目的としたプラットフォームサービスです。

### 5種類のフローについて
Power Automateで作成するフローは大きく分けて以下の5種類に分けれます。

- [自動化されたフロー](https://docs.microsoft.com/ja-jp/power-automate/get-started-logic-flow)  
【ユースケース】  
他サービスのイベントによってトリガーを設定することで、1つまたは複数のタスクを自動的に実行するフローを作成できます。  
**クラウドまたはオンプレミス(windows環境のみ)のサービス向けの150を超えるコネクタ(データソース)を利用できます。**  
※メール通知やスプレッドシート更新など
- [ボタンフロー](https://docs.microsoft.com/ja-jp/power-automate/introduction-to-button-flows)  
【ユースケース】  
モバイルデバイスでいつでも、どこからでも繰り返しタスクを実行できます。  
**ボタンUIをPower Automateで作成可能でユーザスタートのタスクフローを作成できます。**
- [スケジュールされたフロー](https://docs.microsoft.com/ja-jp/power-automate/run-scheduled-tasks)  
【ユースケース】  
スケジュールに合わせて 1つまたは複数のタスクを実行するフローを作成できます。
- [業務プロセスフロー](https://docs.microsoft.com/ja-jp/power-automate/business-process-flows-overview)  
【ユースケース】   
ユーザーが実行することで求められる結果を導く一連の手順を定義できます。  
**人的プロセスの手助けを行い、ステージとステップで作業手順を管理することができます。**  
※承認フロー等を作成できます
- [UIフロー(プレビュー)](https://docs.microsoft.com/ja-jp/power-automate/ui-flows/overview)<font color="Red">　2020年4月2日から一般提供開始</font>  
【ユースケース】  
レガシーソフトウェアの手動手順を記録し、再生を自動化できます。  
**自動化にAPIを利用できないデスクトップとWebアプリケーションをRPAのように自動化できます**

本記事では、`自動化されたフロー`でフローを作成していきます。

###コネクタについて
コネクタは様々なクラウドやオンプレミス環境のサービスに接続できます。 
利用できるコネクタについて[概要](https://docs.microsoft.com/ja-jp/connectors/connectors)はこちら 
コネクタ概要ページの左側に各コネクタの詳細情報ページが一覧としてあります。 
####少しだけコネクタの紹介  
- [Chatterコネクタ](https://docs.microsoft.com/ja-jp/connectors/chatter/#when-a-post-is-added-to-a-group)  
- [Redmineコネクタ](https://docs.microsoft.com/ja-jp/connectors/redmine/#getissueresponse)
- [Googleシート](https://docs.microsoft.com/ja-jp/connectors/googlesheet/)
- [ファイルシステム（オンプレミス）](https://docs.microsoft.com/ja-jp/connectors/filesystem/)

などなど 

###料金プラン
[公式](https://japan.flow.microsoft.com/ja-jp/pricing/) 
非公式だがプラン等を詳しく説明してくれている記事 
https://memo.tyoshida.me/power-platform/power-automate/power-automate-ui-flows-rpa-license-price/
基本的には以下の2種類のプランがある。 

- ユーザーごとのプラン  
１ユーザーあたり月 15ドルとなる。また、手動RPA(UIフロー)を含む場合は 40ドル
- フローごとのプラン  
組織全体で5つフローごとに 500ドル/月

※無料試用版
Power Appsの試用版は 30 日間だが、Power Automateの場合、90日間となっている。 
Power Apps コミュニティプランはPower Automateも同じプランとなり無料で確認できる。 

**今回はコミュニティプランを使用する**

##Power BIとは
[概要](https://docs.microsoft.com/ja-jp/power-bi/fundamentals/power-bi-overview) 
Power BIを利用することでクラウド上のデータソースや、オンプレミスのデータソースに接続してデータの視覚化や検出、また視覚化したデータ(Report)をその他ユーザに共有することが簡単にできます。 
基本的には以下の３つの要素で分析情報を作成、共有、使用を効率よくできるように設計されています。

- [Power BI Desktop](https://docs.microsoft.com/ja-jp/power-bi/desktop-what-is-desktop) → Windowsのデスクトップアプリケーション
- [Power BI サービス](https://docs.microsoft.com/ja-jp/power-bi/power-bi-service-overview) → SaaS(サービスとしてのソフトウェア)サービス
- モバイル デバイス → Windows、iOS、Android デバイス向け

また、要素としてもう一つ[Power BI Report Server](https://docs.microsoft.com/ja-jp/power-bi/fundamentals/power-bi-overview#on-premises-reporting-with-power-bi-report-server)というのがあります。
こちらは、Power BI Desktopで作成したレポートを別環境のオンプレミスのレポートサーバーに発行できます。

本記事では`Power BI サービス`のみを使用します。

###料金プランとライセンスに関して
下記２点の料金についてこちらを参照 → [料金情報](https://powerbi.microsoft.com/ja-jp/pricing/)

- ユーザごと  
【Power BI Pro】  
Power BI Pro ユーザーのコンテンツを使用して共同作業、共有したりできます。アプリ ワークスペースへのコンテンツの発行、ダッシュボードの共有、ダッシュボードとレポートのサブスクライブを行うことができます。  
【Power BI Free】  
無料ライセンスを持つユーザーは、Power BI Premium 容量に割り当てられたワークスペース内のコンテンツを使用やマイ ワークスペースに含まれている個人用コンテンツのために Power BI サービスの一部機能にアクセスしたりできます。   
詳しくは以下を参照  
・[個人として Power BI にサインアップする](https://docs.microsoft.com/ja-jp/power-bi/service-self-service-signup-for-power-bi)  
・[Power BI Pro のユーザー ライセンスを購入して割り当てる](https://docs.microsoft.com/ja-jp/power-bi/service-admin-purchasing-power-bi-pro)
- [Power BI Premium](https://docs.microsoft.com/ja-jp/power-bi/service-premium-what-is)  
一貫したパフォーマンスを実現し、より大規模なデータ ボリュームをサポートするための、専用の容量が用意されています。 また、Pro ユーザーが広範囲にコンテンツを配布し、Power BI Pro ライセンスを持たないユーザーでもそのコンテンツを閲覧できるようにすることも可能。 


※Power BI 管理者であれば、以下のライセンスを参照
[組織でのPower BI のライセンス](https://docs.microsoft.com/ja-jp/power-bi/service-admin-licensing-organization)

本記事ではユーザごとのPower BI Pro試用版を利用します。
試用期間が終わるとPower BI freeに変更されます。

# 実装するアプリケーション
今回実装するアプリケーションはオンプレミス環境のファイルを自動監視・通知・管理するアプリケーションです。
流れとしては以下です。 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/05006154-7655-bb5e-b7ca-700af7715b07.png"> 
1. 何らかのオンプレミスシステムでError、Warningログファイル(csv)が指定されたフォルダに出力
2. 指定されたフォルダ内のcsvファイル追加・変更のトリガーで該当ファイルのデータを取得
3. 取得したデータをもとにメールの通知
4. 取得したデータをもとにGoogleスプレッドシートにデータを追加
5. 取得したデータをもとにGoogleドライブにファイルを保存
6. Power BIデータセットにデータが追加されデータ分析でレポート更新
7. Power Appｓのアプリでデータ対応管理をデータ更新で行う

アプリケーション実装については説明が長すぎるので、成果物見るだけでいいよって方は以下のとこまで飛んでください。
[成果物について](#成果物について)

# 環境の準備

##Power Automateへのアクセス
以下を参考にサインアップ、またはサインインをする。
※私は前回Power Appsでサインアップしていた為、サインインでアクセスしました。
[Power Automate にサインアップ・サインイン](https://docs.microsoft.com/ja-jp/power-automate/sign-up-sign-in)

##Power BIへのアクセス
以下を参考にサインアップ、またはサインインをする。
[Power BI にサインアップする](https://docs.microsoft.com/ja-jp/power-bi/service-self-service-signup-for-power-bi)

##オンプレミスデータゲートウェイの設定
[オンプレミス データ ゲートウェイ](https://docs.microsoft.com/ja-jp/power-automate/gateway-reference)は、オンプレミスのデータと安全に接続するためのものです。オンプレミス データ ゲートウェイをオンプレミスの環境にインストールすることで、クラウドサービス(Power BI、Power Apps、Power Automate、Azure Analysis Services、Azure Logic Apps)とデータのやり取りを行うことができます。
【注意事項】
Microsoftサービスですので、Windowsマシンのオンプレミスデータしか扱えません。

また、最小要件としては以下となっています。

- .NET Framework 4.6 (ゲートウェイリリース (2019 年8月) 以前)
- .NET Framework 4.7.2 (ゲートウェイリリース2019年9月以降)
- Windows 8 または64ビットバージョンの Windows Server 2012 R2 の64ビットバージョン  
※本記事ではWindows10を使用して動くことが確認できました。

###【オンプレミスデータゲートウェイ手順】
[インストールについて](https://docs.microsoft.com/ja-jp/data-integration/gateway/service-gateway-install)を参考にしました。
####①インストール
**インストールについて**のリンク先で**Standard ゲートウェイ**を使用するオンプレミス環境にダウンロードしてインストールします。
####②設定
インストール完了後、Power Automate、Power Appsで使用している組織アカウントでサインインを行います。 
サインイン後に、**「このコンピュータに新しいゲートウェイを登録します。」**を選択します。 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d6430fc4-5ca6-f7f0-37be-a2922dca89fc.png"> 
その後、ゲートウェイを設定するマシンのアカウント情報を聞かれるので入力。 
**Service account** → Windowsにログインするユーザネーム 
・ ローカルユーザーなら [マシン名\ユーザー名] 
・ ドメインユーザーなら [ドメイン名\ユーザー名] 
**Password** → Windowsにログインするパスワード 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/2d8b79f2-5ef8-8b2f-6d21-36b92f95d896.png"> 
入力後、構成画面で以下の画面のように任意な内容で入力して設定は完了。 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/7336baad-7817-c10f-5f52-216e963e0b14.png"> 

※注意
構成したゲートウェイのリージョンと使用するサービスのリージョンが同じでなければ連携出来ないため確認する必要がある。
今回はPower Automateを使用するため、以下のリンク先で確認できる。
[Power Automateの管理ポータル画面](https://admin.flow.microsoft.com/environments)
もし、リージョンが異なれば以下の2点のどちらかの方法で対応する。
・Power Automateの管理ポータルで新規の環境を作成する。
・ゲートウェイの構成設定でリージョンをPower Automateに合わせる　
私の場合は以下のように、ゲートウェイの構成設定でリージョンを変更 
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d67a3057-1a26-8bea-c92b-7cf9db138418.png"> 


#アプリケーション作成
##Power Automateでフロー作成
以下4段階に分けて説明します。 
①オンプレミス環境ファイルの追加・変更をトリガーにしてメール通知 
②追加・変更したファイルをGoogleドライブに保存 
③取得したファイル(CSV)のデータ整形 
④整形したデータをスプレッドシートとPower BIのデータセットに追加 
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/3675d33d-b0b3-6a81-cabe-a0e7e1570037.png"> 
###①オンプレミス環境ファイルの追加・変更をトリガーにしてメール通知
1. [Power Automate](https://japan.flow.microsoft.com/ja-jp/)にアクセスします。  
2. アクセス後`+作成`で`自動フロー`を選択する  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/20edb2e0-e3a8-3a6b-7cba-71b07f318d43.png">  
3. 自動フロー作成画面で`フロー名`と`フローのトリガー`を設定する。  
フロートリガーの検索欄で`ファイル`で検索してファイルシステムのトリガーをチェックして作成する。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dcd74e3c-7751-3555-2b31-85e7ed1800a0.png">  
**ファイルが追加または変更されたとき**のトリガーは以下となります。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dab7e833-2bda-eebf-edf3-5b7d09882e20.png">  
4. メール通知する相手の管理  
今回は適当な場所にGoogleスプレッドシートで管理します。以下のように作成。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/9b514f3f-9a86-990b-1928-b063daee022f.png">  
5. `3.`で作成したフローでファイルトリガーの設定をする。  
フロー編集画面で以下のファイル接続設定が表示されているので入力する。  
`接続名`：任意  
`ルートフォルダ`：監視したいフォルダのルート  
`ユーザ・パスワード`：接続するオンプレミスのWindowsログイン情報  
`gateway`： 環境の準備で構成したgatewayがデフォルトで設定されています  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/22ebfcdb-fa73-66b5-0572-a59e3ec86503.png">  
作成後以下の画面で設定を入力する。 
オンプレミス環境がオンライン状態であればファイルシステムでルートを選択できます。
ファイル数は10で設定する。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/5653850f-25f5-53c0-c67e-5ab1916598ec.png">  
6. 追加・変更されたファイルデータを取得するフローを追加する。  
`+新しいステップ`をクリックするとアクション選択画面がでるので以下の`ファイルコンテンツを取得`を探して選択する。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/8fa7c04d-b60c-6fee-585f-3b850b4f0f48.png">  
`ファイルコンテンツを取得`のアクション設定で、以下の`動的コンテンツ・関数`選択入力画面で`ファイルの一覧Path`を選択する。  
※ここで選択する`ファイルの一覧Path`はファイルが追加・変更したトリガーのアクションで出力されるデータとなる。これ以降フローで出力されたデータは動的コンテンツで使用できるようになります。  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/1a2d1cd5-2b67-da9f-755f-0d7ec69a7f05.png">  
7. `+新しいステップ`でGoogleスプレッドシートから複数行のデータを取得するアクションを設定する。  
`6`と同様にアクションから`複数行を取得`を選択する。  
以下アクションの設定内容となる。`4`で作成したスプレッドシートからメールアドレスを取得する。  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/b6a0d651-453b-1a04-e2f0-580b1d2d95fa.png"> 　
8. スプレッドシートから取得したメールアドレスにメールするアクションを作成する。  
`7`で取得したメールアドレスは複数の可能性があるので複数回に分けてメール通知する必要がある。  
ポイントとしては以下2点となる  
・forのように繰り返しができる`Apply to each`のアクション設定  
・`Apply to each`内でGmailの送信ができる`メール送信(V2)`のアクション設定  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/e3120131-3f2a-4de6-fbfb-88951e614493.png">     
【入力箇所解説】  
`以前の手順から出力を選択`：動的コンテンツからスプレッドシート複数行取得アクション出力値を設定  
`終了`：送信先メールアドレスを設定(動的コンテンツのスプレッドシート`メールアドレス`を設定)  
`件名`：メールタイトル  
`ボディ`：メール本文(動的コンテンツを使える)  
`添付ファイル名`：動的コンテンツからファイル名を設定  
`添付ファイル コンテンツ`：動的コンテンツから`6`のアクションで取得されるファイルコンテンツを設定  
`添付ファイル コンテンツの種類`：ファイルの種類を設定(今回はCSVファイル)  
※その他は、デフォルトで問題なし。  
**また、Gmailのアクションを選択した場合、Googleアカウントのサインインと許可が必要となります。**  

###②追加・変更したファイルをGoogleドライブフォルダに新規で保存
1. ①のフローに`+新しいステップ`で`Goolgeドライブにファイル作成`アクションを追加する。    
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/58503e56-b63e-d493-781e-0f4916fc39b8.png">    
`フォルダーのパス`： ファイルを保存するドライブのルート  
`ファイル名` : `replace(triggerBody()?['Name'],'csv','xlsx')`  
`ファイルコンテンツ`： 動的コンテンツからファイルコンテンツを選択  
**【フォルダ名の解説】**  
ドライブに保存するファイルをcsvからExcelに変更して保存する関数を設定している。  
関数は動的コンテンツと式があるので式で作成する必要がある。  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/b81f1de0-e0dd-f7e5-bff4-35066dea18a1.png">   
`triggerBody()?['Name']`： トリガーイベントで出力されたName値（ファイル名）  
`replace(triggerBody()?['Name'],'csv','xlsx')` ： ファイル名の`csv`という文字列を`xlsx`に置き換える  

###③取得したファイル(CSV)のデータ整形
1. 取得したファイルデータをjsonに整形します。 
整形には`作成アクション`と`選択アクション`を設定します。  
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/a735f832-19f7-b9d0-89fd-424cdd332c3f.png">  
**【作成アクション解説】**  
作成アクションでは入力時に関数を用いて、データを整形するのに用いられます。以下が今回使用する関数です。  
`split(body('ファイル_コンテンツの取得'),decodeUriComponent('%0A'))`  
こちらは、改行コードごとに文字を区切って配列にしています。要はcsvデータのRowsを一行づつ配列の文字列にしていきます。
 
```
例)
CSVファイル
date,time,status,message
2020/04/01,12:10:01,Error,テストメッセージ
2020/04/01,12:10:01,Error,テストメッセージ
↓↓↓以下のように一行ごと文字列にした配列を出力する↓↓↓
[
"date,time,status,message",
"2020/04/01,12:10:01,Error,テストメッセージ",
"2020/04/01,12:10:01,Error,テストメッセージ"
]
```

**【選択アクション解説】**
作成アクションの出力された値を該当の変数名とマッピングされたjson形式のデータに変更します。
開始で設定している関数は以下です。
`range(1,sub(length(outputs('作成')),1))`
sub関数では作成アクションの配列の個数から第２引数の数値分引いています。
range関数は第1引数から第２引数までの数値で配列を作成しています。
マップの設定は、それぞれ左側が変数名で右側が値を設定しています。
左側の関数は、CSVの列名を取得するように設定しいます。
右側は各Rowデータで`、`で区切って配列にした値を左側の変数名に紐づくように設定しています。

```
例)
作成アクションの出力値
[
"date,time,status,message",
"2020/04/01,12:10:01,Error,テストメッセージ",
"2020/04/01,12:10:01,Error,テストメッセージ"
]
↓↓↓以下の様に変更して出力する↓↓↓
[
  {
    "date": "2020/04/01",
    "time": "12:10:01",
    "status": "Error",
    "message": "テストメッセージ"
  },
  {
    "date": "2020/04/01",
    "time": "12:10:01",
    "status": "Error",
    "message": "テストメッセージ"
  }
]
```
###④整形したデータをスプレッドシートとPower BIのデータセットに追加
③で整形したデータをスプレッドシートに追加します。 
また、Power BIのデータセットにデータを追加できるにようにPower BI側で設定してフローにアクションを追加します。  

**【スプレッドシートに行を追加】** 
`①の４`で作成したスプレッドシートに以下のようシートを追加します。 
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/a4a1a40b-6ae0-e3db-442e-65c65d07d019.png"> 
作成後、フローの続きとして以下のアクションを追加する。 
③で整形した配列をforで繰り返して一行ごと追加する。 
<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/758a361d-9f73-2f23-3251-21b8eac79ff9.png">  
`現在のアイテム`は以下のようなデータとなっており、スプレッドシートの列名とjsonの各ObjectNameが紐付くようにデータが追加されます。 

```
{
    "selectYear": "2019",
    "selectMonth": "04",
    "selectDay": "04",
    "fixFlag": "0",
    "selectTime": "08",
    "date": "2019/04/04",
    "time": "08:01:55",
    "status": "Error",
    "massege": "bug test massege内容はいろいろw"
  }
```

**【Power BIのデータセットに追加】**  
1. Power BIでデータセットの設定を行う
[Power BI](https://app.powerbi.com/home)にアクセスして以下の流れでストリーミングデータセット作成画面を開きます。
・`マイワークスペース`→`データセット`→`+作成`→`ストリーミングデータセット`
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/ee29d508-654f-f8b5-a8bb-3d13ef5294a3.png"> 　
新しいストリーミングデータセットで`API`を選択します。
これで、APIを利用してデータセットにデータを追加できるようになります。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/234d0d8f-0b85-0382-ea77-dd2f27cc3375.png"> 　
次に以下の画面で`データセット名`で`ストリームからの値`(RequestBody)を設定して作成をおこないます。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/9e89c20a-c7c3-851e-24cf-4dd09817313c.png"> 
2. データセットに追加するアクションを設定
スプレッドシートに追加したアクションのあとにデータセットのアクションを追加します。
以下のアクションを設定します。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/27f89f53-1ce4-9a28-1d73-07e63421b627.png">
`ワークスペース`、`データセット`はPower BIで作成したものを設定。
`テーブル`はデフォルトでRealTimeDataを設定 
`payload`については関数で③の選択アクションの出力値を設定する。以下のように関数を設定
・`body('選択')`　

以上でフローを保存する。

##Power BIでデータセットからレポートの作成
データセットからレポート作成する場合、データセットにデータが存在している必要があるのでのPower Automateで作成したフローを一度実行します。
以下の内容のcsvを作成して`ファイルが追加・変更されたとき`のトリガーが監視しているフォルダにcsvファイルを追加します。

```:log_20190401.csv
date,time,status,massege
2019/04/01,17:01:55,Error,bug test massege内容はいろいろw
2019/04/01,18:01:55,Error,bug test massege内容はいろいろwwk
2019/04/01,18:01:55,Warning,bug test massege内容はいろいろww
2019/04/01,19:01:55,Warning,bug test massege内容はいろいろwwk
```
フローが完了すると、以下のフロー詳細画面で正常に実行されたか確認できます。 
<img width="900" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/c9021a74-3720-bca4-4b10-5361b7d4be35.png"> 
また、実行の開始列の日付を選択すると以下の様にフローの各アクションの実行ログが確認できます。 
<img width="900" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dc040aed-be27-a2b3-9d3c-ea6f0a125bd2.png"> 
正常に実行できたことが確認できたらレポートを作成します。 

###①Power BIのレポート作成
1. データセットにデータが追加されると、Power BIの`ワークスペース`→`データセット`の画面でレポートが作成できるようになっています。  
クリックしたらレポート作成画面が表示されます。  
<img width="900" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/0e555cca-c519-9538-0fd1-023d5d93215c.png">  
2. レポート作成画面でデータセットのデータを確認するテーブルを作成。  
以下のように作成します。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/b2e40274-0d11-d8c9-d0b5-ef9d7f50ab66.png">  
作成すると以下の様にデータが表示されると思います。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/b824ad55-1ab9-3e0e-dd30-56a697170680.png">  
3. テーブルに表示するデータの抽出範囲を指定する為スライサーをレポートに追加  
以下のようにレポートに作成する。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d33868ea-1184-4bec-ffbe-75b07a3f0ab0.png">  
作成したスライサーで以下のようにドッロップダウンを選択する。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/f0044623-102e-76eb-7aee-c261d100e722.png">  
`selectDate`だけではなく`selectMonth`、`selectDay`も以下のように作成することで、条件指定でテーブルにデータを表示できます。  
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/63508283-7267-2ecd-d116-55b65e775399.png">  
4. Power Appsをレポートに追加するためアプリを作成  
レポートに追加するためPower Appsでアプリを作成する。  
作成方法は前回の[【Microsoft Power Platform】Power AppsでNoCodeでアプリ作成](https://qiita.com/kento_gm/items/b912e72f344b950afda7)を参考にしてください。  
`Power Automateでフロー作成`の`③`で作成しているスプレッドシートを元に作成する。  
アプリは、以下のような機能となっています。  
**【アプリ概要】**  
・ホーム画面  
こちらではファイルシステムトリガーで取得したデータを一覧で確認できます。また、「対応済み」にチェックをすると担当者が「対応済み」にしたデータのみ確認できます。  
<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/3f6c11bc-a23d-f53b-e3cf-d60bb37e35ce.png">  
・詳細画面  
各データの詳細を確認できる画面です。  
対応完了はについては`未対応 ： ０`、`対応完了 ： 1`のようにしています。  
<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/52fa4530-b7b7-769b-c8c0-43a42a4d72b2.png">  
・更新画面  
この画面で更新を行う。基本は対応完了のみを更新する。  
<img width="200" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/c7f2babf-08d0-b1c2-a9ca-51159bdb4f9b.png">  
5. Power AppsアプリをPower BIレポートに追加する。  
以下のようにPower Appsの部品を追加する。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d94c43d6-54f6-a4eb-95f6-5611347f0ff3.png">  
レポートに追加されたPower Appsでアプリを以下のようにして呼び出す。  
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/37ae5e17-4460-df9a-9d54-284f452c5ef7.png">  
呼び出せたら以下のように位置やサイズを調整する。  
<img width="800" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/c964ddb2-360f-c803-ea9b-ed30465e6f27.png">  
6. 「**月分析**」と「**日分析**」のレポートを作成する。  
月分析は`年`と`月`を指定することで1ヶ月内の日付ごとのデータを表示します。  
日分析は`年`と`月`と`日`を指定することで指定日付の時間ごとのデータを表示します。  
**【月分析】**  
・新規のレポートページを追加してページ名を変更(1〜5で作成したレポートページ名はアプリケーションとする)   
・アプリケーションページのスライサーと同じ様に追加  
・日付ごとのグラフをレポートに作成  
<img width="950" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d8b8fbed-0aa8-1b46-4ca8-f2f89987a597.png">    
**【日分析】**   
・スライサーをレポートに追加する  
・時間ごとのグラフをレポートに追加する  
<img width="950" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/dcdad55d-1ffc-d3d4-31d1-3425068787ec.png"> 

**レポートの作成が完了したら保存します。**
以上で、アプリケーション実装完了

#成果物について
今回、ファイルシステムトリガーが監視するオンプレミス環境で出力されるログファイル(csvファイル)は2019/05/01〜2019/05/05を想定しています。
また、一日一つのログファイルが出力される想定のアプリケーションですが、今回だけはlog_20190501.csvに2019/05/01〜2019/05/05分のデータを準備して手動でフォルダに置きます。

```:log_20190501.csv
date,time,status,massege
2019/05/01,17:01:55,Error,bug test massege Error
2019/05/01,18:01:55,Error,bug test massege Error
2019/05/01,18:01:55,Warning,bug test massege Warning
2019/05/01,19:01:55,Warning,bug test massege Warning
2019/05/02,10:01:54,Error,bug test massege Error
2019/05/02,11:30:00,Error,bug test massege Error
2019/05/02,15:01:55,Warning,bug test massege Warning
2019/05/02,15:45:55,Warning,bug test massege Warning
2019/05/02,16:01:55,Error,bug test massege Error
2019/05/02,17:01:55,Error,bug test massege Error
2019/05/03,10:01:54,Error,bug test massege Error
2019/05/03,11:30:00,Warning,bug test massege Warning
2019/05/03,15:01:55,Warning,bug test massege Warning
2019/05/03,15:45:55,Warning,bug test massege Warning
2019/05/03,16:01:55,Warning,bug test massege Warning
2019/05/03,17:01:55,Error,bug test massege Error
2019/05/04,18:01:55,Error,bug test massege Error
2019/05/04,18:01:55,Warning,bug test massege Warning
2019/05/05,10:01:54,Error,bug test massege Error
2019/05/05,10:21:24,Error,bug test massege Error
2019/05/05,10:22:24,Error,bug test massege Error
2019/05/05,10:30:00,Warning,bug test massege Warning
2019/05/05,11:22:24,Error,bug test massege Error
2019/05/05,11:30:00,Warning,bug test massege Warning
2019/05/05,14:01:55,Warning,bug test massege Warning
2019/05/05,14:45:55,Warning,bug test massege Warning
2019/05/05,15:01:55,Error,bug test massege Error
2019/05/05,15:01:55,Error,bug test massege Error
2019/05/05,16:01:55,Warning,bug test massege Warning
2019/05/05,16:01:55,Warning,bug test massege Warning
2019/05/05,17:01:55,Error,bug test massege Error
```
監視しているフォルダでファイルが追加・変更されると設定したオンプレミスゲートウェイをかいしてPower Automateのフローが実行されます。
ファイルを追加すると以下の4点が自動で実行されます。

- メール通知
- スプレッドシート更新
- ドライブに追加
- データセットに追加されレポートが更新

## Power Automateフロー実行結果
**メール通知**
追加されたファイルが添付されメール通知されていることを確認できます。  
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/59ad8b3b-96d0-42c3-8d8d-eb655ae6b97f.png"> 
**スプレッドシート更新** 
スプレッドシートにデータが更新されていることを確認できます。  
<img width="900" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/ddf61f09-6c7d-e0a2-96cb-8a9124f0a47a.png"> 
**ドライブ追加** 
ドライブにファイルが追加されていることを確認できます。 
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/d33180df-3672-06f8-70b8-2508d5ceb833.png"> 
**データセットに追加されレポートが更新** 
Power BI で作成したレポートを開くとデータが追加されてレポートに反映されていることが分かります。 
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/17eae406-71f2-bef4-d367-4b295b90472d.png">　
 
## Power BIで更新されたPageについて
### 1. アプリケーションのページ
オンプレミスのcsvで出力されたデータが自動でPower BIのデータセットに追加されています。
`selectYear`、`selectMonth`、`selectDay`のスライサーで日付別でテーブルに表示させることが可能となっています。
また、レポート画面でPower Appsのアプリを使えるのでレポートページで対応済みの登録ができます。
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/225af175-5964-03d0-00f9-d9a9da5ee3e3.png">　

### 2. 月分析のページ
`selectYear`、`selectMonth`のスライサーで指定した月のデータをグラフで確認できます。
グラフは、データが増えても良しなに動的表示をしてくれます。
ただ、データとして無い日付は件数が0ではなく、グラフの日付軸に表示されません。
※調べてみましたがグラフにユーザが日付を選択して配置する方法はありませんでした。
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/529be6b1-2c17-d666-a400-4d568fbb2799.png">　

### 3. 日分析のページ
各スライサーで指定した日付の時間別件数がグラフで確認できます。
こちらも、データセットにデータとしてない時間の値はグラフに表示されません。
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/44509f93-4fde-a28d-89f5-5fead0e03064.png">　

## Power Appsのアプリケーション実行について
本アプリケーションではスプレッドシートのデータと同期をしており、アプリケーションで対応完了を更新して管理できるアプリとなっています。
こちらはPower BIのレポートに追加していますが、モバイルアプリとしても利用が可能となっております。  
<img width="700" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222088/70320cd1-9eed-c84b-bb6d-f17f4968a782.png">　

#既存開発との比較
今回もノーコーディングで実装を行いまいしたが、実際コーディングをするとどうなるのか...
例えば、メール通知部分で比較してみます。
メール通知をコーディングする場合は、Node.jsのexpress等でAPIを作成してメール通知する場合はサードパーティのサービスを利用して通知を行います。また、実行する環境としてはサーバレスにするとしてもGoogle Cloud Platform（GCP）やAWSのサービスで作成を行います。そして、メールの内容等をjsonデータで作成してメール通知を行います。

述べたようにコーディングだけではなく、サードパーティのサービスの設定や実行する環境を考えなければなりません。Power Automateのように一つの作成管理画面(サービス)で完結できないので、作業工数は多くなります。

ただ、今回利用したPower Platformのサービスは外部向けや、同じ組織内アカウントのユーザと共有等するプランにすると料金がかかります。こちらの料金はGCPやAWS等で実行環境を管理するより料金が高くなってしまいます。
サービスによりますが、今回は利用したPower Platformは作業工数は少なくできるが料金のコストが高いと感じました。

また、Power Platformだけ言えることでは無いですが、このようなサービスが終了する場合を考える必要があります。現在、このような問題も視野にいれてノーコーディングのサービスで作成した処理をコードに落とせるノーコード・ローコードのサービスもあります。ちなみに、Power Automateのフローでもアクション設定をコードにして閲覧することも可能となっています。
今後、開発スピードを上げるのも重要ですが、サービス終了した場合など移行がしやすかったりなども考えてサービスを選択する必要があります。

# まとめ
今回はPower Platformのサービスをそれぞれ連携させたアプリケーションを作成しました。
Power Autmateのフローで使えるサービス(コネクタ)に関して何ができるのかや実際に使う際の制限を調査するのに時間がかかった感じがします。実際にフローを作成する際は、動的コンテンツ等で選択したりするので効率よく作成できました。ただ、アクション設定の項目が同じものを使おうとしているのに使えなかったり等、予想に反することがあるので設定を修正しないといけない場合がありました。こちらは管理に関しては少し難しいと思いました。
また、オンプレミス環境のレガシーなシステムに簡単に連携でき、RPAも実装が可能ですのでちょっとした機能強化で業務改善を実現できそうでした。
Power BIについては、今回は簡単なレポートを作成しましたが、他の方の[Power BIのレポート集](https://qiita.com/yugoes1021/items/e1ab631d0b6942508844)という記事では様々なレポートを作成されていてアイデアがあれば色々なレポートを作成できそうだと思いました。
次回は、まだPower Platformのサービスで紹介ができていないPower Virtual Agents （ノンプログラミングBot作成サービス）について書きたいと思います。