Dataverse 仮想テーブル

Power Appsのアプリで他のシステムのデータを使いたいときの方法としては、主に３つあります。

①アプリから他のシステムに直接連携する
②他システムのスキーマ・テーブルをDataverseに持ってくる
③スキーマだけをDataverseに持ってくる（データは他システムに置いたままにする）

今回は③の方法について、Dataverseの「**仮想テーブル**」をご紹介します。

# 概要
仮想テーブルでは、Dataverseからデータを見ることができますが、実際にデータがストアされているのは接続元の外部システムになります。
Dataverseから透過的に、他のシステムのデータを見ているようなイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0abfb91c-b6f9-7be1-4d64-0e009226e5ba.png)


仮想テーブルを使用するメリットは以下のようになっています。
- コーディングなしに、外部システムに存在するデータの統合が可能
- 実行時に外部データソースに直接接続できるので、データレプリケーションをする必要がない
- アプリから見た時にDataverseのテーブルとして扱える
- Dataverse内の他のテーブルとリレーションを張ることができる


# 操作方法
では、実際に仮想テーブルを作っていきましょう。

## 接続元データベース
接続元データベースを見てみます。
今回はAzure SQL Databaseと接続させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/2653d951-85c3-8f7b-f397-562b08db082b.png)

実際のデータは以下の画像のようになっています。
ProductCategoryID、ParentProductCategoryID、Name、rowguid、ModifiedDateなどの列があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/afcca994-2615-8ccb-d2e4-0fe913f9c090.png)

## Dataverseから接続

Power Appsスタジオ(https://make.powerapps.com )にアクセス
[テーブル]>[新しいテーブル]>[外部データによる新しいテーブル]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ec175c82-01ba-29db-22d8-6ee1de5e58ae.png)


[新しい接続]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/120adf4e-0e71-71e9-492b-7a7bc49ba7b7.png)

SQL Serverの[＋]をクリック
ここでPower Platformの中に接続というオブジェクトを作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ad283238-34a2-64b9-3360-c0342894ac4f.png)

認証やサーバーの場所、いわゆる接続文字列を入れたら[作成]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8d410e5b-d613-d22b-56cd-f3b6af4613ec.png)

テナントID 取得方法
Azure Portalを開いたら、[Azure Active Directory]>[概要]>[テナントID]横のコピーマークをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9eb633ad-ad54-bb63-b201-5dccbd531468.png)

もとのブラウザに戻り、[更新]ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5b60f7be-d80a-9c85-daba-cdea7340390a.png)

登録が完了していると、接続情報が表示される為、使用する接続情報を選択して[次へ]ボタンをクリック

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/260f6dd9-fed9-d7a9-43a6-d6ff886eb603.png" width=80%>

サーバー名とデータベース名を入力して[次へ]ボタンをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/c14f66fe-6329-5382-0bcc-436c0ddabafa.png" width=80%>

SQL Serverの中のテーブルを選択し、[次へ]を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/cd46b8b2-8ede-9bbe-c922-7c7978f9588d.png" width=80%>

SQLDatabaseの先ほどのテーブルの中を読み取ってくれて、自動でスキーマを持ってきてくれます。
変更したい項目はここで編集します。
プライマリキーは重要なので、正しく持ってこれているか確認してください。
設定し終えたら、[次へ]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7937c493-91e6-4399-6cf7-1ea663544080.png)


プレビューを確認して、[完了]ボタンをクリック
これで完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/fbb2057d-5dbd-e3d4-3491-4e9094ab8265.png)

# 実際にテーブルを見てみる
[テーブル]で作成したテーブルを選択し、テーブルの詳細画面を開くと実際のデータが入っているように見えますが、スキーマのみを持ってきている為、この中のデータは実はDataverseの中には存在していません。
SQL Serverを透過的に見に行っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0fcd92c0-947d-9df9-98ef-53f6fd6fa3eb.png)

::: note 
チナミになる話
Dataverse側でデータを編集すると元のデータを編集することができます。
::: 

# 参考

https://learn.microsoft.com/ja-jp/power-apps/maker/data-platform/create-edit-virtual-entities

https://learn.microsoft.com/ja-jp/power-apps/developer/data-platform/virtual-entities/get-started-ve