Power BI 容量負荷評価ツール を使ってみる

# はじめに
こんにちは、Power BI 担当の松永です！

戸惑うほど久しぶりの投稿です。執筆中の記事の内容を完全に忘れ、大変焦っています。
しかし今日はそのことは一旦横に置いて、**Premium Per Capacity の負荷テストツール**について使い方を書いていきます。
以下が公式のドキュメントです↓
https://learn.microsoft.com/ja-jp/power-bi/developer/embedded/load-assessment-planning-tool

★本記事の対象者
Power BI Premium Per Capacity を持つテナントの容量管理者
容量負荷テストに興味があるユーザー

# なぜこの検証をしたのか？
Power BI のライセンスについて、基本的には Free → Pro とステップアップする方が多いかと思います。
https://powerbi.microsoft.com/ja-jp/pricing/

Pro ライセンスでは、共有ワークスペース内のコンテンツに対して作る人も見る人も同じライセンスが必要です。
よって、閲覧者数が100人、500人、1000人…と多くなるにつれてコストが増えます。
そこで出てくるのが **Premium Per Capacity (容量)** 。Capacity と名前についている通り組織占有の保存領域を確保します。

容量が割りあてられたワークスペース内では、Pro ライセンスであっても Premium 機能が使えるのはもちろん、その最大の特徴は**閲覧者は Free ライセンスで利用できる** ことではないでしょうか。
これによって、大人数で使うレポートもコストを抑えながら運用できます。
(もちろん、その他にもメリットがたくさんありますよ！！機能一覧は[こちら](https://learn.microsoft.com/ja-jp/power-bi/enterprise/service-premium-features))

## 主題
そんな Premium Per Capacity ですが、プランによって **使用できるリソース** が異なります。
つまり、上位の容量にいくにつれ**マシンとしての強さ** も上がるということです。
[容量ごとのリソースと制限](https://learn.microsoft.com/ja-jp/power-bi/enterprise/service-premium-what-is#capacities-and-skus)

よくお客様から聞かれるのが、
**「どのプランで何人くらいカバーできるの？」**
という質問ですが、これには
- どのくらいのデータセットを置くのか
- 同時に何人アクセスするのか
- 更新の数や頻度

などなど、いくつも影響を与える要素があるので一概には答えることができません。
Power BI の Guy in a Cube でも同様な説明があります。[こちら](https://youtu.be/ipdMRPdXcWA)

そこで、Microsoft が公式で、**容量内の好きなレポートに疑似的に大量アクセスを仕掛ける** ツールを公開しています。
ガイドビデオもあるのですが、英語で分かりにくいのでできるだけわかりやすく日本語で書いていきます。
リンク再掲↓
https://learn.microsoft.com/ja-jp/power-bi/developer/embedded/load-assessment-planning-tool


# 手順
全体の流れは以下です。
1. パッケージのダウンロード
1. PowerShellの起動と設定
1. ツールの実行
1. 評価


#### 前提条件
- このパッケージを実行するには、管理者特権の PowerShell コンソールが必要です。(つまり、「管理者として実行」)
- このパッケージには、署名されていない PowerShell スクリプトが含まれています。
署名されていないスクリプトの実行を許可するには、最初に Set-ExecutionPolicy 無制限コマンドを使用する必要があります。
- このパッケージを使用するには、"MicrosoftPowerBIMgmt" Power BI PowerShell モジュールをインストールする必要があります。
- 検証したいレポートが置かれているワークスペースの管理者である必要があります。

そんなに大変ではないですよ、早速いきましょう！！！

### 1.パッケージのダウンロード

まず、[容量負荷評価ツールのドキュメント](
https://learn.microsoft.com/ja-jp/power-bi/developer/embedded/load-assessment-planning-tool)を開き、GitHubへのリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/1da5a755-56b1-04bb-9b9d-b2f0cb74505f.png)

**GitHub 画面**
画面左上の **[<>Code]** をクリックすると、中心右寄りに緑のボタンがでます。
ここから Zip ファイルをローカルにダウンロードし、解凍しておきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/3dbd587d-4c72-c872-56a5-b1faa3d5dfaf.png)

ダウンロードしたフォルダのうち、実際に今回使用するのは**LoadTestingPowerShellTool** というフォルダです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/426e3fef-d0f8-b1d0-1f4b-cb70a9971306.png)
### 2. PowerShellの起動と設定

#### PowerShell の起動
**LoadTestingPowerShellTool** フォルダ内にある **Initiate_Load.ps1** というファイルを実行するために、PowerShellを立ち上げます。

:::note info
PowerShellを立ち上げる際には、**[管理者として実行]** で立ち上げます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/e9da61cd-0467-624e-1db3-b165b6bdd6e4.png" width=450 />

:::

#### Power BI 用モジュールのインストール

[前提条件](#前提条件)にもありますが、ファイルの実行中に使用するコマンドの中に**Power BI PowerShell モジュール**の事前インストールが必要なものがあります。
[PowerShellモジュールについて](https://learn.microsoft.com/ja-jp/powershell/power-bi/overview?view=powerbi-ps)

そこで、以下のコマンドを実行してモジュールをインストールしておきます。

``` PowerShell:PowerShell
Install-Module -Name MicrosoftPowerBIMgmt
```

#### Set-ExecutionPolicy 無制限コマンドの実行
このパッケージには、署名されていない PowerShell スクリプトが含まれています。
署名なしの PowerShell スクリプトは、セキュリティのためデフォルトでは実行できないようになっています。
そこで、実行できるよう管理者として設定をする必要があるのですね。
[参考サイト](https://tsuredurediary.com/archives/windows-powershell-script-execution.html#:~:text=PowerShell%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%201%20%E5%AE%9F%E8%A1%8C%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B,2%20%E5%AE%9F%E8%A1%8C%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6PowerShell%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%203%20%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%8B%E3%82%89%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B)

以下のコマンドを実行して、署名無しスクリプトを実行できるようにします。
上記参考サイトに記載がありますが、サイトからダウンロードしてきたファイルなのでリモートスクリプトとみなされます。

```PowerShell:
 Set-ExecutionPolicy Unrestricted
```

さて、それでは下準備ができたので実行していきます！

### 3. ツールの実行
#### ダウンロードしたフォルダの確認

先ほどダウンロードして解凍したファイルの場所を把握しておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/af58f646-85d8-1f19-9095-cd25af4b60e1.png)

分かりやすくするため、★のディレクトリまで移動しておきます。

```PowerShell:
cd C:\Users\●●\PowerBI-Tools-For-Capacities-master\PowerBI-Tools-For-Capacities-master\LoadTestingPowerShellTool
```
現在の位置が LoadTestingPowerShellTool フォルダ内になったので、ファイルの実行をしていきます。

```PowerShell:
.\Initiate_Load.ps1
```

警告が出るので、実行を許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/73c1b778-1cc9-19da-4406-5ceb2a5369c8.png)

すると、Shell スクリプトが実行され、コマンドライン上でやり取りが始まります。
```
How many reports you want to configure?: 
```
↑同時に検証するレポートの数を選択します。通常は1個だと思います。

```
Select Id to authenticate to Power BI
```
↑Power BI に認証が走ります。
サインインのポップアップが出てくるので、検証したい環境があるテナントを選択します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/594f0e90-b7d3-46ab-993d-1e783b906a62.png" width=450 />

サインインが完了すると、自分が管理者になっているワークスペース名が列挙されます。
```
Environment : Public
TenantId    : ××
UserName    : MINORITANAKA@●●

[1] - △△ - 0724
[2] - △△ - Premium Capacity Utilization And Metrics 2022/5/18 10:56:15
[3] - △△ - Power BI Premium Capacity Metrics 2021/11/15 11:19:58
[4] - △△ - Minori_champ
[5] - △△ - 20221109testminori
[6] - △△ - test_
Select Work space index from above:
```
↑該当するワークスペース番号を入力します。

```
Listing all reports from the selected work space
[1] - ●● - Sales_sample
[2] - ●● - HogeHoge
Select report index from above:
```
↑該当するレポート番号を入力します。

```
Filters require FilterTable, FilterColumn,MinimumValue and MaximumValue in FilterColumn
Enter Filter values separated by comma(,). Ex:TableName,ColumnName,100,1000:
```

↑ここで、レポートのどこかのテーブルにフィルターを適用するため
- テーブル名
- 列名
- 最小値
- 最大値

を意図的にセットします。この理由としては、フィルターを適用しないと Power BI 側で持つキャッシュを使って高速にレンダリングしようとするからだそうです。私は簡単に以下のように指定しました。
```
Enter Filter values separated by comma(,). Ex:TableName,ColumnName,100,1000: 日付,年,2016,2018
```
さらに、同時に接続するブラウザの数を指定します。

:::note warn
ブラウザは手元のPCで立ち上がるので、あまり多すぎない方がいいと思います。
このツールは、
- 連続表示要求 = ブラウザで繰り返し読み込まれる動作
- 同時表示要求 = 立ち上げるブラウザの数


 を評価するためのものです。
:::

```
Enter number of instances to initiate for this report:
```

以下の最終確認がくるので、内容問題なければyで確認します。
```
https://app.powerbi.com/reportEmbed?reportId=●●
Length         : 4
LongLength     : 4
Rank           : 1
SyncRoot       : {日付, 年, 2016, 2018}
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 4

Listing reports configuration



WorkSpace    ConfiguredReportPath
---------    --------------------
Minori_champ C:\Users\minoritanaka\PowerBI-Tools-For-Capacities-master\PowerBI-Tools-For-Capacities-master\LoadTestingPowerShell...


Do you want to launch configured reports?[y/n]:
```

すると、ブラウザが立ち上がり疑似的にレポートの読み込みを繰り返します。
![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/196dab7d-6c84-506a-4f18-2e9dc650b4cd.gif)

::: note info
ブラウザを手動で閉じない限り、トークンは60分間有効です。

:::

### 4. 評価
負荷テストが終わったら、現在のコアでどのくらいの負荷率があったか確認しましょう。
(反映まで時間がかかるので、数時間置いた方がいいと思います。)
確認には[Power BI Premium メトリック アプリ](https://learn.microsoft.com/ja-jp/power-bi/enterprise/service-premium-metrics-app)を使用します。

特に、CPUの時間変化をみてください。負荷をかけた時間のCPU使用率はどうなっていますか？
負荷ツールと同じほど短時間で大量のアクセスがあるのか吟味しつつ、CPU使用率が100%に近い場合は注意しましょう。
https://learn.microsoft.com/ja-jp/power-bi/enterprise/service-premium-metrics-app#cpu-over-time
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2542710/7aa26fbf-fc66-53ea-d836-736374d3bbae.png)

# おわりに
いかがでしたか？
なかなか容量の選択は難しいかと思いますが、手元のレポートを基にしてこういった便利なツールも活用してみてくださいね！

今日はここまでです、ではまた！