fabric-integration について
Power BI と Microsoft Fabric の開発者向け統合ガイドです。Direct Lake、OneLake、Lakehouse、Dataflow Gen2 の連携に加え、セマンティックモデル接続、データ準備、リアルタイム分析の流れを扱います。
主な機能
- 01Direct Lake の読み取り、更新、フォールバック動作の説明
- 02OneLake ショートカットとファイル API の紹介
- 03Lakehouse と Warehouse の Power BI 接続の整理
- 04Dataflow Gen2 から Direct Lake へのフローの解説
- 05Fabric のリアルタイムデータとセマンティックモデル連携の紹介
活用シーン
- 01Lakehouse データを使った Direct Lake セマンティックモデルの構築
- 02Dataflow Gen2 から Power BI へのデータフロー設計
- 03OneLake または外部ショートカット経由でのデータ接続
- 04リアルタイムイベントデータの Power BI 分析への取り込み
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill fabric-integrationインストール後、Claude Code で/fabric-integrationを入力して読み込まれたか確認します。
同梱ファイルreferences/fabric-architecture-patterns.md
詳細
Microsoft Fabric との統合
概要
Microsoft Fabric は、Power BI、Data Factory、Data Engineering、Data Science、Real-Time Intelligence、Data Warehouse を含む統合分析プラットフォームです。Power BI は、Fabric の視覚化およびセマンティック モデリング レイヤーとして深く統合されています。
Direct Lake モード
Direct Lake は Fabric 専用のストレージ モードです。データをインポートしたり、DirectQuery リクエストを送信したりすることなく、OneLake の delta テーブルからデータを直接読み取ります。
Direct Lake の仕組み
- フレーミング: 更新時に、Direct Lake は delta テーブルからメタデータ(Parquet ファイルへの参照)のみをコピーします。所要時間は数秒です
- オンデマンド読み込み: クエリがモデルにアクセスすると、Parquet ファイルから VertiPaq エンジンにデータが直接読み込まれます
- データの重複なし: インポートとは異なり、セマンティック モデルにデータのコピーは保存されません
- インポートに近いパフォーマンス: メモリに読み込まれると、クエリは VertiPaq の速度で実行されます
Direct Lake とインポート、DirectQuery の比較
| 機能 | インポート | DirectQuery | Direct Lake |
|---|---|---|---|
| データの鮮度 | 更新時点のスナップショット | リアルタイム | ほぼリアルタイム(フレーミング後) |
| クエリのパフォーマンス | 最速(すべてメモリ内) | ソースによって異なる | インポートに近い(オンデマンド読み込み) |
| 更新時間 | 数分から数時間 | 該当なし | 数秒(フレーミングのみ) |
| 更新コスト | 高い(データ全体をコピー) | なし | 非常に低い(メタデータのみ) |
| データサイズの上限 | 10GB(Premium)、1GB(PBIX) | ソースの上限 | Fabric 容量の上限 |
| DAX のサポート | 完全 | 制限あり | 完全 |
| 計算列 | あり | なし | あり |
| ソース要件 | 任意 | 任意 | OneLake の delta テーブルのみ |
| 容量要件 | 任意 | 任意 | Fabric F-SKU |
Direct Lake のバリアント(2025~2026 年 GA)
| バリアント | ソース | 複数ソース | フォールバック | ユースケース | GA ステータス |
|---|---|---|---|---|---|
| Direct Lake on OneLake (DL/OL) | OneLake の delta ファイル | あり(複数の Fabric アイテム) | フォールバックなし | 柔軟な複数のレイクハウス | GA |
| Direct Lake on SQL (DL/SQL) | Fabric SQL エンドポイント | なし(単一の Fabric アイテム) | DirectQuery にフォールバック | SQL 中心の単一ソース | GA |
Direct Lake セマンティック モデルの作成
Power BI Desktop(2025 年以降のプレビュー)で作成する場合:
- データを取得 > OneLake データ ハブ
- Fabric のレイクハウスまたはウェアハウスを選択します
- テーブルを選択します(自動的に Direct Lake として読み込まれます)
- Desktop でメジャーとリレーションシップを作成します
- Fabric ワークスペースに発行します
Fabric サービスから作成する場合:
- Fabric でレイクハウスまたはウェアハウスを開きます
- 「新しいセマンティック モデル」をクリックします
- 含めるテーブルを選択します
- モデルを Web で開き、メジャーとリレーションシップを追加します
TOM からプログラムで作成する場合:
var database = new Database() { Name = "DirectLakeModel" };
var model = new Model() { Name = "DirectLakeModel" };
database.Model = model;
// Direct Lake partition source
var table = new Table() { Name = "Sales" };
table.Partitions.Add(new Partition() {
Name = "Sales-DL",
Mode = ModeType.DirectLake,
Source = new EntityPartitionSource() {
EntityName = "Sales",
SchemaName = "dbo",
ExpressionSource = new ExpressionSource() {
Expression = "DatabaseQuery"
}
}
});
model.Tables.Add(table);
重要な違い: DL/OL は DirectQuery にフォールバックしません。データをメモリから提供できない場合、クエリは失敗します。そのため、DL/OL モデルは容量のガードレール内に収まるよう、慎重にサイズを調整する必要があります。
容量ごとの Direct Lake ガードレール
| ガードレール | F2 | F4 | F8 | F16 | F32 | F64 | F128 |
|---|---|---|---|---|---|---|---|
| ディスク上のモデルサイズ上限 | 2 GB | 4 GB | 8 GB | 16 GB | 32 GB | 64 GB | 128 GB |
| テーブルごとの行数上限 | 300M | 300M | 300M | 1.5B | 3B | 6B | 6B |
| テーブルごとのファイル数/行グループ数の上限 | 1K | 1K | 1K | 1K | 1K | 5K | 5K |
| 同時実行可能な DL クエリ数 | 4 | 8 | 16 | 32 | 64 | 128 | 256 |
最大メモリはページングに対するソフト上限です。超過するとパフォーマンスは低下しますが、失敗はしません。
ディスク/OneLake 上のモデルサイズ上限はハード ガードレールです。超過すると、DQ にフォールバックする(DL/SQL)か、クエリが失敗します(DL/OL)。
Direct Lake フォールバックの構成
| フォールバックの動作 | 設定 | 影響 |
|---|---|---|
| DirectQuery への自動フォールバック | 既定(DL/SQL のみ) | クエリは引き続き動作しますが、速度が低下します |
| フォールバックをブロック | DirectLakeBehavior = DirectLakeOnly | DL から提供できない場合、クエリは失敗します |
| フォールバックなし | 既定(DL/OL) | データが利用できない場合、クエリは常に失敗します |
Fabric Capacity Metrics アプリでフォールバックを監視します。頻繁なフォールバックは、モデル設計に問題があることを示しています。
一般的なフォールバックのトリガー(DL/SQL):
- 容量制限により、列がメモリに読み込まれていない
- Direct Lake テーブルの計算列(DQ フォールバックが発生する場合があります)
- テーブル全体のスキャンが必要な特定の DAX パターン
- フレーミングが古い(デルタテーブルが変更されたものの、モデルが再フレーミングされていない)
- ファイル数または行グループ数が容量のガードレールを超えている
Direct Lake による Power BI Embedded(2025 年 3 月 GA)
Direct Lake モードが、Microsoft SLA による裏付けのもと、埋め込み分析で完全にサポートされるようになりました。Import/DirectQuery モデルと同じ埋め込みトークン API を使用して、Direct Lake セマンティックモデルの埋め込みトークンを生成できます。
フレーミング(更新)
# Trigger framing via REST API
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/refreshes
{
"type": "Automatic"
}
フレーミングは Import の更新(数分から数時間)と比べて非常に高速です(数秒)。ほぼリアルタイムのデータを得るには、フレーミングを頻繁にスケジュールします。
OneLake
OneLake は Fabric の統合データレイクです。Azure Data Lake Storage Gen2 上に構築され、デルタ形式を使用する、すべての分析データのための単一のストアです。
OneLake ショートカット
データをコピーせずに外部データに接続します。
| ショートカットの種類 | ソース | ユースケース |
|---|---|---|
| OneLake | 別の Fabric アイテム | ワークスペース間でのデータ共有 |
| ADLS Gen2 | Azure Data Lake | 既存の Azure データ |
| S3 | Amazon S3 | マルチクラウドデータ |
| GCS | Google Cloud Storage | マルチクラウドデータ |
| Dataverse | Dynamics 365 | ビジネスアプリのデータ |
OneLake File API
プログラムから OneLake データにアクセスします。
# Using Azure Storage SDK (OneLake supports ADLS Gen2 API)
from azure.storage.filedatalake import DataLakeServiceClient
service_client = DataLakeServiceClient(
account_url="https://onelake.dfs.fabric.microsoft.com",
credential=token_credential
)
file_system_client = service_client.get_file_system_client(workspace_id)
directory_client = file_system_client.get_directory_client(f"{lakehouse_name}.Lakehouse/Tables")
Fabric Lakehouse
レイクハウスは、データレイクの柔軟性とウェアハウスの SQL 機能を組み合わせます。
Power BI 接続:
- SQL 分析エンドポイント: DirectQuery または Direct Lake 用の読み取り専用 SQL エンドポイント
- デルタテーブル: Direct Lake のネイティブ形式
- ノートブック: Spark ノートブックからデータを書き込み、Power BI で読み取る
Lakehouse から Power BI へのフロー
[Data Sources] --> [Fabric Notebooks/Pipelines] --> [Lakehouse Delta Tables]
| |
v v
[Power Query Dataflows Gen2] [Direct Lake Semantic Model]
|
v
[Power BI Reports]
Fabric Warehouse
Fabric のフルマネージド SQL ウェアハウスです。
- T-SQL サポート: 完全な DML(INSERT、UPDATE、DELETE、MERGE)
- 自動分散ストレージ: インデックスのチューニングは不要です
- Direct Lake 互換: テーブルを Direct Lake ソースとして利用できます
- データベース間クエリ: ウェアハウスとレイクハウスをまたいでクエリできます
Dataflow Gen2
Power BI Dataflows の進化版である、Fabric のクラウドベース ETL です。
| 機能 | Dataflow Gen1 | Dataflow Gen2 |
|---|---|---|
| 出力先 | Power BI データセットのみ | Lakehouse、Warehouse、KQL DB、Azure SQL、ADLS Gen2、SharePoint |
| コンピューティング | Power Query Online | Power Query Online + Fabric Spark |
| ステージング | オプション(Premium) | 常に有効 |
| 増分更新 | 限定的 | 完全サポート(Lakehouse では 2025 年に GA) |
| 監視 | 基本機能 | Fabric 監視ハブ |
| CI/CD | 非対応 | Git 統合 + デプロイメントパイプライン(2025 年) |
| 変数ライブラリ | 非対応 | パラメーター化されたソースパスと式(2025 年) |
| 発行パフォーマンス | シングルスレッドの検証 | クエリ検証の並列化(2026 年) |
Gen1 の非推奨化: Microsoft は Gen1 がレガシーであると発表しました。新規開発ではすべて Gen2 に移行してください。Gen2 は、Gen1 のすべてのコネクタに加え、Fabric ネイティブの出力先をサポートします。
Dataflow Gen2 の出力先(2025~2026 年)
| 出力先 | プロトコル |
|---|---|
| Fabric Lakehouse のデルタテーブル | Delta/Parquet |
| Fabric Warehouse のテーブル | T-SQL |
| Fabric KQL Database のテーブル | KQL |
| Fabric SQL Database のテーブル | T-SQL |
| Azure SQL Database のテーブル | T-SQL |
| Azure Data Explorer(Kusto)のテーブル | KQL |
| ADLS Gen2 のファイル | ファイル(CSV、Parquet) |
| SharePoint のファイル | ファイル |
Dataflow Gen2 から Direct Lake へのパイプライン
- Fabric ワークスペースで Dataflow Gen2 を作成します
- データソースに接続します(任意の Power Query コネクタ)
- 宛先を Lakehouse に設定します(Delta テーブルが作成されます)
- Lakehouse テーブルの上にセマンティックモデルを作成します(Direct Lake)
- セマンティックモデル上にレポートを作成します
リアルタイム インテリジェンス
Fabric のリアルタイム インテリジェンス項目では、ALM ライフサイクル管理が GA になりました(2025 年):
| 項目 | ALM サポート | 統合 |
|---|---|---|
| Eventstream | Git + デプロイメント パイプライン | Event Hubs、Kafka、IoT Hub、カスタム API からデータを取り込みます |
| Eventhouse | Git + デプロイメント パイプライン | KQL データベースを格納します |
| KQL Database | Git + デプロイメント パイプライン | Power BI からの DirectQuery |
| Real-time Dashboard | Git + デプロイメント パイプライン | ストリーミング向けの Fabric ネイティブ ダッシュボード |
| Data Activator | Git + デプロイメント パイプライン | データ条件に基づくアラート/トリガー |
Eventstream から Power BI へのパイプライン
[Event Hubs/Kafka/IoT Hub] --> [Eventstream] --> [KQL Database] --> [Power BI DirectQuery]
|
+--> [Lakehouse] --> [Power BI Direct Lake]
データ準備用ノートブック
Fabric ノートブック(PySpark/Spark SQL)で、Power BI が使用するデータを書き込みます:
# Write DataFrame to lakehouse delta table
df.write.format("delta").mode("overwrite").saveAsTable("Sales")
# Optimized write with partitioning
df.write.format("delta") \
.partitionBy("Year", "Month") \
.mode("overwrite") \
.option("overwriteSchema", "true") \
.saveAsTable("Sales")
# V-Order optimization (improves Direct Lake read performance)
spark.conf.set("spark.sql.parquet.vorder.enabled", "true")
df.write.format("delta").mode("overwrite").saveAsTable("Sales")
V-Order: Direct Lake での読み取りを高速化するため、Parquet データを並べ替える書き込み時の最適化です。ノートブックまたはパイプラインの構成で有効にします。
Power BI のコンテキストでの Fabric 項目
| Fabric 項目 | Power BI との統合 |
|---|---|
| Lakehouse | Direct Lake、DQ 用 SQL エンドポイント |
| Warehouse | Direct Lake、T-SQL クエリ |
| KQL Database | KQL コネクタ経由の DirectQuery |
| Notebooks | データ準備、sempy によるモデル管理 |
| Data Pipelines | 更新とデータ移動のオーケストレーション |
| Dataflow Gen2 | DL での利用に向けた Lakehouse への ETL |
| Eventstream | リアルタイムデータを KQL に送り、その後 PBI に送ります |
| ML Models | ノートブックでスコアリングし、結果を Lakehouse に送ります |
Semantic Link(sempy)
Fabric ノートブックで Power BI セマンティックモデルとやり取りするための Python ライブラリ:
import sempy.fabric as fabric
# List datasets in workspace
datasets = fabric.list_datasets()
# Read data from semantic model using DAX
df = fabric.evaluate_dax(
dataset="SalesModel",
dax_string="EVALUATE SUMMARIZECOLUMNS('Date'[Year], 'Product'[Category], \"Sales\", [Total Sales])"
)
# Read model metadata
tables = fabric.list_tables(dataset="SalesModel")
measures = fabric.list_measures(dataset="SalesModel")
# Refresh dataset
fabric.refresh_dataset(dataset="SalesModel")
Direct Lake を使用した複合モデル(2025 年プレビュー)
単一のセマンティックモデル内で、Direct Lake テーブルと Import テーブルを組み合わせます:
| ソーステーブル | ストレージ モード | 使用する場面 |
|---|---|---|
| Lakehouse ファクトテーブル | Direct Lake | 大量のトランザクションデータ |
| Lakehouse ディメンション | Direct Lake | ゴールドレイヤーの共有ディメンション |
| 外部参照データ | Import | Fabric にない小規模なテーブル |
| 予算/予測 | Import | Excel または外部ソースのデータ |
主な考慮事項: DL テーブルと Import テーブルの両方を含む複合モデルのクエリでは、パフォーマンス特性が異なる場合があります。本番環境のデータ量でテストしてください。
追加リソース
参照ファイル
references/fabric-architecture-patterns.md-- メダリオン アーキテクチャ、データメッシュのパターン、Fabric ワークスペースの設計戦略