[Power BI] Tabular Editor だけでPower BI Serviceにデータモデルを構築する。大規模BI運用のための覚え書き。

# はじめに

https://powerbi.connpass.com/event/238544/

夜のPower BI 勉強会 での発表スライドです。

***

BIを構築し始め、徐々に規模が大きくなっていったとき、どうしたらいいのかを考えてみた。
（実際にその局面になっているわけではないので、あくまでも想像）

***

具体的には **データセットが次第に大きくなってきて、Power BI Desktopでインポートに時間がかかる**ようになってきたどうするのかなぁ:rolling_eyes: 

巨大なデータをローカルで扱わなくてもいい方法はないのか・・と考えてみた。

***

## やってみたこと

**Power BI Desktopを使用せず**に、**Tabular Editor** だけで**Power BI Service上**にデータセットを構築する。

***

## 前提条件

### Power BI Premium ワークスペースが作成できること

***

**Premium per Capacity** か **Premium per user** ライセンスが必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/90097fed-e6f8-5d44-6beb-62039703e99f.png)

***

### `XMLAエンドポイント`のRead/Writeが許可されていること

**Power BI 管理者** のロールが必要です。

***

#### `XMLAエンドポイント`の設定方法

1. Power BI Serviceの設定から管理ポータルに進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/4fa86199-eb89-ef8c-d4ac-30ab02ad3762.png)

2. 容量の設定→容量の名前をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/bc0fcc6f-7cd0-232f-f6e5-4778d89de0a1.png)

3. ワークロードを展開して、`XMLAエンドポイント`を読み取り、書き込みに変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/4d5baa2e-6191-44af-825d-7d45b2e5fcd2.png)

***

## （ほぼ）空っぽのレポートをPower BI Serviceにアップ

プレミアム容量のワークスペースであることを確認。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/0444a203-24d9-6d82-8464-895c8f16e787.png)

***

### ワークスペースの設定画面から、URL形式の接続文字列をコピー。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/52c615f4-d825-2f90-3dab-de3deefc9f44.png)

***

## Tabular Editorを開いて接続する

***

### `File -> Open -> Model from DB` クリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/14fd247b-8a28-e82a-1b7f-8bc111ae1cac.png)

***

### URL形式の接続文字列を貼り付け

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/17c126b6-21a3-57ec-6870-265001dcd2d8.png)

***

### 無事、読込完了

Power BI Service上のデータセットに接続できました。
最初に作成したテーブルが読み込まれています。

***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/626f5fa6-544f-69c2-3490-c4ef42f60bd0.png)

***

## テーブルをインポートする。

### `Model -> Import tables`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/93afaeb3-4898-d8e3-43f0-aa38278e605a.png)

***

- **Provider (aka. Legacy)**: Analysis Servicesのすべてのバージョン、すべての互換性レベルで利用できます。限られた範囲のソースをサポートしており、主にOLE DB/ODBCライバによるリレーショナルデータをサポートしています。パーティションは通常、ソースに対してネイティブに実行されるSQLステートメントを使用して定義されます。認証情報は、Tabular Object ModelのProvider Data Sourceオブジェクトで管理され、サーバー側で保存および暗号化されます。
- **Structured (aka. Power Query)**: SQL Server 2017（互換性レベル1400+）から利用可能。レガシープロバイダーよりも広範囲のデータソースをサポートします。パーティションは通常、M（Power Query）式を使って定義します。認証情報はTabular Object ModelのStructured Data Sourceオブジェクトで管理され、Analysis Servicesへの展開時に毎回指定する必要があります。
- **Implicit data sources**: Power BIデータセットでのみ使用されます。モデル内に明示的なデータソースオブジェクトは作成されません。代わりに、M（Power Query）式でデータソースを暗黙的に定義します。認証情報はTabular Object Modelには保存されず、Power BI DesktopまたはPower BI Serviceによって管理されます。

***

### 任意のデータソースを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/d3b7fbd3-a941-d26a-2e38-9956e5eb2ef2.png)

あとはダイアログ通り進めていくと、テーブルの選択画面にすすみます。
ここでテーブル選択をして、必要に応じて、取り込むカラムも選択します。

***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/1072a9d0-1a19-11a8-eaac-26c816fa2439.png)

***

### 取り込み完了

テストデータとして、商品情報（一部）と担当販売部名を取り込んでみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/2f80c420-a59d-bb1f-7e6a-4bcbd5aa122c.png)

***

#### `CTRL + S` で保存 -> Refresh するとPower BI Service上でも確認できます。

Power BI Serviceで確認します。UPされています。Tabular Editorのテーブル情報とも一致します。
ただこのままでは、それぞれのテーブル間でリレーションが構成されていないため、ビジュアルを作成することはできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/326f7ab2-4d8a-a31c-728b-36aa768d911f.png)

***

## リレーションの構築

`New Dialog` を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/f46f2206-24c8-ac3e-d956-2886b8e25a2d.png)

***

テーブル名をドラッグアンドドロップし、リレーションを構築したいカラムをマウスでつなげてあげると、視覚的にリレーションを作成することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/6e5fb3eb-7667-43e3-d834-032eddc20d88.png)

***

### リレーションシップが完成

`TOM Explorer` の`Relationships`フォルダにリレーションを示すオブジェクトができたことを確認できます。ダイアログツールを使用せずに、ここで直接リレーションを作成することも可能ですが、複雑になってくると管理もできなくなりますので、こういったビジュアルツールが有るのは助かりますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/1be4eefd-e782-1a6c-adcb-8e0ef02771ee.png)

***

## ビジュアルの作成

リレーションも正しく設定できているので、Power BI Serviceで複数テーブルからデータをもってきてビジュアルを作成することができています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e7ea1ffe-261a-6b56-403e-dbca21e44394.png)

***

## Power Query で 書いてみる。

今度はテーブルの作成時に、Power Queryを使用してみます。まだintellisenseは使えるようになっていないので、ここでゴリゴリPower Queryでの開発は（私は）難しい。

***

#### テーブルを新規で作成し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/fe632695-c8d7-175f-ec5d-53ba8ae57ced.png)

***

#### Expression Editor で Power Query を記述。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3029e040-8f96-03d2-6494-57c5444ae483.png)

***

#### Schema Update を実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/f0e3a9e2-d002-e2e6-9658-e5974b0c8fb4.png)

***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/29bc4743-90e8-07ae-1f67-4fd3de38b128.png)

***

#### データプレビューも可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e37c959c-4d98-5799-5bd1-c0c1a2a98188.png)

***

#### Power BI Serviceにも連携されていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/e7494168-7f12-d9af-d4a1-77caf1f52efc.png)

***

Power Query のサポートはロードマップに掲載されているので、実装されるのを楽しみに待ちたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/febc8f58-3634-f4ef-f062-74c59fda8fed.png)

***

## 完成

Power BI Desktopを経由せずにデータセットを作成、リレーションシップの設定、Power BI Service上でビジュアルの構築ができました。Tabular Editor を利用すれば、大規模データセットの運用も怖くない！:upside_down:
大規模BIの運用・開発には配置パイプラインを使用して開発環境を作成する運用も検討できますね。

***

## 要注意

一度でもXMLAエンドポイント経由でデータセットを触ったら、そのPBIXファイルはPower BI Service上にしか存在できなくなります。ご利用は計画的に:stuck_out_tongue_closed_eyes:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/af96f6b9-e82e-80f3-82fd-356d1bec10d9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/f5b4e9d2-592b-f9f1-305a-6b5fe4b2ab3b.png)

***

## 公式Document

https://docs.microsoft.com/ja-jp/power-bi/create-reports/service-export-to-pbix#considerations-and-limitations

https://docs.microsoft.com/ja-jp/power-bi/admin/service-premium-connect-tools