Tableau 表計算を理解する①　簡易表計算

## 前置き
 Tableauでは、簡易表計算メニューでMeasureの値をチャチャっと計算してくれます。普段何気なく使っていますが、実際どのような計算を行っているのか気になってので調べてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/2815a8a4-bc14-e98a-2c28-dcda42cbadf2.png)
　[調べ方] 簡易表計算を選択した後、シェルフの部分をダブルクリックして計算式の中身を表示させました。簡易表計算する対象は売上合計`SUM([利益])`としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/90043197-2a19-ce1b-959b-ccf20eb73b95.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/e6804438-2b28-e03b-26cd-3453f01b0a24.png)


## 累計
　累計は`SUM([利益])`をRUNNING_SUM関数にかけています。RUNNING_SUM関数はパーティション内の最初の行から現在の行までの指定された式の累積合計を返す関数です。

|基準|計算式|
|:-----------:|:------------:|
|- | RUNNING_SUM(SUM([利益])) |

## 差
　差は簡易表計算で選択した後、さらに基準を変更することで計算式の中身が変わります。基準の初期値は`前の値`になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/5c9a0fc5-77cb-6d5c-7cf2-98cd3fa92ef8.png)
　各基準ごとの計算式は下表の通りです。LOOKUP関数で{1つ前/一つ後/最初/最後}の`SUM([利益])`の値を取得し、自身の`SUM([利益])`から減算しています。

| 基準 |　　　　　　　　　計算式　　　　　|
|:-----------:|:------------|
|前の値 |ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), -1)|
|次の値 |ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), 1)|
|最初の値 |ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), FIRST())|
|最後の値 |ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), LAST())|

## 差の割合
　差の割合も簡易表計算で選択した後、さらに基準を変更することで計算式の中身が変わります。基準の初期値は同じく`前の値`になっています。分子は`差`と全く同じで、それを{1つ前/一つ後/最初/最後}のSUM([利益])の絶対値で割った値になっています

|基準|　　　　　　　　　　　　　　計算式　　　　　|
|:-----------:|:------------|
|前の値 |(ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), -1)) / ABS(LOOKUP(ZN(SUM([利益])), -1))  |
|次の値 |(ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), 1)) / ABS(LOOKUP(ZN(SUM([利益])), 1))  |
|最初の値 |(ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), FIRST())) / ABS(LOOKUP(ZN(SUM([利益])), FIRST()))  |
|最後の値 |(ZN(SUM([利益])) - LOOKUP(ZN(SUM([利益])), LAST())) / ABS(LOOKUP(ZN(SUM([利益])), LAST()))  |

## 合計に対する割合
　TOTAL関数で`SUM([利益])`の合計値を計算し、自身の`SUM([利益])`をその値で割っています。

|基準|計算式|
|:-----------:|:------------:|
|- |SUM([利益]) / TOTAL(SUM([利益]))|

## ランク
　ランクは`SUM([利益])`をRANK関数にかけています。RANK関数はパーティション内の現在の行に対して標準の競争ランクを返します。同一の値には同一のランクが割り当てられます。昇順/降順の指定をしていないので、既定の降順になります。

|基準|計算式|
|:-----------:|:------------:|
|- |RANK(SUM([利益]))|

## 百分位
　百分位は`SUM([利益])`をRANK_PERCENTILE関数にかけています。RANK_PERCENTILE関数はパーティション内の現在の行に対して百分位値のランクを返します。昇順/降順の指定をしていないので、既定の昇順になります。

|基準|計算式|
|:-----------:|:------------:|
|- |RANK_PERCENTILE(SUM([利益]))|

## 移動平均
　移動平均は`SUM([利益])`をWINDOW_AVG関数にかけています。WINDOW_AVG関数の他の引数は-2と0で、初期値では自身の値、1つ前の値、2つ前の値の3つの値から移動平均を計算する設定になっています。この設定は表計算の編集から変更することが可能です。

|基準|計算式|
|:-----------:|:------------:|
|- |WINDOW_AVG(SUM([利益]), -2, 0)|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/e275c94e-8b98-1f7b-14b7-14a2b4b7c7d5.png)


## 年間累計
　年間累計はディメンションに`年`がある場合のみ選択できます。計算式は`累計`と同じですが、`次を使用して計算`の値が最初から`年`のディメンション（下図の例ではオーダー日）になっています。

|基準|計算式|
|:-----------:|:------------:|
|- |RUNNING_SUM(SUM([利益]))|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/125ee131-93fe-2614-04b3-33ce0ee01574.png)

## 複合成長率
　複合成長率の割合も簡易表計算で選択した後、さらに基準を変更することで計算式の中身が変わります。基準の初期値は同じく`前の値`になっています。POWER関数の最初の引数は`差`の計算式と全く同じなので、`差`をZN(1/(INDEX()-1))乗して1を引いた値になっています。

|基準|　　　　　　　　　　　計算式　　　　　|
|:-----------:|:------------|
|前の値 |POWER(ZN(SUM([利益]))/LOOKUP(ZN(SUM([利益])), -1),ZN(1/(INDEX()-1))) - 1|
|次の値 |POWER(ZN(SUM([利益]))/LOOKUP(ZN(SUM([利益])), 1),ZN(1/(INDEX()-1))) - 1|
|最初の値 |POWER(ZN(SUM([利益]))/LOOKUP(ZN(SUM([利益])), FIRST()),ZN(1/(INDEX()-1))) - 1|
|最後の値 |POWER(ZN(SUM([利益]))/LOOKUP(ZN(SUM([利益])), LAST()),ZN(1/(INDEX()-1))) - 1|

## 前年比成長率
　前年比成長率も年間累計と同じくディメンションに`年`がある場合のみ選択できます。計算式は`差の割合`と同じですが、`次を使用して計算`の値が最初から`年`のディメンションになっています。


## 年間累計の成長率
　年間累計の成長率は計算式を確認しようとすると下記のようなメッセージが出るため直接計算式を見ることはできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/17c97051-6938-6d04-c59c-ac35b487761c.png)
　そこで表計算の編集画面を開いてみると、プライマリ計算で`年間累計`を計算した後にセカンダリ計算で`差の割合`を計算しているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/1d243020-10c3-392b-c433-ec43d3b58343.png)
　念のため確認してみます。下図は上のグラフに`年間累計の成長率`、下のグラフに`年間累計`を表示しています。2014Q1の`年間累計の成長率`が46.11%、`年間累計`は2013Q1が5,563k、2014Q1が8,128Kで、(8,128K-5,563k)/5,563K=46.11%となり、`年間累計`の`差の割合`となっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/bc8e7c4f-9377-3957-f7e3-d7c1ad30bb90.png)

## 補足：LODの変更
　どの簡易表計算も、`次を使用して計算`で表計算をする際の基準を変更することができます。この操作によって表計算のLODを変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/d3b23c3c-2495-e40c-7a80-c6dd4cc480b0.png)
　下の図は`次を使用して計算`を表（横）からペイン（横）に変えた時の結果です。計算の式自体は変わっていませんが、`オーダー日の年`のチェックが外れていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307669/bec12552-1cec-1d4d-eab1-686630532759.png)

## 終わりに
　普段何気なく使っている簡易表計算ですが、改めてどんな計算をしているか調べることで理解を深めることができました。また、自分で表計算の計算式を作る際にも簡易表計算の式をベースに考えると良さそうです。

## 　

https://qiita.com/zaki_001/items/f2e7087dc3b0fa2efae8