Mから始めよう #5 〜Power BIでWebコンテンツの利用と個人用ゲートウェイ〜

## Power BI Desktop でWebデータを使うには
　Power BI Desktop でWebページを読み込むには、Power Query エディターを開いて、新しいデータソースでWebを選択し、URLを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/471c98b5-4bdc-2585-94c7-1c78f597d2b7.png)

　これを、詳細エディターを開いてM式のソースの部分では以下のようになっています。

```
ソース = Web.BrowserContents("https://ja.wikipedia.org/wiki/%E4%B9%83%E6%9C%A8%E5%9D%8246"),
```

　これで作成したものを、普通にPower BIサービスに発行して設定画面を見ると、ゲートウェイ接続がオンになっており、オフにすることはできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d475b931-ffdd-d11f-81e5-9bd7dba7ecb8.png)


　まだ個人用ゲートウェイがインストールされていないので、更新をかけようとすると、エラーとなってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3788afa8-1195-3218-41c5-f2784f2016ab.png)

　個人用ゲートウェイをインストールし、Power BIサービスで更新ができるようになった後も、インストールしたPCが立ち上がっていなければ更新ができません。自動更新をさせるには、更新時に該当PCが稼働していないとできないのです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b32a71bc-74bf-8d28-8134-506a23bde9d3.png)

　ブラウザー機能を使うWebデータの取得には、セキュリティ上の問題が発生する可能性があるため、オンプレミスデータゲートウェイを経由してデータを取得する必要があります。インターネット上に公開されていない、イントラ上のWebコンテンツのデータも利用することができます。

## 個人用ゲートウェイとは
　個人用ゲートウェイは、正式にはオンプレミス データ ゲートウェイ (個人用モード) 、英語表記では、On-premises data gateway (personal mode)と言います。Power BI でのみ機能するオンプレミス データ ゲートウェイのバージョンです。 自分のコンピューターにゲートウェイをインストールして、オンプレミスのデータにアクセスできます。

## オンプレミスデータゲートウェイを必要としないWebデータ
　インターネット上で公開されている、Web API、CSV、JSONなどのデータを取り込む場合は、そのまま取得することができます。

　例えば、CSVデータを取り込む場合は、M式は以下のように、Web.Contentsで指定されたアドレスからのデータを変換して使用します。

```
ソース = Csv.Document(Web.Contents("https://covid19.who.int/WHO-COVID-19-global-data.csv"),[Delimiter=",", Columns=8, Encoding=65001, QuoteStyle=QuoteStyle.None]),    
```

　これを、Power BIサービスに発行しても、オンプレミスデータゲートウェイの設定を要求されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5d156ada-99e8-b6c1-825d-17b464bfe89a.png)

## アプリケーションデータゲートウェイなしでWebコンテンツを読み込むには
　
　インターネット上のWebコンテンツからデータを取得するのに、常にPCが起動していないといけないというのは面倒です。そこで、ちょっと細工してゲートウェイ無しでデータ取得できるようにします、

　入力ソースの種類を「テキスト／CSV」にして、ファイル名にURLを入力してやると、入力ソースをWebにしたときと同様にデータの取得を行うことができます。ただし、この場合のM式は以下のようになります。

```
ソース = 
File.Contents("C:\Users\n_fuk\AppData\Local\Packages\Microsoft.MicrosoftPowerBIDesktop_8wekyb3d8bbwe\AC\INetCache\FCJIWBZ6\乃木坂46[1]"),
```
　これをこのままPower BIサービスに発行すれば、ソースがローカルファイルになっているため、当然オンプレミスデータゲートウェイが必要となります。

　そこで、Power Query エディターのソースのステップをダブルクリックして、ローカルファイルを指しているファイルパスを、再度URLに書き換えてやります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/bd0c7e9d-1ed5-d4d1-a0c0-d491d47bfe6e.png)

　もう一度、詳細エディターを開いてM式を確認すると、今度は Web.ContentsでURLを見るようになります。

```
ソース = Web.Contents("https://ja.wikipedia.org/wiki/%E4%B9%83%E6%9C%A8%E5%9D%8246"),
```

 **Web.BrowserContents**はオンプレミスデータゲートウェイを必要としますが、**Web.Contents**は必要としません。したがって、入力ソースの「ファイル／CSV」を使って、２度書きしてやるか、詳細エディターを使って、Web.BrowserContentsをWeb.Contentsに書き換えた後、Power BIサービスに発行してやることで、オンプレミスデータゲートウェイを使わずWebコンテンツを取得できるようになります。

　参照：[Microsoft Docs **Web.contents**](https://docs.microsoft.com/ja-jp/powerquery-m/web-contents)
 
# 関連記事

- [Mから始めよう #5 〜Power BIでWebコンテンツの利用と個人用ゲートウェイ〜](https://qiita.com/spumoni/items/f66bb43f0c3f13308d79)
- [[Power BI] Power Query の Web.Contents 関数でREST APIを使う](https://qiita.com/spumoni/items/419ffd1f07947a07cad0)
- [(Power BI) Mから始めよう #8 〜クエリ・パラメータの各種使い方](https://qiita.com/spumoni/items/4badf29d0b3e170fa15b#b%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%96%A2%E6%95%B0%E3%81%A8url%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%A7web%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0)
- [ページ分割されているWebでページ数がわからないデータを取得する](https://qiita.com/spumoni/items/2832b63fa627b20a5de2#4-%E3%83%9A%E3%83%BC%E3%82%B8%E5%88%86%E5%89%B2%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8Bweb%E3%81%A7%E3%83%9A%E3%83%BC%E3%82%B8%E6%95%B0%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B)
- [(Power BI) Mから始めよう #10 エラー処理とHTTPステータスコード](https://qiita.com/spumoni/items/cd5843e0104fed9b4874)
- [[Power BI] Power QueryでCSSセレクタを使ってWebページからデータを取得する](https://qiita.com/spumoni/items/cad005c1deaa522531d8)