[備忘録] Microsoft Fabric データフローとセマンティックモデルの列追加の反映挙動を検証してみた


## はじめに

Microsoft Fabric を利用して、Dataflow Gen2 → Lakehouse → セマンティックモデル → Power BI レポートの一連の構成を組む中で、

> データフローで列を追加したら、その列はセマンティックモデルにも自動で反映されるのか？

という疑問があったため、実際に手順を踏んで挙動を検証してみました。

---

## 1. Dataflow Gen2 の作成と Lakehouse への書き込み

### データフローの作成と接続設定

- Fabric のワークスペースから **新しいデータフロー (Gen2)** を作成
- 任意の名前を付けて開始
- 今回はデータソースとして、**SQL Server** をデータソースとして選択し、接続を設定
- カスタム SQL ステートメントでクエリを記述し、必要な列を取得

### PowerQuery での編集処理

- 必要に応じて、列のデータ型変更や変換処理などを実施
- 編集が完了したら、「次へ」で同期先の設定へ進む

### Lakehouse を同期先に設定

- 出力先に「Lakehouse」を指定し、テーブル名を設定
- 「自動設定を使用する」を選択し、マッピングが正しく行われているか確認
- 設定が完了したら「保存と実行」を実施

### 同期結果の確認

- 実行ステータスが「成功」となれば OK
- Lakehouse 側に新たなテーブルが作成され、データが反映されていることを確認

---

## 2. セマンティックモデルとレポートの作成

### セマンティックモデルの作成

- Fabric 上で「新しいセマンティックモデル」を作成
- 対象の Lakehouse テーブルを選択し、モデルを作成
- メジャーやデータ型の微調整が可能

### レポートの作成

- 作成したセマンティックモデルをベースに、新規レポートを作成
- グラフやカードなどを使ってビジュアルを構成し、「保存」

---

## 3. データフローでの列追加とセマンティックモデルへの反映検証

### データフローで列を追加・編集

- 既存のデータフローを編集
- カスタム SQL に新しい列を追加するなどして、PowerQuery 上に列が増えるよう調整
- 編集後、「保存と実行」で再度実行

### Lakehouse テーブルへの反映確認

- テーブルを開いて新しい列が追加されていることを確認
- 値の変化や型も正しく反映されているかチェック

### セマンティックモデルに反映されるか？

- 結論：**セマンティックモデルには自動では反映されません**

「更新」操作をしても、初回作成時の列スキーマが保持され、新しい列は表示されません。

### 手動で列を反映させる方法

1. セマンティックモデルの「編集モード」に入る
2. 該当のテーブルをクリックし、「テーブルを編集」
3. **上部の「リロード」ボタン**をクリック
4. 最新のスキーマが取得され、「確認」をクリックすると列が反映される

### レポートへの反映

- モデルに列が取り込まれると、レポート側でも新しい列が使用可能になります
- グラフやテーブルに追加して可視化することができます

---

## おわりに

Microsoft Fabric のセマンティックモデルは非常に便利ですが、**Lakehouse 側のスキーマ変更（列追加など）は自動では反映されない**ことを確認しています。

そのため、データフローやソースを更新した後は、セマンティックモデルで手動の「リロード＋確認」操作を忘れずに行いましょう。

---

## 参考リンク

- [データフローの出力設定とスキーマ管理](https://learn.microsoft.com/ja-jp/fabric/data-factory/dataflow-gen2-data-destinations-and-managed-settings)
- [セマンティックモデルの動作仕様](https://learn.microsoft.com/ja-jp/fabric/data-warehouse/semantic-models)

---

## 詳細手順（画面キャプチャー付き）
それぞれの詳細手順は以下になります。
## 1．データフローを作成・設定・実行し、Lakehouse側にデータを書き込む

データフロー（Gen2）を作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/ca8c412d-6da3-420a-af0d-83336cdfebad.png)

データフローの名前を指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/ed958259-74ee-47e8-b5be-b3b3f706fcc2.png)

SQL Server からインポートする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/3f33f509-873e-4085-9b78-6369581fb610.png)

SQL Server と接続して、カスタマイズSQLステートメントを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/adbeee59-026e-44c2-98a0-18f66bd5f9cc.png)

PowerQuery操作画面で、要件に応じて列のデータ型を変更したり、クエリ設定で処理ステップ（データ型変更など）を実施する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/171ec3b0-c065-4a85-8c11-0e0ac99264cc.png)

データ同期先に、＋ボタンをクリックし、レイクハウスを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/363764c1-e4a7-4001-87d5-b65380410105.png)

接続先のレイクハウスを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/31492452-64ed-4e97-a4be-097653c6d224.png)

新しいテーブルを選択する。
同期先のレイクハウス名を選択し、テーブル名を指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/b2327bef-d63a-477b-afb2-09b4e17bb53b.png)

「自動設定を使用する」を選択し、列マッピングにエラーがないことやマッピングされたデータ型に警告がないことを確認してから設定を保存する。
自動設定詳細については、必ず、下記公開情報を参考にしてください。
https://learn.microsoft.com/ja-jp/fabric/data-factory/dataflow-gen2-data-destinations-and-managed-settings
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/e82d7afa-ac7e-4b90-aee1-b3116066522e.png)

データ同期先の設定が完了したら、念のため設定内容を確認する。（データ同期先のレイクハウスにカーソルを合わせるとポップアップが表示される）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/69972f01-43f9-4109-bd62-5432816b13f4.png)

データフローを実行する。「保存と実行」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/6fd8555a-f0be-4040-81b6-10bd361f5b2f.png)

データフローの最新の実行を確認し、状態が進行中であることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/8671ab40-999e-496f-bb19-421ff0d01138.png)

しばらくすると、状態が「成功」になることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/296e32ae-2067-4054-96ca-a4aca9c92b2d.png)

アクティビティ名をクリックすると、データがレイクハウスに書き込まれたことを示す情報が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/d1d3dd9a-cab1-4e1b-9e37-9d05040b3c1a.png)

Lakehouse側でテーブルが新たに作成されていることを確認し、列名やデータ型が想定どおりであるかを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/a6692a32-3aff-4425-81f3-ebcfe1e9ccce.png)

ーーーここまで、データフローの作成・設定・実行を一通り終え、Lakehouse側にテーブルとデータが書き込まれたことを確認ーーー

## 2．Lakehouseのテーブルを基にセマンティックモデルを作成し、レポートを作成する

Lakehouseのテーブルをもとに、新しいセマンティックモデルを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/b45a01ba-1681-4070-ad09-ed36aec6bbd1.png)

セマンティックモデルの名前を指定し、対象テーブルを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/2262b3ae-de12-4374-abce-8aaa73203684.png)

要件に応じてメジャーを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/812555e3-0a5b-4c04-9c15-cf86370e9593.png)

新しいレポートを作成する。必要に応じて、セマンティックモデルのバージョン履歴に保存しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/5ff13441-d71f-45f6-b01d-bae0c118283e.png)

レポートのレイアウトを整え、保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/fd23bc1c-10ee-47fd-9a50-28f46696aaac.png)

レポートを保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/aa85d0b8-86bf-4e16-9c49-fd97e4551c4f.png)

レポートが表示されることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/11716121-a186-42e1-82ed-fef3237a5cc1.png)

## 3．データフローで分析対象データの編集や列の追加を行い、その変更がLakehouseテーブルおよびセマンティックモデルに反映されることを確認する

要件に応じて、データフロー側で処理の変更や追加のデータ加工が必要な場合は、データフロー上で対応する。
この例では、値の修正やSQLステートメントを用いた列の追加を想定している。
・値の修正：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/f594e142-b5ae-4ab4-b766-e4a4ed65e035.png)

・SQLステートメントの修正を用いて、新しい列を追加する：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/ca24ac25-d3cb-4805-a444-2a1f3cf4a1a8.png)

各修正内容が PowerQuery の操作画面に反映されていることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/a8eadb90-11ba-4e13-8c23-fbcdd86dd69f.png)

変更したデータフローを実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/00d1b765-1da4-4048-aacf-825fe60628a3.png)

データフローの実行が成功したことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/7eab855e-8549-4703-b2ee-72cc81bb2eff.png)

Lakehouseテーブル側でデータ変更が反映されるか、最新の情報に更新する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/77593612-f600-4e30-9962-136d6d6fae9c.png)

各種の変更がテーブルに反映されたことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/98517951-877d-4777-97cc-9b24883dc833.png)

セマンティックモデルは、初回作成時のスキーマを基に構築されるため、後からテーブルに列を追加しても自動では反映されないことを確認している。
以下の例ですと、「更新」を実施しても新規の列は追加されていないことを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/968d0bdd-7870-4982-8c4e-9a433f576715.png)

更新完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/fabc2bcb-548f-45ea-a9c1-07c60ef290f1.png)

このとおり、セマンティックモデルを更新しても初回作成スキーマのままが保持されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/9af5b071-1a0e-47aa-9c95-644a76ae62e5.png)

追加した列をセマンティックモデルに反映するには、手動での編集を実施する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/95d1671d-c8d2-47bf-a021-236ff04523bf.png)

テーブルを編集する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/e2e6dc2e-c25b-40ff-baff-a1b218ebf165.png)

テーブル情報を取得するには、このリロードボタンをクリックし、最新スキーマが取得されたあと、確認ボタンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/071bf9c7-5fb1-4f6a-b641-6e11c7256a4c.png)

新しい列が追加されたことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/44b78d5c-9e71-4783-9251-0359ccf511c4.png)

レポート側にも新しい列が追加されたことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402119/ff9cf111-ac07-4a15-a1ff-3acedd664ab4.png)