ExcelをTableau Prepに置換するためのメモ

# はじめに
この記事は、私がデータ準備効率化ツール「[Tableau Prep](https://www.tableau.com/ja-jp/products/prep)」を使って、Excelの処理をTableauで置き換えた際のノウハウをまとめたものです。

以下の点に注意して、ご覧ください。

- 独学なので、もっと効率がいい方法があるかもしれませんし、間違った方法が載っているかもしれません
- そもそもExcelをあまり使わないので、Excelの時点で非効率なことをしている可能性があります
- あくまでメモなので、体系的にまとまっているわけでなく、逐次書き加えていく形となります

# ExcelをTableau Prepに置き換える際のレシピ集

## 列の挿入
Excelで以下のように列を挿入して、担当部署列を追加したいとしましょう。
<img width="200" alt="スクリーンショット 2018-08-23 12.35.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/22ef9c6f-7776-7ab3-3b0e-7ee05b923c6f.png"> <img width="200" alt="スクリーンショット 2018-08-23 12.35.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/500a6305-2d22-d403-da08-a9c079dfbf1f.png">
この処理をTableau Prepで置き換えるときは計算フィールドを使います。
<img width="854" alt="スクリーンショット 2018-08-23 12.33.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/77b3def8-f519-15ea-5583-ac4e030a5a8d.png">
元のExcelに列を追加して正しい値を入れてもらったほうが当然いいのですが、元のExcelが諸々の都合で変更できない場合には便利です。

固定文字列以外にも、以下のように規則性がある場合は、計算フィールドで値を埋める条件を書いてやれば実現できます。
<img width="200" alt="スクリーンショット 2018-08-23 12.46.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/9484fe8b-93e9-35ce-f7e3-d3ae7ca65665.png">
<img width="854" alt="スクリーンショット 2018-08-23 12.47.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/76ebac70-3bdd-a28d-285e-2fae3c982038.png">

## SUM関数を使った演算
以下のように各商品の売上がわかっている状態で、商品毎の売上シェアを出したい場合、エクセルだと 以下のようにSUM関数を使うと思います。
<img width="316" alt="スクリーンショット 2018-08-23 12.52.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/6da452ca-2e7e-0f05-7e85-2c097a195269.png">
Tableau Prepではステップの中でSUM関数が使えないので、以下のような多段処理になります。
<img width="552" alt="スクリーンショット 2018-08-23 12.54.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/bc23e55b-e551-67e8-59bb-e29ed2499ac6.png">
集計を追加して、SUM関数に相当する部分を計算します。以下では、総売上の部分が上記Excelの`SUM($E$2:$E$4)`に相当します。(厳密には一致しないのですが、説明の都合上端折っています。)
<img width="945" alt="スクリーンショット 2018-08-23 12.59.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/1eb84d9b-da34-aad1-6c15-9d254c219a2f.png">
そして、集計の結果を元のデータと結合し、
<img width="1073" alt="スクリーンショット 2018-08-23 13.02.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/cd0f01b9-141c-74d0-71f9-8f9817db54ad.png">
計算フィールドでシェアを計算します。
<img width="852" alt="スクリーンショット 2018-08-23 13.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/cc0a480c-dbca-4e98-6aab-d33c36edb98e.png">
Excelと比べて複雑に見えますが、ExcelだとSUMの範囲の指定の仕方によっては、間違った値になってしまうことがあります。例えば、`SUM($E$1:$E$2000)`みたいなことをしている場合、2000行を超えると集計誤りが発生します。他にも`SUM(E1:E100)`となっているのに気づかずコピペして`SUM(E101:E200)`になってしまい、集計誤りが発生するなどもありえます。Excelユーザのスキルレベルは千差万別なので、どういった問題が起こるかわかりませんし、セル単位で式が書かれているので正しさの検証がこんなんです。Prepではそういった問題が起こりにくくなる点で安心できます。

## SUMIF関数を使った計算
SUMIF関数の場合でも、SUM関数と同様の方法が使えます。以下のように集計対象列があり、集計対象が`"yes"`の場合のみシェアを出したいとしましょう。
<img width="441" alt="スクリーンショット 2018-08-23 14.45.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/dfafde87-1b21-68e6-b492-6ee938a50177.png">
この場合でも、フローの形は先程と全く同じになります。
<img width="564" alt="スクリーンショット 2018-08-23 14.46.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/ae487653-9721-4717-1432-465704af6afd.png">
変更点は、まず集計の際にグループ化したフィールドの中に集計対象の列を追加します。
<img width="1175" alt="スクリーンショット 2018-08-23 14.47.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/b935cd48-483d-e255-8676-ddb00f3f46d0.png">
そして、結合の際に集計対象の列も結合区に加えた上で、
<img width="326" alt="スクリーンショット 2018-08-23 14.49.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/8afb8344-fe42-6f4a-4617-b166511c7732.png">
シェアの計算の時点で残りのIFを追記すれば同じことができます。
<img width="853" alt="スクリーンショット 2018-08-23 14.50.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/94249/f28d2fbd-90bc-3cae-16c5-e7ebf8e1d0e8.png">
Excelと違い、どのステップで何をするかを意識しないといけないですが、慣れてくるとExcelよりも条件に柔軟に追従できるのではないかと思います。

# おわりに
今回は非常にシンプルな例だけを取り上げていますが、今後、業務や趣味で躓いた際には、このメモに書き加えていこうと思います。Tableau Prepはアップデートが激しいので、次のバージョンですぐに、もっと便利になるかもしれませんが、変更されるまでは自分用のメモとして書き溜めておこうと思います。