XMLA で Direct Lake セマンティックモデルを 別のワークスペースにコピーする

## はじめに



デプロイパイプラインで、 Direct Lake のセマンティックモデル（サービス上で作成したもの）を別環境に送ることができなかったので、覚書
なるべく開発者ツールを使わずに、一般に企業で許可されているSSMS（SQL Server Management Studio）でやります。

注意：2024/01 時点の情報です。（デプロイパイプラインが対応したらこの手順は不要になるかと）

### 2024/6/27 追記

- この方式でguid が異なる場合には同じ名前の別のセマンティックモデルが発生することがあることに注意ください
    - https://learn.microsoft.com/en-us/power-bi/enterprise/service-premium-connect-tools#duplicate-semantic-model-name
- デプロイパイプラインで Direct Lake セマンティックモデルが対応されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/127eb560-88c9-659d-24af-d5673909ce23.png)
 https://blog.fabric.microsoft.com/en-us/blog/microsoft-fabric-may-2024-update?ft=All



### 参考

- [Power BI での XMLA エンドポイントを使用したセマンティック モデルの接続と管理 - Power BI | Microsoft Learn](https://learn.microsoft.com/ja-jp/power-bi/enterprise/service-premium-connect-tools)

## 前提条件

容量の設定から XMLA エンドポイントでの書き込みを許可してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/aadf6a3d-4e7a-0e5a-a637-b801ac1e94f9.png)


## 手順

### 準備

まずは、ウェアハウスを開発ワークスペースと本番ワークスペースに同名で作っておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/95b814c2-c89e-efdc-2062-58d59f768903.png)

次に dev ワークスペースでセマンティックモデルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d02ecbca-9f30-c029-9a5c-1ef7e3ac2645.png)

この、 SM_taxi_warehouse を Prod 環境に移送します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6cbec7ea-5c41-b346-b2eb-c5d9bac3a30f.png)

### 開発環境のセマンティックモデルの定義を取得


1. ワークスペースの設定→プレミアムから、ワークスペースのURLを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3a01d355-a88c-09bf-5c42-1bd51a33f0ee.png)

2. SSMS を起動し、Analysis Service 接続画面から、サーバー名に先ほど取得したURLを入力します。ユーザー名は Microsoft Fabric (Power BI Service) で使用しているアカウントのID、というかメールアドレスを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5ce02c58-c03e-b876-3b01-ad13942a566a.png)
3. 接続が成功すると、ワークスペースのセマンティックモデルが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/134a5f39-16f1-0c43-4b5c-f18a663a4e47.png)
4. 対象のセマンティックモデルを右クリックして、CREATE OR REPLACE のスクリプトを出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a2ed8d2c-ea06-df31-e4a7-4a40537c9b48.png)
5. 内容をコピーして、保存しておきましょう。git とか使っておくのもよいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/923dc421-3ec8-da6e-33ce-6948ae998a0f.png)

### 本番環境に XMLA を発行

1. 開発と同じ手順で、SSMS で本番ワークスペースに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/23f1eb50-ce24-cecf-a15b-930d61ca724f.png)

2. サーバー名を右クリックして、XMLA の新しいクエリ画面を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b8b0ec80-bc4c-6b39-41bc-ca576690f16c.png)

3. 先ほど保存した開発環境の XMLAを実行します。色々消してもいいプロパティがありますが、特に問題なく動作するので割愛。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/78c2c8bd-84c3-ea01-3ba8-f45fd84a5d24.png)

4. Prod 環境にセマンティックモデルが発行されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d8283fed-9e45-4e23-d99c-ef000e5c2a3f.png)

5. ただし、この状態では開発環境のウェアハウスに接続されたものになります。（アップストリームがdevを向いている）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3ccd9d25-069e-0903-ef87-35aa88061491.png)

6. XMLAの画面に戻り、Database Query を確認してみます。この値を本番に向けたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1e6caa45-d678-a5c1-b374-3c90c4d9ea43.png)


### データベースの向き先変更

1. まずは、ウェアハウスへの接続文字列を取得します。ウェアハウスの横の・・・から、**SQL接続文字列をコピーする**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c57514b8-33b7-3fbb-6632-ad0f23a4e297.png)

2. 値をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fa636a1a-4fde-2852-df05-c2608863fd6f.png)

3. 次にウェアハウスのIDを取得します。対象のウェアハウスを開いた際のURLから取得可能です。app.powerbi.com/groups/{ワークスペースのID}/datawarehouses/{ウェアハウスのID}/dataView?experience=data-factoryとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/714014d9-aab6-4fa4-7f8f-66656aa8ed06.png)

4. XMLAのウェアハウスへの接続文字列の該当箇所は以下です。これを置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ba09d8a8-873c-6ba9-7f2b-555a820a47c7.png)

5. XMLAのウェアハウスのIDの該当箇所は続きに入っています。これを置き換えます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/85363db1-f6b0-efbd-2d86-c326544d403b.png)

6. XMLA を実行し、セマンティックモデルのアップストリームを確認すると、本番に切り替わっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e5b5a194-8892-334e-126d-3028396528eb.png)

7. ただ、この時、更新のスケジューリング設定にて確認可能なセマンティックモデルの資格情報はリセットされるので、資格情報の編集で再設定してあげましょう。参考（[データソースへの認証をシングルサインオン以外にする](https://qiita.com/ryoma-nagata/items/2af0fc0f6ab58cf764ac#%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%B8%E3%81%AE%E8%AA%8D%E8%A8%BC%E3%82%92%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3%E4%BB%A5%E5%A4%96%E3%81%AB%E3%81%99%E3%82%8B)）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cf7b0a81-2d08-17db-d75f-2143df768284.png)

8. また、Web 画面で見てみると、以下のようにデータの更新日時がおかしくなっていることがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/21cccd4c-3d5a-10b1-8617-29df55115092.png)

9. この場合には、セマンティックモデルからデータの更新をしてあげましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a6fc0572-c8fe-b26d-beee-6479c7757f83.png)


### Web 画面で編集ができない？


このようにデプロイした場合、セマンティックモデルの画面で、データモデルを開くがグレーアウトされていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/424a9085-e256-7a0c-4e00-4566f5f9a724.png)

今までは、XMLA エンドポイントからデプロイしたセマンティックモデルは Web 上で編集できませんでしたが、ワークスペース設定を変更することで対応可能となりました。

https://x.com/DOtykier/status/1752251740684960137?s=20

1. ワークスペース設定にて、**ユーザーはPower BI サービスでデータ モデルを編集できます (プレビュー)** をオンにしましょう。既定ではオフになってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f1198d97-455e-72f5-0bd7-f1c552fb0470.png)
2．データモデルを開くが選択可能になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2a4b1ff0-47f0-783b-91f6-1d0249a385bb.png)


(Opion) Web 上でデータモデルを編集するにはテナント設定も必要です。（既定で有効のはずです）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/772fa2c0-7626-5c30-6bc6-50033f9a54a7.png)