Power BI サービスから On-premises data gateway 経由でデータを取得する（PostgreSQL編/Oracle編）

# はじめに
Power BI のレポートを複数人で共有するには Power BI サービス (Web) を使用しますが、データソースがインターネットから接続出来ない場合は On-premises data gateway 経由でデータを取得します。
On-premises data gateway （オンプレミス）といいつつ、クラウドでパブリックアクセスを許可しない場合にも使用しますよ。
※たとえば Azure Database for PostgreSQL をプライベートアクセス（VNET統合）で構築した場合など。

ということで、インターネットから直接接続出来ない PostgreSQL / Oracle に Power BI サービスから接続するための設定を行う流れを紹介します。

# インストール手順
## 1.まずは On-premises data gateway のインストール
インストール自体は Microsoft Learn の手順通りです。
いつの間にか Windows Server 2016 がシステム要件からはずれたようです‥‥。

https://learn.microsoft.com/ja-jp/data-integration/gateway/service-gateway-install

上記サイトの中にダウンロードリンクがあるので、インストーラーをダウンロードし実行していきます。
今回は標準ゲートウェイをセットアップしていきます。
![002.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/63fc96dc-1f40-0bbf-02ae-dd463aec5557.png)
最初の画面は迷うところはないですね。

インストールをクリックするとお待ちくださいと言われるのでしばらく待ちます。
![003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/f16d1cc5-5bac-450e-a928-13dfcde98de9.png)

画面が進むとメールアドレスの入力画面になります。メールアドレスと言いつつ、Entra ID のことですので Power BI のライセンスが割り当てられている Entra ID を入力します。
といいつつこの作業をする人は Power BI も On-premises data gateway も管理すると思うので結局自分のアカウントを入力することになると思います。（xxxxx.onmicrosoft.com の方もいるかも？）

:::note info
この画面以降、最後の構成までの間にキャンセルをクリックした場合は、
スタートメニューに登録される On-premises data gateway を起動すると構成から始められるようです。
:::
![005.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/27326741-16b8-d678-469d-d505538c5425.png)

さて、サーバーにインストールしている場合、そのままサインインをクリックするとセキュリティ強化の構成によってブロックされた警告がでます。
![006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/142d5cb3-9ccb-ffa3-6816-cd01ca85d4ef.png)
これは１つ目ですが２～３回でますので、必要に応じて信頼済みゾーンに追加してください。正常にアクセスできると Entra ID のサインイン画面が開きますのでサインインします。
![007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/2fa8f4f7-9815-be15-37b1-250f330f19e9.png)

正しくサインインすると、ゲートウェイ登録の選択肢が表示されます。
今回は『このコンピューターに新しいゲートウェイを登録します。』を選択します。
![008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/62f6a76c-f2f4-7cbe-d569-a49e5d5ab2b7.png)

ゲートウェイの名前と回復キーを設定します。
この名前で Power BI サービスの接続とゲートウェイの管理（オンプレミスデータゲートウェイ）に登録されます。
![009.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/749b0638-8ae5-8051-f72e-43bb1302917c.png)

最後に構成をクリックすると、インストール＆初期設定が完了します。
![010.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/7c759d05-615d-ad83-b39b-89d0408f9c8b.png)

そうすると、Power BI サービスの接続とゲートウェイの管理のオンプレミスデータゲートウェイのところに登録されます。
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/e53358f9-b21e-81da-b66c-420f5083dbea.png)

## 2.Power BI サービスから PostgreSQL への接続を作る
続いて、PostgreSQL へ接続するための設定を行います。
以降、VNET統合をしている Azure Database for PostgreSQL と接続させようとしている例で説明します。

:::note info
VNET統合を行うとインターネットからは xxxx.postgres.database.azure.com には接続できず、Power BI サービスからも直接はアクセスできないので On-premises data gateway を使います。
そのため同じ VNET に所属する仮想マシンに On-premises data gateway をインストールし、Power BI サービスから接続出来るように構成します。
:::

オンプレミス（データゲートウェイ）経由を選択し、ゲートウェイクラスタ名に先ほど作成したゲートウェイを選択します。
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/5dc3ffb8-4315-6fcf-89d1-cc17cc1ed3dd.png)
これで接続を作成‥‥ のまえに、On-premises data gateway だけでは PostgreSQL に接続出来ません。エラーが出ます。
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/1d334e4d-5f8b-376d-a9ae-6a54718e20f0.png)

ドキュメントにも NpgSQL 4.0.10 が必要のようなことが書かれています。

https://learn.microsoft.com/ja-jp/power-query/connectors/postgresql

Power BI サービスに必要とか、On-Premises data gateway から使うとか、直接的な表現では書かれていませんが、まぁ前提条件を要約するとPower BI サービスから On-premises data gateway 経由で PostgreSQL に接続するには NpgSQL プロバイダーが必要なようです。
またインストールするには単体でインストールするか、NpgSQL 4.0.10 を同梱している Power BI Desktop をインストールすればいいようです。

今回はゲートウェイサーバー扱い、すなわちここで Power BI Desktop を使うことはないという前提で NpgSQL プロバイダーをインストールしていきます。
ここで注意は 4.0.10 以前であること、インストーラーのデフォルト値から変更する必要があることでしょう。
バージョンについてはよく x.xx 以降を使えというのはありますが、今回は以前です。
よく見ず最新版をインストールしても動かないのでご注意を。
NpgSQL 4.0.10 はこちらからゲットします。

https://github.com/npgsql/npgsql/releases/tag/v4.0.10

またインストール途中の選択肢も変更する必要があります。
デフォルトだと Npgsql GAC Installation が unavailable になっていますので、
![021.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/fef1da4c-3d65-ca8e-65f6-6401c176c324.png)

ここを available に変更します。
![022.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/51bc0808-a48a-a3d3-3a4c-8ffa3643b695.png)
なお Npgsql Performance Counters はあってもなくてもかまいません。
開発系の人は .Net から使われるから GAC Installation 要るでしょ！ と思うでしょうが、インストーラーは何も触らず Next / Yes / OK / I Agree を押しておけばデフォルトでよろしくやってくれると思ってるとハマります。

これで NpgSQL プロバイダーをインストールできました。
最後に On-premises data gateway に認識させるために On-premises data gateway の再起動をしておきます。
スタートメニューに On-premises data gateway が登録されているので起動し、サービス設定の項目を選択し、表示されるゲートウェイの再起動（すぐに再起動）を行います。
![023.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/b2912ef2-8daa-51e3-5560-0204dfd9c5e1.png)

その後、再度データベース接続を作成すると、成功します。
これでこの接続を使って Power BI サービスから On-Premises data gateway 経由で PostgreSQL のデータを参照できるようになります。![024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/da963acd-b5cf-e7e0-e7ca-b60772e1fa3e.png)

## 3.Power BI サービスから Oracle への接続を作る
Oracle への接続にも、同様に Oracle データプロバイダーが必要です。

https://learn.microsoft.com/ja-jp/power-query/connectors/oracle-database

こちらはドキュメントにもありますが、Oracle から Oracle Client for Microsoft Tools (OCMT) という名称で公開されています。Oracle Database (Server) や Oracle Client をインストールするとオプションによっては ODP.Net がインストールされ、OCMT をインストールしなくても接続できるようですが、ドキュメントでは OCMT もインストールしておくことを強くお勧めしていました。
ちなみに 19c とついていますが、Oracle のいつものごとく、前後２バージョンは接続出来ると思います。検証時点で 12cR2 とはつながりました。
https://www.oracle.com/database/technologies/appdev/ocmt.html

こちらはハマるポイントはないです。デフォルトのままインストールで問題ありません。
![032.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/d7035d9c-4464-e8de-4f85-e188888ed0c7.png)

カスタムを選んでみましたが、デフォルトですべてチェックが入っています。
![033.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/5589b52c-f47e-a9af-03e9-e5ff44274a64.png)

インストールが終われば、再度 On-premises data gateway の再起動をしておきましょう。

そして Power BI サービスからデータベース接続を作成します。
サーバー欄は、[サーバー名]/[サービス名(SERVICE_NAME)]の書式で入力します。
（F1-PowerBIEva というサーバーに Oracle をインストールしています
　認証を通したスクショを作るためにとりあえず SYSTEM 使ってます）
![039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/befe9f6b-0300-a699-e67e-ec1d2804eee5.png)

これで作成すると、正常に登録されます。
![040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/ad8697da-3dd7-df59-2f2e-a54df3ea1b82.png)

# 設定後の接続画面
接続の一覧に作成したデータベース接続がリストアップされ、ゲートウェイクラスター名のところには使用している On-premises data gateway の名前が表示されます。
状態の更新アイコンをクリックすると、正常に接続出来ればオンラインと表示されます。
![051.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/dcd0e9e5-ec03-15b3-6018-14c3163cfc18.png)

あとは、Power BI サービスに発行したレポートのセマンティックモデルで、作成したゲートウェイを指定してやればＯＫです。
![052.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3884834/6e0341da-1009-f776-db40-d4588658426f.png)

# さいごに
ということで、On-premises data gateway を使って PostgreSQL や Oracle からデータを取得するための準備をまとめました。
On-premises data gateway ってなんか略す方法ないんですかね。カタカナにしても長いし、オンプレミス データ ゲートウェイ。
Azure を使っていてもセキュリティ上の観点からデータベースは VNET に閉じて構成することはありそうなのでしばらくおつきあいは続きそうです。
Azure を使ってるなら仮想ネットワークゲートウェイというのもあるんですが、Power BI Premium にしか対応してないんですよね。弊社では Power BI Pro のライセンスまでしかないので試せてません。

では、今日はこのくらいで。