[Power BI]データセットの『高度な増分更新』を試してみよう😃／Advanced incremental refresh

# はじめに

本記事は**Power BI Premium**の機能を利用しています。
**Power BI Premium**を導入する理由の一つになるので、**Pro**ユーザーもぜひご一読を😁

# やりたいこと

増分更新を設定したDatasetをPower BI Serviceに公開したあと、初回更新はとても時間がかかりますよね:thinking:

データをパーテーションに分けて（年ごと、四半期ごと、など）、データソースから全行スキャンしたうえでパーテーションごとにデータを格納する処理が重いためです。一度パーテーションごとのデータ格納が済んでしまえば、過去のデータは更新されず、指定したパーテーションだけが更新されるので更新時間はとても早くなる・・はずなのですが・・

**データ**が多すぎると、**初回のデータ更新が既定の制限時間内に終わらない！** ことがあります。初回のデータ更新さえ終わってくれれば2回目以降は早いのに・・だけど、初回のデータ更新ができないと始まらない！

そんな状況を解決するためのひとつの方法です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/33545830-4c24-83ea-2c91-5388ead9b7aa.png)

# データセット更新時間の制限

データセット更新時間の制限は下記の通りです。

- Power BI Pro
    - 2時間
- PPU/Premium
    - 5時間
- XMLAエンドポイント経由の更新は時間無制限

https://docs.microsoft.com/ja-jp/power-bi/connect-data/incremental-refresh-overview

https://qiita.com/hanaseleb/items/627ba20a7d532b301a6c

# XMLAエンドポイントの接続は制限時間無制限😊

Power BI Service上で更新ボタンを押した場合と違い、XMLAエンドポイント経由でデータセットの更新をした場合には制限時間はありません。5時間以上かかる更新にはこれを利用します。XMLAエンドポイント経由でアクセスすると、Premiumワークスペースやそのワークスペースに置いてあるデータセットには、SSMSやTabularEditorなどのツールを利用して直接さわることが可能です。ワークスペースがデータサーバーで、データセット一つ一つがデータベースです。

## ワークスペース、データセットへのアクセス用文字列の取得方法

ワークスペースにアクセスするには、**設定>Premium>ワークスペース接続**にある接続文字列をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/b1d74755-891b-fa54-aae5-56a70413ca58.png)

データセットへのアクセスは、**3点リーダーの設定>サーバー文字列**の項目にいき、コピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/3cf02ae7-5044-5d97-5c35-c048d1a6a423.png)


今回のケースでは

1. **Tabular Editor**を使用してパーテーションの設定
1. **SSMS**を使用して各パーテーションにデータを格納

までをXMLAエンドポイント経由で自力で行います💪
時間はもちろんかかりますが、制限時間はありません。大きなデータセットの初回更新を

https://tabulareditor.com/

https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16

# Tabular Editor を使用したパーテーションの設定

SSMSを使用したパーテーションの設定もできますが、重複がないようにしたり、ひとつひとつ設定したりするのが非常にめんどうです。Tabular Editorを使用すれば一括で設定可能。

先ほど取得した接続文字列を使用して、ワークスペースやデータセットにアクセスし、増分更新をしたいテーブルで右クリックをし、**「Apply refresh policy」** をクリックします。プロパティウィンドウで、増分更新の設定がされていることを確認しましょう。ここで任意の数値に設定も変えられます。

設定後にパーテーションを開くと、年や四半期ごとにパーテーションが自動で設定されていることを確認することができます。

ただこのままだとパーテーションは設定できましたが、肝心の**データはまだ入っていません**。いま変更を加えたデータモデルを保存して、次はSSMSを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/5c77ec39-7ec4-bc96-1c2b-dcee914a9170.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/5efcae5b-3be8-30bd-1e8f-b2d6a0f6931e.png)

# SSMSでデータをパーテーションに読み込む

SSMSでの接続はTabular Editorと同様で、サーバー接続用の文字列を入力するだけです。Power BIの裏側はAnalysis Servicesなので、サーバータイプを「Analysis Services」に変えるのを忘れずに😁

ターゲットのテーブルを右クリックすると**Partitions**という項目が出てきます。こちらをクリックすると、先ほどTabular Editorで作成したパーテーションを確認することができます。

全てのパーテーションを選択して、ＯＫを押せばデータ読込が開始します。あとは待つだけ😚

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/cd616d00-ac91-34ec-f28d-994cafd0de6a.png)

増分更新の対象テーブルをすべて更新すると、Power BI Serviceでの初回更新は行われず、指定したパーテーションのみの更新になります。

# 注意点

XMLAエンドポイント経由でいじったPBIXファイルはダウンロードすることができなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80467/703949ff-eec2-03f6-1abf-7ba246480a0c.png)

# まとめ

増分更新をしないといけないシナリオは確実にありますが、その前にできることは要確認😉データモデルに不要な列はないの？そこまで過去のデータは必要なの？ダイレクトクエリじゃダメ？いろいろなやり方の中のひとつだということを意識しておこう💪

# 参考リンク

https://docs.microsoft.com/ja-jp/power-bi/connect-data/incremental-refresh-xmla