Power BI Premium で、XMLA エンドポイントが利用できるようになりました。XMLA エンドポイントは Microsoft Analysis Services にアクセスする際に利用するプロトコルです。これにより、Azure Analysis Services と SQL Server Analysis Services の接続に使うライブラリ を利用して、Power BI Service に接続する事ができます。
本記事では、Power BI Service の XMLAエンドポイントに Azure Functions にデプロイしたC# のプログラムから接続し、データを取得する方法を紹介します。
全体の手順
手順の概要は以下となります。
- Azure AD でサービスプリンシパルを作成
- セキュリティグループを作成し、サービスプリンシパルを追加
- Power BI テナントでサービスプリンシパルのアクセス許可
- Power BI Premium で、XMLA エンドポイントのアクセスを許可
- ワークスペースを作成し、サービスプリンシパルをワークスペースの管理者に設定
- ワークスペースにテスト用のデータセットをデプロイ
- DAX Studio を利用して DAX 関数を作成
- Azure Functions にプログラムをデプロイ
- Azure Functions に環境変数の設定
- Azure Functions にアクセスしてテスト
各手順の詳細
以下は上記の1~10の手順の詳細です。
Azure AD でサービスプリンシパルを作成
Azure Portal にログインして、Azure Active Directory から「アプリの登録」-「+新規作成」をクリックします。
表示名を入力し、登録をクリックします。
左側で「証明書とシークレット」を選択して、新しいクライアントシークレットを作成します。
「説明」を入力し追加をクリックします。 |
作成されたクライアントシークレットの値をクリップボートにコピーして保存しておきます。この画面から移動すると二度と確認する事ができまんので、ここで忘れずコピーして下さい。後程サービスプリンシパルでログインする際のパスワードとして利用します。 |
セキュリティグループを作成し、サービスプリンシパルを追加
全てのサービスプリンシパルから Power BI にアクセス許可するのではなく、特定のセキュリティグループに属しているサービスプリンシパルのみを許可する為に、セキュリティグループを作成します。
Azure Portal で 「Azure Active Directory」 - 「グループ」-「+新しいグループ」をクリックします。
グループの種類、グループ名、グループの説明を入力し「作成」をクリックします。 |
作成したグループに、あらかじめ作成しておいたサービスプリンシパルをメンバーとして追加します。
Power BI テナントでサービスプリンシパルのアクセス許可
Power BI 管理ポータルで、 [テナント設定] を選択します。
[Power BI API の使用をサービスプリンシパルに許可]を展開し、「有効化」と「特定のセキュリティ グループ (推奨)」を選択し、アクセス許可するセキュリティグループを指定します。
Power BI Premium で、XMLA エンドポイントのアクセスを許可
Power BI 管理ポータルで、 [容量の設定] > [Power BI Premium] > 容量の名前を選択します。
[ワークロード] を展開します。 [XMLA エンドポイント] の設定で、 [読み取り専用]または「読み取り、書き込み」を選択します。
ワークスペースを作成し、サービスプリンシパルをワークスペースの管理者に設定
Power BI Service の画面から「ワークスペースの作成」をクリックします。
ワークスペース名を入力します。
詳細を展開し、Premium容量がオンになっている事を確認して作成します。
作成したワークスペースの「アクセス」をクリックして、サーパスプリンパルのユーザ名を追加します。
作成したワークスペースの「設定」をクリックして、ワークスペース接続の文字列をコピーしておきます。XMLAエンドポイントへ接続する際の文字列となります。
ワークスペースにテスト用のデータセットをデプロイ
テスト用のデータセットとして、Power BI のサンプルが公開されている github から Sales & Returns Sample v201912.pbix をダウンロードして利用します。
ダウンロードした、Sales & Returns Sample v201912.pbix を Power BI Desktop で開き、Power BI Premium の容量のワークスペースに発行します。
発行するワークスペースを選択します。
DAX Studio を利用して DAX 関数を作成
https://daxstudio.org/ から、DAX Studio をダウンロードしてインストールして起動します。
Connect の画面で、tablular Server を選択し、ワークスペース接続の文字列を入力します。
ユーザとパスワードを入力するとすると、左側のペインにデータセットが表示されます。「Query Builder」をクリックすると表示される領域に、データ取得したいカラムとメジャーを左側のデータセットからドラッグアンドドロップします。Edit Query をクリックすると、データ取得の為の DAX Query が表示されます。Run Query をクリックすると結果が表示されます。
ここでは、左上のデータ名を右クリックして Database Name をコピーします。また DAX Query もコピーしてきます。
Database Name | DAX Query |
---|---|
Sales & Returns Sample v201912 | EVALUATE SUMMARIZECOLUMNS( 'Product'[Product], "Returns", [Returns] ) |
Azure Functions にプログラムをデプロイ
GitHub上のサンプルプログラムを Azure Functions にデプロイします。
https://github.com/sushima/XMLASample/
デプロイ先は Azure を選択します。
ターゲットは Azure Function App(Windnows) を選択します。
デプロイする Functions は新規作成します。
Azure Functions に環境変数の設定
Azure Portal で作成した Functions を開き「構成」をクリックして新しいアプリケーション設定を追加します。
追加するのは以下の3つの設定です。
名前 | 値 | 説明 |
---|---|---|
PBI_CONNECTION_STRING | Provider=MSOLAP.8;Data Source=powerbi://api.powerbi.com/v1.0/myorg/XMLTEST | XMLTESTの部分は実際のワークスペース名に応じて変更して下さい。 |
appId | app:5eb07315-a268-4e29-aec8-02ec0ff1c345@xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | 実際の<アプリケーション(クライアント)ID>@<ディレクトリ(テナント)ID>を設定して下さい。 |
authKey | l3kaAAA~AAAA_~5A4AA-Sh1~alAAAAAA6 | 実際のサービスプリンシパルのシークレットの値を設定して下さい。 |
設定後は忘れずに「保存」をクリックしてください。
Azure Functions にアクセスしてテスト
Azure Portal から、デプロイした関数を選択して「関数のURLの取得」をクリックして、URLをコピーします。
コピーした URL に以下の2つの引数を追加してブラウザからアクセスします。
引数 | 値 | 説明 |
---|---|---|
catalog | Sales%20%26%20Returns%20Sample%20v201912 | Database NameをURLエンコードした文字列 |
query | EVALUATE%0D%0ASUMMARIZECOLUMNS%28%0D%0A%27Product%27%5BProduct%5D%2C%0D%0A%22Returns%22%2C%20%5BReturns%5D%0D%0A%29%0D%0A | Dax QueryをURLエンコードした文字列 |
以下のように JSON 形式で結果が返ってくれば成功です。
おわりに
プログラムから Power BI の XMLA エンドポイントにアクセスする事で、プログラムからデータを取得することが可能になりますので、ご参考にして頂ければ幸いです。