Fabricワークスペース内でレポートに紐づいていないセマンティックモデルを出力する方法

Microsoft Fabric(以下、Fabric)を使っていると、時間とともにセマンティックモデル(データセット)が増えていきます。レポートの作り直しや検証用モデルの放置などが積み重なると、以下のような情報が必要となります。

  • どのセマンティックモデルがレポートに紐づけられているのか
  • レポートに紐づいていないセマンティックモデルはどれか

この記事では、Fabric ワークスペース内で「レポートに紐づいていないセマンティックモデル」を PowerShell で抽出する方法を紹介します。削除判断を行う前に、まずは『未利用候補の見える化』をゴールとした内容です。

Fabricとは

Microsoft Fabric は、Microsoft が提供する統合データ分析プラットフォームです。Power BI、Azure Synapse Analytics、Azure Data Factoryなどを統合したサービスです。

  • データの収集
  • 保管(Lakehouse / Warehouse)
  • 加工(パイプラインやノートブック)
  • 分析・可視化(Power BI レポート)

これらは ワークスペース という単位で管理され、ワークスペース内にレポート、セマンティックモデル、Lakehouse などのリソースが格納されます。運用面では、ワークスペース単位で「何がどれだけ使われているか」を定期的に整理することが重要になります。

セマンティックモデルとは

Power BI/Fabric における セマンティックモデル は、従来の用語で言うところの「データセット」です。具体的には、以下機能をまとめた「分析用データモデル」であり、多くの場合、レポートはこのセマンティックモデルに接続して可視化を行います。

  • データソースから取得したテーブルや列
  • 各テーブルのリレーションシップ
  • メジャー(DAX)や計算列

前提条件

  • 権限
    • 対象ワークスペースに対して 閲覧者(Viewer)以上 の権限
  • 環境
    • Windows 環境で PowerShell が利用可能
    • 組織のポリシーで PowerShell モジュールのインストールが許可されている
    • インターネット経由でFabric に接続できる

手順

ここから、実際に「レポートに紐づいていないセマンティックモデル」を抽出して CSV 出力するまでの手順を説明します。

全体の流れは次の通りです。

  1. 必要なモジュールのインストール、インポート
  2. Power BI にサインイン
  3. 対象ワークスペースを特定
  4. セマンティックモデル(データセット)の一覧を取得
  5. レポートの一覧を取得
  6. 両者を突き合わせて「紐づいていないモデル」を抽出
  7. CSV に出力

モジュールのインストール

以下コマンドを実行し、モジュールをインストール、インポートします。

※モジュールのインストールは初回のみ実施します
※PowerShellを管理者として実行する必要があります

Install-Module -Name MicrosoftPowerBIMgmt -Scope CurrentUser -AllowClobber -Force
Import-Module MicrosoftPowerBIMgmt

Power BI にサインイン

以下コマンドを実行し、Power BIにサインインします。

※閲覧者権限があるユーザーでサインインします

# Power BI サービスにサインイン
Connect-PowerBIServiceAccount

対象ワークスペースを特定

以下コマンドを実行し、アクセスできるワークスペース一覧を出力し、調査対象としたいワークスペースのIDを$workspaceIdに入力します。

# 自分がアクセスできるワークスペース一覧
$myWorkspaces = Get-PowerBIWorkspace -Scope Individual -All
$myWorkspaces | Select-Object Name, Id $workspaceId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  # 上で確認したIDに置き換え

セマンティックモデル(データセット)一覧を取得

以下コマンドを実行し、ワークスペース内のセマンティックモデルの一覧を取得します。

# ワークスペース内のセマンティックモデル(データセット)
$datasets = Get-PowerBIDataset -WorkspaceId $workspaceId $datasets | Select-Object Id, Name

レポート一覧を取得

以下コマンドを実行し、ワークスペース内のレポート一覧を取得します。

# ワークスペース内のレポート一覧
$reports = Get-PowerBIReport -WorkspaceId $workspaceId $reports | Select-Object Id, Name, DatasetId

「レポートに紐づいていないセマンティックモデル」を抽出

以下コマンドを実行し、「レポートに紐づいていないセマンティックモデル」を抽出します。

※$result が、「同じワークスペース内でレポートに一切紐づいていないセマンティックモデル」の一覧になります。
※同一ワークスペース内のレポートのみを検出しています。他ワークスペースのレポートや Excel から接続されているケースは検出できません。

# レポートが参照しているセマンティックモデルIDの一覧(重複除去)
$usedDatasetIds = $reports.DatasetId | Where-Object { $_ -ne $null } | Sort-Object -Unique # レポートに紐づいていないセマンティックモデルを抽出
$unusedDatasets = $datasets | Where-Object {
    $usedDatasetIds -notcontains $_.Id
} # 結果をわかりやすく整形
$result = $unusedDatasets | ForEach-Object {
    [PSCustomObject]@{
        WorkspaceId      = $workspace.Id
        WorkspaceName    = $workspace.Name
        DatasetId        = $_.Id
        DatasetName      = $_.Name
        IsOnDedicatedCapacity = $_.IsOnDedicatedCapacity
    }
} # 画面表示
$result

CSVに出力する

以下コマンドを実行し、CSVファイルに出力します。

# 出力先パス(環境に合わせて変更してください)
$exportPath = "C:\Temp\UnusedSemanticModels.csv" $result |
    Sort-Object -Property DatasetName |
    Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8 Write-Host "レポートに紐づいていないセマンティックモデル一覧を出力しました: $exportPath"

実際に生成されたCSVは以下のようになります。

スクリプト

スクリプト全体は以下の通りです。

Import-Module MicrosoftPowerBIMgmt
# Power BI サービスにサインイン
Connect-PowerBIServiceAccount # 自分がアクセスできるワークスペース一覧
$myWorkspaces = Get-PowerBIWorkspace -Scope Individual -All $myWorkspaces | Select-Object Name, Id $workspaceId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  # 上で確認したIDに置き換え # ワークスペース情報(名前も取っておくとレポートに便利)
$workspace = Get-PowerBIWorkspace -Id $workspaceId
# ワークスペース内のセマンティックモデル(データセット)
$datasets = Get-PowerBIDataset -WorkspaceId $workspaceId
$datasets | Select-Object Id, Name
# ワークスペース内のレポート一覧
$reports = Get-PowerBIReport -WorkspaceId $workspaceId
$reports | Select-Object Id, Name, DatasetId # レポートが参照しているセマンティックモデルIDの一覧(重複除去)
$usedDatasetIds = $reports.DatasetId | Where-Object { $_ -ne $null } | Sort-Object -Unique # レポートに紐づいていないセマンティックモデルを抽出
$unusedDatasets = $datasets | Where-Object {
    $usedDatasetIds -notcontains $_.Id
} # 結果をわかりやすく整形
$result = $unusedDatasets | ForEach-Object {
    [PSCustomObject]@{
        WorkspaceId      = $workspace.Id
        WorkspaceName    = $workspace.Name
        DatasetId        = $_.Id
        DatasetName      = $_.Name
        IsOnDedicatedCapacity = $_.IsOnDedicatedCapacity
    }
} # 画面表示
$result # 出力先パス(環境に合わせて変更してください)
$exportPath = "C:\Users\xxxxx\Desktop\UnusedSemanticModels.csv" $result |
    Sort-Object -Property DatasetName |
    Export-Csv -Path $exportPath -NoTypeInformation -Encoding UTF8 Write-Host "レポートに紐づいていないセマンティックモデル一覧を出力しました: $exportPath"

最後に

この記事では、Fabric ワークスペース内で レポートに紐づいていないセマンティックモデルを PowerShell で抽出し、CSV に出力する方法を紹介しました。

  1. ワークスペース内のセマンティックモデル一覧を取得
  2. 同じワークスペース内のレポート一覧を取得
  3. レポートが参照している DatasetId を集める
  4. それに含まれないセマンティックモデルを「未利用候補」として抽出
  5. 結果を CSV に出力

注意点としては、以下の通りです。

  • 他ワークスペースのレポートや Excel など、レポート以外の接続元から利用されている可能性は残る
  • 「未利用」と断定せず、あくまで 整理検討の候補リスト として活用する

まずは対象ワークスペースを一つ選び、「未利用候補の見える化」から始めてみてください。

執筆担当者プロフィール
和田 剣斗

和田 剣斗(日本ビジネスシステムズ株式会社)

業務では主にAzureに携わっています。趣味はサウナや資産運用です。最近はテントサウナにはまっています。

担当記事一覧