[Power BI Tips] RSS フィードで取れるデータを Power BI レポートにしたいと思った時の Power Automate の使い方

# RSS フィードって便利
はい、お久しぶりです。**RSS** フィードって便利ですよねー。何かの情報を定期的に取得できます。身近なところだとニュースとかブログなどで定期的に新しい情報提供されるのに使用されています。**Outlook** などで登録しておくと、購読することができます。

## Outlook で **RSS** フィードを追加する場合
RSS フィードの URL は、例えば Power BI Blog の場合だと https://powerbi.microsoft.com/ja-jp/blog/ を開いて
画像右下の [購読] をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b39eee60-1ab4-82b8-8916-f2e23656a924.png)
画面に取得できるデータである XML が表示されるのでそれは無視して URL をコピーしておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/85af596a-827e-e8e7-5df7-9303c0be70ad.png)
[RSS のサブスクリプション] （← 環境によって名称が変わるかも。単純に RSS の場合もあります）で右クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/19f3a808-c30d-a362-7115-a6789530e89a.png)
さっきコピーした RSS フィードの URL を追加するば、定期的に新しい情報が取得できるというわけです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/36912b10-587c-18ae-0b62-5f8b2f8a76c4.png)

さて、こんな感じで使用するのが普通ですが、見方を変えるとこれは一種の **API** とも言えるわけです。
アクセスすることで、その時の最新の 10 件程度が取得できます。

## API みたいなもん...？ってことは当然やりたいことはひとつ
そう、定期的に取得して、情報を溜めておきたくなるわけです。なんのためにですって？
そりゃあもちろん、データ化して、見るんですよ、その傾向を。そして、いつもで過去のデータにアクセスできるようにしておくわけです😎

というわけで、今回のテーマはタイトル通り、**RSS** フィードで取れるデータを **Power BI** でレポートにしたいと思った時の Power Automate の使い方をご紹介します。
が、先に一言お断りをしておきます。**Power BI** も **RSS** フィード用のコネクタは持っていますが、これでは目的は達成できません。理由は以下二つ。

1. **RSS** フィードは常に最新の 10 件程度しか取得できない
2. **Power BI** は基本的に毎回全件更新しちゃう（差分更新は **Power BI Premium** の機能）

以上、2つの理由から、**Power BI** だけでは目的は達成できません。ではどうするか？
データを取得する（**RSS** フィードを呼び出す）手段とデータを溜める場所が必要です

**RSS** フィードを呼び出す手段： **Power Automate**
データを溜める場所： **One Drive for Business** 上の **Excel** ファイル

これら二つで行きます。なお、データを溜める場所は皆さんの好きな場所にしてください。Microsoft 365 (Office 365) 付属の Power Automate だとプレミアムコネクタが使用できないので、他の代替場所だと **SharePoint** フォルダー、**SharePoint** リストくらいだと思います。

# ここから本題
今回は私が自身の **YouTube** チャンネル [Yugo's Room](https://www.youtube.com/channel/UCdBYN0oIDm7tDlZoZJg4Q-A) で毎週末に配信している **Power Platform Weekly News** の中で使用している **Power BI** レポートを例にとって説明します。レポートへは https://bit.ly/PP-WeeklyNews からアクセスできます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/fda16392-4663-1287-2f63-bcf2503b6d1d.png)
このレポートは以下の Power Platform の各ブログの RSS から取得したデータを溜めた Excel をデータソースにしています。

- [Power Apps Blog](https://powerapps.microsoft.com/ja-jp/blog/)
- [Power Automate Blog](https://flow.microsoft.com/ja-jp/blog/)
- [Power BI Blog](https://powerbi.microsoft.com/ja-jp/blog/)
- [Power Virtual Agents Blog](https://powervirtualagents.microsoft.com/en-us/blog/)

## Power Automate はこんな感じ
前述した通り、データは Power Automate で取得します。Power Automate には RSS フィードを呼び出して、データを取得するコネクタがあるのでそれを使います。

**すべての RSS フィード項目を一覧表示します (List all RSS feed items)**
https://docs.microsoft.com/ja-jp/connectors/rss/#list-all-rss-feed-items

できあがりのフローはこんな感じです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c7ddaad1-8974-6a83-52a0-a2b69f16a9aa.png)
前半と後半に分けます
## 前半部はこんな感じです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9b784cee-76dd-ee84-c58c-59e9e0a5fc3a.png)
前半部でやっていることは、繰り返しのトリガーで指定した時刻に動作させて、それぞれの記事件数を入れる変数を定義しています。

### トリガー：繰り返し
繰り返しのトリガーは毎日 18 時（JST）を指定してあります。これで毎日 18 時に動き出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/0cbb8355-3a2e-4914-5e9a-72d3b1bd61fc.png)
### 変数初期化 x 5
定義している変数は各記事の件数と合計を入れるための変数なので、合計5つあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/913c6a28-4557-4447-08e3-a6330112a0d0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/da4d86fc-e493-d303-5c02-54603ede997f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/e9c4b2db-05af-d462-ba47-93998137f292.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c1b2b6da-c12b-fa4f-786b-7c82fd163dbc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/3a390e49-1617-4a43-d332-2f00d746f5c4.png)
ご覧の通り、すべて **整数型** で初期値は **0** にしてあります。名前のみそれぞれがわかるようにしてあります。名前は任意で構いませんが、それぞれの用途が区別可能なようにしておいてください。
続いて後半部です
## 後半部：全体
後半部は各 RSS を取得して、Excel に書き込み、結果をメールで送信、Twitter、LinkedIn に内容を投稿しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4fc7cda9-00ca-83b5-d316-ec163ea91911.png)

上から8つ目 [Apply to each 4] までは一緒なので、一番上の Power Apps のペアを開いて見てみましょう
### RSS フィードの取得
**RSS** コネクタ の **すべての RSS フィード項目を一覧表示します (List all RSS feed items)** を選択して、RSS フィードの URL を指定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/9231fa6f-38dd-ae04-01da-b0aacb0b1c8f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/42807b1b-4223-1549-3c0f-ef4fafdae2c8.png)
### データを溜める場所の準備：今回は Excel を OneDrive for Business に保存
取得したデータを溜める場所が必要なので、今回は Excel を用意して、それを OneDrive for Business の任意のフォルダに置いておきます。
Excel の内容はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/a8198f1a-39e4-c4ac-0dfd-37aee32de315.png)

- service type
- id
- guid
- link
- title
- description
- pubDate

左から上記の列名を作っておいて **[テーブルとして書式設定]** をしておきます。
ついでにテーブルに名前を付けておくといいと思います。私は **RSS** としておきました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/52f3d848-8021-c75a-2648-6a8862e13abc.png)
ちなみに RSS はだいたい項目名が同じなので、いちどこの **Excel** ファイル作っておけば、使いまわすことが可能です。

画像ではデータが既に入っていますが、気にしないでください。このファイルを作成する際はデータはまだなくて当たり前です！
さて、このファイルを **OneDrive for Business** の任意の場所に保存してください。私は **PowerPlatform-RSS.xlsx** という名前で保存しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/faa23cd8-41a1-8f8f-996c-97a1f4effbb7.png)

### **Excel Online (Business)** の **表内に存在する行を一覧表示**
Power Automate に戻って、**Excel Online** と検索し **Excel Online (Business)** の **表内に存在する行を一覧表示** を選んでください。
ここでやりたいことは、RSS で取得したデータが既に **Excel** ファイルに存在するかチェックをすること、いわゆる存在チェックです。一行ずつキーとなると値で検索して、一致する行を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/526c20f8-2229-b7bf-3438-b96106196efd.png)
**Excel** の **id** 列に RSS の id と一致するものを指定しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/73e25516-5837-3634-4fda-fa283c7947f3.png)
上記の画像の様に、**[場所]、[ドキュメントライブラリ]、[ファイル]、[テーブル]** をご自身の環境に合わせて選択していきます。要はさっき **OneDrive for Business** に保存した **Excel** ファイルを指定するのです。
ポイントは **[フィルタークエリ]** です。

```:フィルタークエリ
id eq 'PowerApps-@{items('Apply_to_each')?['id']}'
```

### 次は条件です
**id** が一致するものを指定しているので、一致するものがあれば 1 行返ってきます。なければ 0 行です。まずは行数をチェックするために条件を使用します。
ここでは「**0行かどうか？**」を条件としています。**0** 行なら **true**、**0** 行じゃなければ **false** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4da80bab-4033-3d39-2458-43b74503b539.png)
画像で **length(...)** となっている部分は以下の通りです

```:length(...)の中身
length(body('PowerApps-一覧表示')?['value'])
```
直前の Excel Online のアクション名を指定して、その配列の長さを length 関数で取得しています。そして **[次の値に等しい]** を指定して **0** としているので、**0** 行なら **true** になります。
### はい (**true**) の場合
ここで **true** ということは、指定された **id** に一致する行がなかったことになるので、**Excel** のテーブルに行を追加する必要があります。つまりもしニュースの **RSS** だったとするなら、新しいニュースだということです。それは **Excel** に追加しなければなりません。

**Excel Online** と検索し **Excel Online (Business)** の **表に行を追加** を選んでください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/e1f518b1-04a4-666e-8307-99c37c848c5b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/374b5336-a6d0-e49a-9726-d3a5f30020bf.png)
画像のように **Excel** のテーブルの列に対して、RSS フィードの該当列を指定していきます。ここでは **id** 列のみ接頭辞として各サービスを表す文字列を追加しています（上記画像では **PowerApps-** が接頭辞に当たります）

続く **[変数の値を増やす-PowerApps]** は、前半部で定義した変数を **インクリメント（1つ値を足すこと）**しておきます。

### いいえ (**false**) の場合
**false** の場合は、何もする必要がないので、処理はなしで OK です

### 必要な分、定義する
もし **RSS** フィードがひとつであれば、～まで飛んでください。
今回この記事では Power Platform の4つのサービスの Blog から RSS フィードを取得しますので、これを残りの 3 つのサービス分、定義します。

**「え、あと 3 つも同じことをやるの？面倒くさい...」**

って思った方、ですよねー。とってもわかります。
少しでも楽をしたい方はまるっとコピーしましょう。

例えば **[Apply to each]** であれば、右側 **[…] ⇒ [クリップボードにコピー]** をクリックすることで、丸ごとコピーすることが可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/ca0e4964-f0e3-ad3b-0edc-cebe2e68d892.png)
新しいアクションを追加する際に **[自分のクリップボード]** を選ぶことで、コピーしておいたアクションを丸ごと貼り付けることが可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/6a303df2-09a6-78a4-b783-f3e9e730ef38.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/2bceb142-f040-3fc5-49f0-fd8236841291.png)

もちろん貼り付けた後は適宜、必要箇所を変更してください。そのままでは動きませんのであしからず。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/4fc7cda9-00ca-83b5-d316-ec163ea91911.png)
さて、とにもかくにも4つのサービス分の設定（**RSS** と **Apply to each** の組み合わせ x 4つ）が終わったら、あとは通知系です。
必要かつお好きなところに通知をしてください。

## 通知について - メール、Twitter、LinkedIn
通知と言っても、実際はどこに必要な文字を投稿するか？ということになります。

### メールに通知する - Send me an email notification 
ここでいうメールは自身の Power Automate のアカウントに対するメール送信になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/b073e205-7853-fc67-896c-a5e3b95f7fa6.png)
**Body** 部は好きなようにメッセージを作成すればよいのですが、改行については html の改行タグ <br> を使用してください。
画像の **Total** のところは以下のような式になっています。

```:Total
add(add(variables('新規記事件数-Apps'), variables('新規記事件数-Automate')), add(variables('新規記事件数-BI'), variables('新規記事件数-VirtualAgents')))
```
単純に **4** つのサービスの件数を足し算しているのですが、**add** 関数が引数を **2** つしか持てないので、**2** つずつ **add** して、それぞれの結果を **add** してます。

メールはこんな感じで飛んできます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/70625605-fbcc-0779-8a8c-04fccab2ec59.png)


### Twitter に投稿する
**Twitter** の場合はメールの場合とほとんど変わりません。コネクタが変わるだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/f34195f6-d692-d6b6-eb7e-ec6e985558ef.png)
私の場合、Twitter は海外の方も見られるので、簡単な英語にしているのと、ハッシュタグを付けていること、そして Power BI レポートの URL を併記しています。Total の中身はメールの場合と全く同様です。

### LinkedIn に投稿する
**LinkedIn** の場合はコネクタの指定にちょっとだけ癖があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/08227b14-e4a7-b775-dc78-348dca50254c.png)
**Content URL** が必須になってるので、私は **Power BI Report** の **URL** を指定しています。これ、逆に言うと、投稿に **URL** で表せるコンテンツがない場合、使えないじゃん！？ってことになります（悲しい

その他は **[Text]** とあるところは投稿の本文になりますので、先ほどの **Twitter** と同様です。

## 残タスク
はい、ここまでで Excel にデータは溜まっていきますので、その Excel をデータソースにして、Power BI レポートを作成してください。
OneDrive 上の Excel ファイルをデータソースにする場合の注意点ですが、以下の手順でやることをオススメします。

１．**OneDrive** 上の **Excel** をローカルの **Microsoft Excel** で開いて **[ファイル] - [情報] - [パスのコピー]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/706a984d-c6ca-906b-ca16-e4b79dc46edc.png)

```:コピー直後
https://{テナント名っぽいやつ}.sharepoint.com/personal/{ユーザー名の変形}/Documents/Flow/PowerPlatformBlog/PowerPlatform-RSS.xlsx?web=1
```

こんな感じの URL がコピーされます。これの一番後ろの **?web=1** を削除します

```:修正後
https://{テナント名っぽいやつ}.sharepoint.com/personal/{ユーザー名の変形}/Documents/Flow/PowerPlatformBlog/PowerPlatform-RSS.xlsx
```

２．Power BI Desktop で Web コネクタを選ぶ
データソースが **Excel** なので **Excel** コネクタを選びたくなる気持ちは、**すっごくわかる**のですが、そこは**グッと**こらえて **Web** コネクタを選択してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/e0a8c138-ba49-53cf-880d-d8c87f6d6c2d.png)
そうして開いた画面に先ほどコピーして **?web=1** を削除した **URL** を貼り付けて **[OK]** をクリックすれば、データが読み込まれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/994ad9db-4086-d6ed-727f-b8441be9a43a.png)
左側で テーブル名 **[RSS]** にチェックを入れ、**[データの変換]** をクリックしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/80ef8091-be5d-5207-2a83-677b0ad3bcee.png)

ここまでくれば、こんな感じでデータを読み込んでくれますので、データをチェックして、型をチェックして、読み込み、ビジュアルを好きなように作成すれば終わりです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152946/c810abe7-48fc-3fb4-4932-544274ceb0a8.png)

# まとめ
いかがでしたでしょうか？
今回は **RSS** フィードのデータを **Power BI** レポートで可視化するために、どうやって **Power Automate** で取得して溜めるか？に焦点を当てて、ご紹介しました。もちろんご紹介した方法が唯一の方法ではないですし、工夫次第で応用的に使えるモノでもあります。あまり複雑に考えずに、直球かつ最短でとりあえずやってみて、そこからブラッシュアップさせることができるといいですよね。

ぜひ、いろいろと工夫＆応用してみてください！！
楽しいものが作れたら、教えてくださいネ😁

最後まで読んでいただきありがとうございました。また気が向いたら、Power BI Tips シリーズ書きます。
皆様からのリクエスト、お待ちしております。

何かリクエストがあれば、以下までー🤗
Twitter: https://twitter.com/yugoes1021
Facebook: https://www.facebook.com/yugoes1021
LinkedIn: https://www.linkedin.com/in/yugoes1021/