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 出力するまでの手順を説明します。
全体の流れは次の通りです。
- 必要なモジュールのインストール、インポート
- Power BI にサインイン
- 対象ワークスペースを特定
- セマンティックモデル(データセット)の一覧を取得
- レポートの一覧を取得
- 両者を突き合わせて「紐づいていないモデル」を抽出
- 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 に出力する方法を紹介しました。
- ワークスペース内のセマンティックモデル一覧を取得
- 同じワークスペース内のレポート一覧を取得
- レポートが参照している DatasetId を集める
- それに含まれないセマンティックモデルを「未利用候補」として抽出
- 結果を CSV に出力
注意点としては、以下の通りです。
- 他ワークスペースのレポートや Excel など、レポート以外の接続元から利用されている可能性は残る
- 「未利用」と断定せず、あくまで 整理検討の候補リスト として活用する
まずは対象ワークスペースを一つ選び、「未利用候補の見える化」から始めてみてください。