(Excel & Power BI) What-if分析

　エクセルでWhat-If分析って使ってますか？　自分の仕事では使う場所がないとか、聞いたこともないという人もいるようなので、エクセルのWhat-If分析と、Power BIでのWhat-if分析について説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/c2990b5b-95bf-5d0e-42ea-b9227949e4f2.png)

# エクセルのWhat-If分析
 エクセルのWhat-If分析は、以下の３つが使用できます。

- ゴールシーク
- データテーブル
- シナリオ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1fcebe7d-630b-12f5-07f5-f4889fe2efde.png)


##  ゴールシーク
　指定された計算式の中の値を変えて条件を満たす値を逆算してくれるという機能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9fb5e16d-3f85-ac53-3d02-c32108346d21.png)
　上記のような状態で、売上の項目には「=C4*C5」という計算式が入っています。そして、売り上げを１６万円にするためには、客数がどのくらい必要かを算出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/dc051396-a67c-cbb2-dfe7-ae53dce4caf5.png)
　上記のように、ゴールシークのダイアログの中に計算式が書かれたセルと目標値、そして求めたい値となるセルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/757659ff-975e-a1e4-6bad-af9d87a764dc.png)
　結果は、客数が３２０人必要となりました。

　**こんなの、ゴールシーク使わなくても計算すればいいじゃん！**

　おっしゃる通りです！どんな数式でも、最適な変数の値を求める式を作成することは可能です。

　しかし、普段、平方根や素因数分解が使われてる数式を書いている人は大丈夫でしょうが、たぶん大多数の人は逆算のために頭を使いたくありません。

　例えば、１００万円を１０年預ける場合、複利計算と言って利息にも利息が付くので、以下のような表になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d1004cdf-fb53-9fdc-d0f8-e5aa06d66825.png)
　C6からC15までのセルには、複利計算の式が入ります。複利計算は利息にも翌年に利息が付いていくので、順々に上段の値を使って計算していく方法もありますが、元本と利率と年数で算出する式があります。

```math
元本 \times (1 + 年間利率) ^ {運用年}
```

　目標額２００万円になるのはいつなのか知るには、このテーブルをずーッと下の方へ広げていけばいいのですが、ゴールシークを使えば広げずに求めることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/fd95c9de-350e-a2be-a949-f72008a0b8f8.png)
　約70年ですね。
　元本を増やして35年で２００万円にしたいなら、年を３５にしておいて、変化させるセルを元本のセルにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/59f00816-6c4a-6523-cd06-821e8ea7e70c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3a92bfc3-4794-e719-be9e-985a76b51a2e.png)

　元本を１４１万円くらいにすれば、年利１％で２００万円になりそうですね。

# Power BIのWhat-if
　Power BIでは、なぜかiが小文字です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/eb281c6d-c7c4-525f-816c-4319ef311a4a.png)

 まず、Power Queryで年数０から３５までのテーブルを作成します。

```text:年数
let
    Source =Table.FromList( 
        {0..35}, 
        Splitter.SplitByNothing(), 
        type table[年数 = Int32.Type] 
    )
in
    Source
```
 次に元本と利率のパラメータを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/140b9267-04b5-9232-66ba-fb55d6f508e7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/ea68d5f1-cff1-24be-a9c3-fcb8dc098298.png)

　２つのパラメータは、**読み込みを有効**にしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/762185e1-872c-b077-c99f-17ca0e44f48b.png)

　パラメータは、通常Power Queryの中で使用するため、レポートで使用できないようになっています。**読み込みを有効にする**にチェックを入れることで、レポート内やDAXで使用できるようになります。

　年数に、以下のメジャーを２つ作ります。

```text:単利
複利 = MAX('元本'[元本]) * ( 1 + [変動利率 値] ) ^ '年数'[年数]
```

```text:複利
複利 = MAX('元本'[元本]) * (1 + MAX('利率'[利率])) ^ MAX('年数'[年数])
```

　これを折れ線グラフで表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/be4468e1-2f42-79de-755a-78d1abd13d05.png)
　このグラフの利率をWhat-ifで分析します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/c4e53daa-41c0-846e-0415-55e7aa44bcde.png)

　以下のようなWhat-ifパラメータのダイアログが表示されるので、変化を見たい値の設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/44f47230-662d-775d-3605-3eaf30ac50fc.png)
　画面上に以下のようなスライサーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9b8b65d1-ddbb-7a8d-cdd6-9e3c4ee0714c.png)
　DAX式を、What-ifパラメータを使用するように変更します。

```text:単利
単利 = MAX('元本'[元本]) + MAX('元本'[元本]) * [変動利率 値] * MAX('年数'[年数])
```

```text:複利
複利 = MAX('元本'[元本]) * (1 + [変動利率 値]) ^ MAX('年数'[年数])
```

【注意】What-ifパラメータを使うためには、計算列ではなくメジャーを使う必要があります。計算列を使うと値が固定してしまうため、スライサーで選択された値を取得することができません。

　利率を3.0%にした時、以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/0415fffd-1f81-8723-17ca-b556e9fea630.png)

　利率を変えてやると、グラフの値も変化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/ba842400-6a8e-466f-dbea-73bc67c8f443.png)

## GENERATESERIES
　What-ifパラメータを作成すると、GENERATESERIESを使ってテーブルが作成されます。

```text:変動利率
変動利率 = GENERATESERIES(CURRENCY(0.01), CURRENCY(0.2), CURRENCY(0.01))
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9587de02-e913-5c48-7490-6ff132006297.png)

## SELECTEDVALUE
　What-ifパラメータを作成すると、先のテーブルに加えて、以下のメジャーが作成されます。

```text:変動利率値
変動利率 値 = SELECTEDVALUE('変動利率'[変動利率])
```

　スライサーの位置を変更して指し示す値をSELECTEDVALUEで取得します。DAX式の中で、このメジャーを指定してやることになります。

## 複数のWhat-ifパラメータ
　What-ifパラメータは１つだけでなく、複数を設定して変化を見ることができます。
　以下は、毎年の貯金額と利率のパラメータを作成した例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9aba69c3-a345-1c29-ec5c-46caf344e5c1.png)
　目標値を定数戦で表示させてやると、到達時期がわかりやすくなります。