テクテク日記

テクテク=テクノロジー&一歩ずつ(テクテク)

Power BI (Fabric) テナントの設定を抽出

2023年5月のMicrosoft BuildでアナウンスされたMicrosoft Fabricの陰に隠れて、実は非常に重要な更新が隠されていました。それは、長らくPower BI管理者にとって悩みの種だった「テナント設定の項目」がREST API*1を介して簡単に取得できるようになり、今後は過去・現在・未来の3つの軸で管理が可能になったことです。

なお、管理ポータルにある「テナント設定」はFabricが登場する前まではPower BIテナントでしたが、今後はFabricテナントとして存続していくことになります。

※注意
「データセット」は別名「セマンティックモデル」に変更となっています。
Datasets renamed to semantic models | Microsoft Power BI Blog | Microsoft Power BI

テナント設定とは

Power BIはデータセットを元にレポートが作成され、Power BIサービスへ発行されて組織内で共有されます。この際、発行されたレポートやデータセットなどのアイテムについて、通常はPower BI管理者と呼ばれる担当者が適切な閲覧設定やデータアクセス制限などを設定し、組織内のデータポリシーに従って運用を行います。

一般的に、Power BI管理者はデータに関するオーナーシップを持つIT部門が担当しますが、これまでAPIを介して各種設定を取得することができなかったため、一部の企業では設定項目名や設定のON/OFFなどを定期的に管理するためにスクリーンショットからOCRを使用していました。設定項目をモニタリングする意図として、

  • Power BIサービスの設定に関する管理体制を整える
  • 新規に追加された設定をいち早く把握
  • 削除された設定をいち早く把握

といったことが挙げられます。以前はこれらの作業が手動で行われていましたが、下記Blogの通り、API経由で設定情報を取得できるようになったことは、Power BI管理者や組織にとって非常に有益な進歩となりました。

powerbi.microsoft.com

テナント設定を取得する

取得方法1

下記Get Tenant Setting APIを使用することで、簡単にテナントの設定を取得することができます。

learn.microsoft.com

上記リンク先より、以下の手順でテナント設定を取得していきます。なお、全て英語となりますが、簡単なので心配することはありません。

  • 画面真ん中にある「使ってみる」>「アカウントで続行する」をクリック(Power BIサービスにログインしていない場合はユーザー名とパスワードを入力)
  •  そのまま「実行」をクリック

  • 返された結果の本文を「コピー」
  • メモ帳を立ち上げる
    Win + R(ファイル名を指定して実行) > notepadと入力しOK
  • コピーされたコンテンツを張り付けて、TenantSetting.jsonという名前で保存
  • Power BI Desktopを立ち上げ、コネクタをJSONで指定
  • 先程保存した「TenantSetting.json」を指定すれば下記のように、テナントの設定が全て抽出される

この方法は最も手軽で行うことができるテナント設定の抽出法であり、月に1回テナント設定の変更有無についての確認するには十分でしょう。各月で変化を見るために、保存するJSONのファイルをTenantSetting_YYYYMM(例: TenantSetting_202309.json)にすると、後でPower Queryを使ってデータを結合して過去の情報を比較できるためお勧めです。

取得方法2

PowerShellを使用した取得方法となります。なお、PowerShellを使用するためには、Power BI Cmdletsをインストールする必要がありますので、下記よりインストールしておいてください。

learn.microsoft.com

インストールが完了した後、検索画面でPowerShellを呼び出します。

Login-PowerBIと入力し、アカウントを選択します。

Invoke-PowerBIRestMethodと入力しEnter

URLの部分に先ほどコピーしたアドレス
https://api.fabric.microsoft.com/v1/admin/tenantsettings
を入力してEnter(下図③)
最後にMethod(下図④)でGETを入力してEnter

全てが無事終わると、結果がJSON書式で返されます。

このままでは大きいので、Ctrl + マウスホイールを使ってサイズを小さくし、JSON部分をハイライトしてCtrl + Cでコピー > テキストエディタに張り付けて名前を保存します(取得方法1と同じ流れ)。

Power BIからデータを取得

Power BIを使用して保存したJSONを解析し、可視化できるようになります。

  • TenantSetting
//TenantSetting
let
Source = Json.Document(File.Contents("C:\Users\Administrator\Desktop\Tenant_Setting.json")),
  Navigation = Source[tenantSettings], 
  #"Converted to table" = Table.FromList(Navigation, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 
  #"Expanded Column1" = Table.ExpandRecordColumn(
    #"Converted to table", 
    "Column1", 
    {"settingName", "title", "enabled", "canSpecifySecurityGroups", "tenantSettingGroup"}, 
    {"settingName", "title", "enabled", "canSpecifySecurityGroups", "tenantSettingGroup"}
  ), 
  #"Changed column type" = Table.TransformColumnTypes(
    #"Expanded Column1", 
    {
      {"settingName", type text}, 
      {"title", type text}, 
      {"enabled", type logical}, 
      {"canSpecifySecurityGroups", type logical}, 
      {"tenantSettingGroup", type text}
    }
  )
in
  #"Changed column type"

おまけ

テナント設定は全て英語となっていますので、日本語環境でテナント設定を見るのは難しくなります。そこで、日本語版テキストを抽出できるカスタム関数とCSVを作りましたので、こちらを参考にご自身のニーズに合わせてご活用ください。

  • fnGetTenantSetting
//fnGetTenantSetting
(yyyymm as text) =>
let
    root_url = "https://raw.githubusercontent.com/marshal115/Others/main/",
    csv = "TenantSetting_" & yyyymm & ".csv",
    path = root_url & csv,
    Source = 
    try
        Csv.Document(
            Web.Contents(path),
            [
                Delimiter=",", 
                Encoding=932, 
                QuoteStyle=QuoteStyle.None
            ]
        )
    otherwise
        "YYYYMM(例: 202309, 202310)という形式でyyyymmが入力されていることを確認してください。また、https://github.com/marshal115/Others/blob/main/にファイルが存在することを確認してください",
    PromoteHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    ChangeDataType = Table.TransformColumnTypes(PromoteHeaders,{{"settingName", type text}, {"title", type text}, {"tenantSettingGroup", type text}, {"title_JP", type text}, {"tenantSettingGroup_JP", type text}})
in
    ChangeDataType

使い方は簡単で、

  1. Power BI Desktopから空のクエリを作る
  2. 上記ソースコードをペースト
  3. (カスタム関数になるので)名前をfnGetTenantSettingに変更
  4. 202309や202310を入力(執筆時点は202309以降の日本語訳しかありませんので、ファイルが存在しないyyyymmを入力すると、エラーが発生します)
  5. 入力した月のテナント設定(日本語翻訳版)を抽出可能

Githubにデータを載せていますので、下記より確認できます。

github.com

なお、CSV単体をWeb.Contentで取得する場合は下記アドレスを入力して取得してください。

https://raw.githubusercontent.com/marshal115/Others/main/TenantSetting_202310.csv

※テナント設定の各項目(グループ、タイトル)の翻訳はPower BIサービス側(Fabricポータル)にある日本語名と一致させていますが、使用される際には自己責任でお願いします。

次回はPower Automateで定期的にテナント設定をOneDriveに抽出し、自動化を行うやり方を紹介します。

*1:REST API(Representational State Transfer Application Programming Interface)は、ソフトウェアアプリケーション間でデータを交換するための通信プロトコルの一つです。REST(Representational State Transfer)は、Webアーキテクチャスタイルの一部であり、シンプルで拡張性があり、リソース(データやサービス)へのアクセスを提供する方法です