このエントリは2021/06/20現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容からの乖離が発生する可能性があります。
例によって、以下のような問い合わせをもらった。
現在Azure Database for PostgreSQL (Single Server) に色々データを溜めており、そのデータをPower BI Serviceに出力できるようにしたい。ただ、Private EndpointでPostgreSQLと接続しているため、Power BI Serviceから直接アクセスできないのだが、どうすればよいか?また、データリフレッシュもオンデマンドでやらせたいのだが…。
「On premise Data Gatewayを間に挟んで構成したいのだが、どうすればよいのだろう・・・」ということのよう。On premise Data GatewayはWindows VMで動作させるので、稼働サービスの配置は下図のようなイメージになりそう。

構成上の注意点
接続ドライバー
接続ドライバーはADO.NET Data ProviderのNpgsqlを使うこともできるし、psqlODBCを利用することもできる。いずれにしても、Power BI Desktop、On premise Data Gatewayに事前にインストールしておく必要がある。
- Npgsql
- インストールするNpgsqlは.NETランタイムとの関係で、4.0.10以下でなければならない(2021/06/20現在)。これを上回るバージョンでは、On premise Data Gatewayで接続に失敗する(下図のようなエラー表示を確認できる)。
- On premise Data Gatewayは起動時にNpgsqlライブラリを読み込むため、Npgsqlをインストールしたのに以下のエラーが出る場合、On premise Data Gatewayを再起動するとエラーが解消する場合がある。

- psqlODBC
- Power BI DesktopならびにOn premise Data Gatewayで利用するODBCドライバーを一致させておく。
- ODBCデータソースも作成しておくこと(データソース名は一致していなくてもよい)。
Power BI Desktop
Npgsqlを使った接続の場合、Azure > Azure Database for PostgreSQL(下図左)もしくはDatabase > PostgreSQL database(下図右)を選択する。このとき、Power BI Serviceの利用者がオンデマンドでリフレッシュできるよう、Importではなく、DirectQueryを選択しておく。あとは必要なTableとVisualization componentを選択してレポートを作成する。


ODBC接続の場合、通常はDirectQueryを選択できない。これはpsqlODBCの場合も同様である。(この記事のように、一部のODBCドライバーはDirectQueryに対応しているものもある)。ODBCを選択後(下図左)、データソース名を指定する。Pull Downに現れるものを使っても、接続文字列の欄にdsn=で定義してもよい(下図右)。


On premise Data Gateway
On premise Data Gatewayの最新版をインストールしておく。Power BIの場合、Personal Data Gatewayも使えるが、今回は標準のOn premise Data Gatewayを使うことにする。インストール後、Power BI Serviceとの関連付けが完了すると、Power BI ServiceからOn premise Data Gatewayを経由したデータ接続の構成ができるようになる。
Power BI Service
・・・をクリックしてSettings (設定)> Manage gateways (ゲートウェイの管理)とたどり、Power BI Serviceが利用するOn premise Data Gatewayを確認する(下図左)。なお、On premise Data Gatewayのバイナリは、Download (ダウンロード)> Data Gateway (データゲートウェイ)で開くWebページからダウンロードできる(下図右)。


[Manage gateways](ゲートウェイの管理)をクリックすると、以下のような画面が開くので、関連付けたOn premise Data Gateway(この例ではgw-pgql-powerbi)が存在することを確認する。

データソースの追加は以下の通り。
- On premise Data Gatewayの右側にメニューをクリックできる・・・が現れるので、これをクリック
- ADD DATA SOURCE(データソースの追加)をクリック
- On premise Data GatewayからPower BI Serviceで使うデータソースへの接続を追加する

- データソース名、データソースの種類を指定、選択する。
- Npgsqlを使った接続の場合、赤で囲んだPostgreSQLを選択し、サーバー名、データベース、接続ユーザーおよびパスワードを指定。ODBC接続の場合、青で囲んだODBCを選択(下図左)。
- On premise Data Gatewayが稼働するノードで構成したODBCデータソースの接続文字列を指定する。例えば、DSNがPostgreSQL35Wの場合、接続文字列は以下の形式。
- 認証形式は、Windows認証を選択し、ユーザー、パスワードを指定しておく。
- 最後に接続確認(下図右)
dsn=PostgreSQL35W


最後に、発行済みレポートのデータセットをワークスペースから選択して、On premise Data Gatewayと関連付ける。この例では、以下のtestreportというデータセットを対象に構成する。メニューから[Settings](設定)をクリックして構成画面を開く。

Gateway connection(ゲートウェイ接続)の設定画面で、接続したいGatewayを選択し、接続したいDatabaseとのマッピングを構成して、Apply(適用)をクリック。これでGatewayを経由してPower BI Serviceからデータを取得できるようになる。以下の例はNpgsqlで接続するOn premise Data Gatewayの例。

ODBC接続を使っていると、以下のような感じでODBC接続であることが明示的にわかる。

これで設定作業はおしまい。
動作確認
あとはふつうにレポートを表示し、リフレッシュできるか確認。DirectQueryを有効にしていると、その都度最新のデータで描画されることがわかる。
通常のODBCドライバーを使っているとDirectQueryは使えないので、データセットをリフレッシュしたあと、レポートを表示することで最新のデータを確認できる。