[Power BI] 新機能 Datamart データマート を考える🙄

# はじめに

先日、Power BI の新機能**Datamart**のプレビューが開始されました。
エンタープライズ運用でも、セルフサービスBIでも、いろいろなユースケースが考えられる機能です。
ぜひみんなで研究していきましょう！

https://powerbi.microsoft.com/ja-jp/blog/announcing-public-preview-of-datamart-in-power-bi/

https://docs.microsoft.com/en-us/power-bi/transform-model/datamarts/datamarts-get-started

## Datamartとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/9cb1efc4-a5dd-2b61-2f4f-9b5b192a50b5.png)

>Datamart in Power BI is a new self-service capability included with Power BI Premium that enables users to uncover actionable insights through their own data without any help from IT teams. For the first time, we are empowering everyone with the right-sized ability to build a relational database for analytics using no code experiences for workloads up to 100GB, without compromising enterprise security and governance demands. 

Power BI Premium に含まれている新しいセルフサービス機能で、ユーザーは IT チームの助けを借りることなく、自分のデータから実用的な洞察を発見できます。初めて、エンタープライズのセキュリティとガバナンスの要求を損なうことなく、最大 100 GB のワークロードに対してコード エクスペリエンスを使用せずに分析用のリレーショナル データベースを構築できる適切なサイズの機能をすべての人に提供します。

:::note info
https://mybuild.microsoft.com/ja-JP/sessions/880c2556-1f8e-4e4c-89ac-77c4149cdf93?source=sessions
上記セッションの中で「Datamartの容量は0.5TB」という発言もあり、将来的に容量は100GB以上になる可能性がありそうです。
:::

## 必要なライセンス

Power BI Premiumライセンスが必要です。
Per Capacity or Per User どちらでも使用可能です。

## 裏側はAzure SQL DB

Datamartの裏側はAzure SQL DBと書いてあります。DataflowはADLS gen2でした。
最大容量は100Ｇとなっており、セルフサービス・・という文脈であればたいていのデータは格納できるボリュームだと考えられます。500Gまで容量が増えた場合にはエンタープライズ用途でもなかなか超えにくいデータ容量なのでは。

## 実際につくってみる

**新規**をクリックすると、**データマート**を選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/b4e2f048-b63e-ec81-5311-53156afc7146.png)

WEB上で、Power BI Desktop のような画面が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/b34b3067-536d-2b54-377f-602faa8fe0b5.png)

「データの取得」をする流れはPower BI Desktopそのもので、ストレスなく使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/66036f88-4bab-e2ff-b30c-5eee6e8ca37e.png)

今回はデータフローで事前に用意してあったContosoのデータを使用します。
読み込み画面がここまで進むと、**画面を閉じることができます**。
読み込みにはデータ量に応じて若干時間がかかります。

私の環境で試した感じでは1000万行程度で10分くらい、
3億行ほどのデータでは1時間程度かかっていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/09b63bec-a275-f4dd-3537-9be791c79cf6.png)

## 画面解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/ed3ff80b-8ac9-1708-3442-23a05bc964b1.png)

1. データを取得
    * Power BI Desktopでもおなじみの新規データソースからデータを取得する
1. Transform Data
    * Power Query Editor が開く
1. データを入力する
    * 手入力やエクセルからのカット＆ペーストでデータを新規追加
1. New Query
    * SQLでデータ探索ができる
    * 出力結果をエクセルに吐き出せる
1. 新しいメジャー
    * メジャーの定義ができる
1. 行レベルセキュリティの設定
1. データビュー
1. デザインビュー
    * 直感的な操作でデータ探索（Power Query）
1. SQL
    * SQLデータ探索
    * Viewを保存することはできない
    * データに接続されたエクセル出力ができる
1. モデルビュー
    * リレーションシップを作成

## Datasetが自動作成される

Datamartを作成するとDatasetが自動的に作成されます。Power BI Desktopやserviceでレポートを作成するときは、このデータセットに接続してもいいし、裏側がAzure SQL DBなので、直接接続をすることも可能です。「データの取得」から、Azure SQL DBを指定して、datasetの設定画面に表示されるサーバー設定文字列を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/8e733381-ae91-4ece-37d4-32c45aa72c84.png)

## パフォーマンス

1300万行ほどあるContosoサンプルデータを使用。シンプルなデータではありますが、レスポンスはかなり早いと感じます。GIFを下に貼りました。

![2022-05-28_11-22-40.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/28cb5333-e468-4ce1-54b2-7fa7c8d55cbc.gif)

# Datamartで主にできること

※2022年5月28日現在

できることや現在の仕様の中で便利な部分、気になる部分をずらーっと書いてみました。詳しくはもちろんドキュメントを読んで、ご自身の環境で試してみてください。プレビュー機能なので、随時変更になっていくと思います。

* Dataflowを含む各種データソースからデータを取り込む
* PowerQueryエディターでのETL（一部機能）
* SQLでのデータ探索
* デザインビューでのデータ探索
* 各テーブル間のリレーションシップ作成
* データセットが自動作成
* データセットにはダイレクトクエリ接続のみ
* SSMSからのアクセス
* データマートの共有
* 増分更新
* 容量は100G（将来的には500GB？）

:::note info
Power BI Desktopで主に行っていたリレーションシップの作成やメジャーの作成などのモデリング作業をWeb上で行えます。Power BI Desktopで**Datamartから自動作成されたデータセット**に接続すると、リレーションシップやメジャーが最初から反映されています。
:::

# Datamartでできそうでできないこと、実現してほしいこと

※2022年5月28日現在

Datamartでできたらいいのになぁ～！ってことも書いておきます。すでにロードマップに入っているようなこともあるようなので、将来的に追加されていくことを期待したいです。

* SQLでテーブルやビューを作成・保存
* インポートモードでの利用
* 自動生成されたDatasetへのXMLA Write アクセス
    * Tabular Editor他経由のデータモデル開発
* データマートの再利用（別ワークスペースへのコピー）

## ダイレクトクエリによる制限事項

https://docs.microsoft.com/ja-jp/power-bi/connect-data/desktop-directquery-about#implications-of-using-directquery

## Datasetの変更ができないことによる制限事項

データモデルへの書込権限がないため、例えば下記のようなことができません。

* オブジェクトレベルセキュリティ（OLS）
* Calculation Groups（計算グループ）
* フィールドパラメータを含むモデルタブの機能
    * 接続モードをライブ接続以外にすれば可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/a3af8c8a-fa28-8080-678b-f62f171bef91.png)

# Dataflow,Dataset,Datamart ?

それぞれ3つの役割をきちんと理解し、効果的に使うことが大事ですね。

* データマート
    * ユーザーベースのデータウェアハウスとデータへのSQLアクセス
    * データマートは、SQL エンドポイントを使用して、他のデータマートまたは項目のソースとして使用できます。
    * セキュリティを有効にした部門または組織の境界を越えた共有
* データフロー
    * データセットまたはマート用の再利用可能なデータ準備(ETL)	データマートは、ETL に単一の組み込みデータフローを使用します。
    * 異なる更新スケジュールでデータマートにデータをロードする
    * ETL とデータ準備のステップをストレージから分離し、データセットで再利用できるようにする
* データセット
    * BI レポートのメトリックとセマンティック層
    * データマートは、レポート作成用の自動生成されたデータセットを提供する
    * 複数のソースからのデータの結合
    * きめ細かいレポート作成のためのデータマート表の選択的な共有
    * データマートからのデータとデータマート外の他のデータ ソースからのデータを含むデータセット
    * 自動生成されたモデルに DirectQuery を使用し、信頼できる単一のソースを使用するデータセット

# まとめ

Datamartの登場で「データの準備」が大きく変わる予感がします。「データエンジニアとデータアナリスト」、「SQLserverの世界とPower BIの世界」がくっきり分かれていたのが、すごくぼんやりしたというか、グラデーションができました。お互いが、お互いの世界観を理解して協力する・・的な😉

Datamart、これからどんどん機能が改良・追加されていくと思うので、注目です！😊

![図面 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/9e2c0ee0-024d-2d5c-e4a9-92482e3c2142.png)