こんにちは。今日はPower BIのデータセットを外部から更新する方法である、XMLAエンドポイント経由での更新を試してみたので、備忘メモを残しておきたいと思います。
XMLAエンドポイントを利用すると、データセット全体だけでなく、データセット中の特定のテーブルだけを更新、といった細かい更新を行うことができたりしますね。
なお、MicrosoftのPower BIサポートチームによるブログ記事が分かりやすかったので、大いに参考にさせていただきました。
https://jpbap-sqlbi.github.io/blog/powerbi/pbi_xmlaendpoint/
Contents
Power BI側の事前設定
前提条件
この機能は、以下のライセンスを利用したワークスペース上で利用可能です。
・Power BI Premium
・Premium Per User
・Power BI Embedded
管理ポータルからXMLAエンドポイントの「読み取り・書き込み」を許可する
はじめに、XMLAエンドポイントを利用した「書き込み」操作を許可するようにテナントの設定を変更します。(既定では、「読み取り」のみが許可された状態)
Power BI での XMLA エンドポイントを使用したデータセットの接続と管理 – Power BI | Microsoft Learn
ワークスペースの接続文字列を取得する
続けて、ワークスペースの設定から、ワークスペースの接続文字列を控えておきます。(必要なライセンスを利用したワークスペースでないとこの情報は表示されません)
以上で、事前準備は完了です。
次に、各種クライアントからのデータセット更新を試してみます。
SSMSを利用したデータセット更新
まず、GUIベースでデータセットの更新を操作する場合には、SSMS (SQL Server Management Studio)が利用できます。
Power BI での XMLA エンドポイントを使用したデータセットの接続と管理 – Power BI | Microsoft Learn
Server TypeをAnalysis Servicesにして、Server nameを先ほど取得したワークスペースの接続文字列を指定して接続することができます。
そうすると左側のメニューにデータセットの一覧が表示されます。
今回は、特定テーブルのみを更新する方法を試してみましたが、その場合適当なテーブルを右クリックしてProcess Tableを選択し、Scriptをクリックすると、データを更新するための構成スクリプトが得られます。
これをSSMSのクエリエディタから実行すると、特定テーブルのみを更新することができました。
*なお、XMLAエンドポイントの書き込み許可がない場合は、以下のようにエラーになります。
PowerShellを利用したデータセット更新
次に、PowerShellを利用したデータセット更新を試してみます。
PowerShellを利用する場合、従来のSQL Server Analysis Service用のコマンドレットを利用することになるようです。
最初に紹介したPower BIサポートチームのブログを参考に、以下コードを実行。
## SqlServerモジュールのインストール
Import-Module SqlServer
## 資格情報の構成
$Workspace = "powerbi://api.powerbi.com/v1.0/myorg/ワークスペース名"
$Database = "データセット名"
$PowerBILogin = "ユーザ名"
$PowerBIPassword = ConvertTo-SecureString "パスワード" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ($PowerBILogin, $PowerBIPassword)
## データセットの更新(データセット全体を更新する場合)
Invoke-ProcessASDatabase -Server $Workspace -DatabaseName $Database -Credential $Credential -RefreshType Full
## データセットの更新(特定テーブルのみを更新する場合)
Invoke-ProcessTable -TableName "テーブル名" -RefreshType Full -Server $Workspace -DatabaseName $Database -Credential $Credential
データセットを更新したあと、Power BI Serviceからデータセットの更新履歴を確認すると、以下のようにXMLAエンドポイント経由で更新された旨が確認できました!
なお、PowerShellで実行できるということは、Azure FunctionsやAzure Automationなどを利用して定期的/もしくはイベントをトリガーにこのスクリプトを実行させるようなこともできそうですね。
*なお、XMLAエンドポイントの書き込み許可がない場合は、以下のようにエラーになります。
以上、Power BI XMLAエンドポイントを利用したデータセット更新を試してみたメモでした。
動作イメージ理解の助けになっていれば幸いです。
おしまい
コメントを残す