あらゆるREST APIのダイレクトクエリをPower BI Serviceからオンプレミスで実行する

# はじめに
最近ではエンタープライズ環境においてREST APIはデータの公開や受信に非常によく使われています。REST APIはデータアクセスやアクセス制御、プラットフォームの依存関係を簡素化しますが、Power BI経由でこれらのAPIからデータ接続をする場合には注意が必要です。認証、ページネーション、正規化を取り扱うためには、REST APIが変わるたびに最新の状態を保つことはもちろん、カスタムコードを記述しなければいけません。

[Progress Data Direct Autonomous REST Connector](https://www.progress.com/odbc/autonomous-rest-api)ならば、コードを記述することなく、Power BIからどのようなエンタープライズREST APIにも簡単に接続できます。この記事では
- Power BIからあらゆるRESTサービスへの接続方法
- ダイレクトクエリを使ったPower BIへのデータ取得方法
- データセットを更新できるPower BI Serviceにダイレクトクエリを使ってレポートを公開する方法
について、一つずつ順を追って説明します。

# Power BI Connector をダウンロードする
1.Autonomous REST Connector for ODBCを直接Power BIに使用することはできますが、REST APIでダイレクトクエリが必要な場合には、Progress社の[Power BI Connector](https://github.com/saiteja09/Power-BI-ODBC-Connectors/releases/download/v0.13-beta/DataDirect.Autonomous.REST.Connector.mez)をダウンロードしインストールしなければいけません。<br>*注意：ベータ版です。正式なコネクターは近日Progress社からリリースされる予定です*
2.パスにDataDirect.Autonomous.REST.Connector.mez コネクターを追加します。


```console
C:\Users\{user}\Documents\Power BI Desktop\Custom Connectors
```


3.コネクターを使うためPower BIを再起動します。


# Autonomous REST Connector for ODBCを設定する
1. 今回は、AlphaVantageと呼ばれる、リアルタイムに株式データを提供するAPIに接続します。[資料はこちら](https://www.alphavantage.co/documentation/)から確認できます。
2. 情報登録を済ませてAlphaVantageの[APIキー](https://www.alphavantage.co/support/#api-key)を入手します。
3. 新しいファイルを開き、以下のように接続したいすべてのエンドポイントを追加します。<br><br>

```console
{
"StockIntraday":"https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=5min&outputsize=full",
"StockDaily":"https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&outputsize=full"
}
```




4.上記ファイルをalphavantage.restファイルとして保存します。



5.ODBCデータソースアドミニストレーターを起動してSystem DSNタブに移動します。Addをクリックし新しいデータソースを作成します。DataDirect 8.0 Autonomous REST Connectorを選択してください。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/8a06e594-1ed3-dffd-b1fb-6ea6bca66c2d.png)

6.設定画面上で下記詳細をGeneralタブ内に入力します。
	1. Data Source Name: {好きな名前}<br>*注意：この名前は後で使いますので忘れないようにしてください。*
	2. REST Config File: 先ほど作成した.restファイルへのパス


![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/4d88f118-deca-76ec-0892-c36b15fd436b.png)

7.Authenticationタブに移動し、下記のようにAlphaVantage APIの認証を設定します。
AlphaVantage APIは認証用にAPIキーを使いますが、これはリクエストごとにクエリパラメーターとして送る必要があります。
1.Authentication Method: UrlParameter
2.Auth Param: apikey
3.SecurityToken: Your AlphaVantage API Key 
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/098db005-22bf-ccef-f6a6-0269d2e0018c.png)




8.Test Connectをクリックします。Autonomous REST Connectorが設定した.rest設定内のすべてのエンドポイントに接続しようとします。すべてが正しく設定されれば成功した旨のメッセージが表示されるはずです。



# Progress DataDirect Autonomous REST Connectorをインストールする
1. Progressのwebsiteから [Autonomous REST ODBC connector](https://www.progress.com/odbc/autonomous-rest-api) をダウンロードしインストールします。
2. PCにあるセットアップファイルを実行しコネクターをインストールします。

# Power BIからREST APIのダイレクトクエリを実行する
1. Power BIを起動し、Get Data -> Otherと進み、Progress DataDirect Autonomous REST Connectorを選択します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/fb2d8aab-404d-89ac-b1b3-b937a7c0e970.png)<br>
*注意：コネクターが見つからない場合にはFile -> Optionsと進み下記のように進めてください。*
Settings -> Security -> Data Extensions -> Allow any extension to load without validation or warningを選択
その後、Power BIを再起動します。


2. 次の画面で、前のセクションで作成したODBCデータソースアドミニストレーターのDSN nameを入力しDirectQueryを選択します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/68bec210-de51-cb00-353a-faaf23568239.png)

3. OKをクリックします。すでにODBCデータソースアドミニストレーターで認証の設定は完了しているので、次の画面ではAnonymousを選択します。

4. Navigator上にREST APIのテーブルが表示されるはずです。株式データを見るには、TimeSeries5MINまたはTIMESERIESDAILYテーブルをクリックします。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/e001548d-f663-7815-f9a8-b95777190d4b.png)

5. Loadをクリックします。REST APIに接続したダイレクトクエリを使ってレポートを作成してください。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/91497a35-6b2e-d622-f47e-cf975db6a798.png)

6. 作成したレポートを保存しPower BI Serviceにパブリッシュすれば他の人もレポートにアクセスできるようになります。ツールバーにあるPublishをクリックして実行してみてください。

7. 公開先を選択します。今回の例ではMy workspaceを選びましょう。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/d7511eb9-a241-e93f-af13-dfe7881ff459.png)

レポートがオンライン上に公開されるはずです。

# ダイレクトクエリを使ってゲートウェイ経由でオンラインレポートを更新する
1.一度共有用のオンラインレポートを公開したら、最新情報を保つために直近のデータセットにレポートを更新したくもなるでしょう。しかしデータソース（REST API）にはオンプレミス環境からしかアクセスできません。オンプレミスのデータベースとREST APIを更新するには、ODBCコネクターを設定したPCにMicrosoftからオンプレミスデータゲートウェイをインストールする必要があります。


2.Power BI Serviceからデータゲートウェイをダウンロードします。下記のようなダウンロードオプションがあるはずです。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/e7720ca2-9a22-2a91-dd6b-54ce8591ea3f.png)

3.データゲートウェイをインストールしたら、セットアップ中はMicrosoftアカウントにログインします。Power BI Desktopからレポートを公開したときと同じアカウントであることを確認してください。

4.前のセクションでコネクターをコピーしたC:\Users\{username}\Documents\Power BI Desktop\Custom Connectorsにアクセスし、カスタムコネクターのプロパティを開きます。

5.Security Tab -> Advanced-> Add の順に進みます。カスタムコネクターフォルダにアクセスするために、New Principalを選択しサービスアカウントのNT SERVICE\PBIEgwServiceを追加します。
データゲートウェイはこのサービスアカウントを使ってサービスを実行するため、サービスアカウントがカスタムコネクターフォルダにアクセスできることを確認する必要があります。

6.LocationをPC名に変更しNT SERVICE\PBIEgwServiceを追加します。サービスアカウントを有効にするためCheck Name、OKの順にクリックします。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/87af816c-87bb-665d-20ae-618f53ed41a0.png)

7.Security Permissionを保存し、画面を閉じる前にNT SERVICE\PBIEgwServiceがカスタムコネクターフォルダにアクセスできることを確認します。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/9abf478e-4210-e65a-f475-1c3c435625f8.png)

8.これでオンプレミスゲートウェイが使えます。コネクタータブを開きパスを以下に変更します。

```console
C:\Users\{username}\Documents\Power BI Desktop\Custom Connectors
```

これは以前コネクターに追加し、NT SERVICE\PBIEgwServiceへアクセスできることを確認したカスタムコネクターフォルダと同じものです。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/9fd00069-981d-e0e4-dae3-b20df5d6d171.png)

9.Applyをクリックすれば、データゲートウェイに表示されるフォルダのすべてのコネクターが表示されているはずです。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/60a61fdf-0dc9-fa14-5cde-da1906e53a9c.png)

10.Power BI ServiceのSettings -> Manage Gatewaysを開くと、先ほどインストールしたゲートウェイが表示されているはずです。下記のようにGateway settingsタブのAllow User’s custom data connectors to refresh through this gateway clusterにチェックしてください。Applyをクリックし設定を保存します。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/24233c83-ef8e-cf49-3abb-367b45b3b5cb.png)

11.Settings -> Data Sets tabに移動すると前のセッションでPower BI Serviceに公開したデータセットが表示されているはずです。またGateway connectionに“Not configured Properly”エラーが表示されているはずなので、Actionsをクリックして表示される“Manually add to gateway”をクリックします。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/4df92eb3-b911-8f73-f77d-cba304580303.png)

12.これでゲートウェイに新しいデータソースを追加するゲートウェイ設定に移動できるはずです。DSN Nameに、PCに作成したODBC DSN名を入力しAddをクリックします。これで接続が有効になり、接続に成功すればデータソースが作成されます。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/928c4398-358d-da71-41cb-9fb68bf923f4.png)

13.それではSettings -> Data Sets -> Your Data Set -> Gateway Connectionに移動しましょう。ステータスはrunningが表示され、先ほど上記で作成したデータソースを選択できるMaps toという新しいドロップダウンメニューが見えるはずです。Applyをクリックします。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/855f1207-5063-2b3f-a6fa-d6a96aad92e0.png)

14.下記のようにScheduled Cache Refreshでデータセットのスケジュール更新ができます。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/9528c7cc-b666-1a6c-c582-eef2761a94f4.png)

15.またはレポート設定から都度レポートを更新することもできます。Progress DataDirect Autonomous REST Connectorを利用して、REST API宛にリアルタイムにクエリを送ることで、データセットが更新されます。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658441/e8af9b62-6b05-5b7b-95e4-70a5b79e35d6.png)

Power BI ServiceがProgress DataDirect Autonomous REST Connectorを使うように、この記事がPower BI DesktopからREST APIにダイレクトクエリを実行する際の参考になれば幸いです。

参照元：
https://www.progress.com/tutorials/odbc/directquery-any-on-premises-rest-api-from-power-bi-service