[Tableau]「セット値の変更」アクションでカテゴリを切り替える

今回は「セット値の変更」アクションを使って、動的に集計を切り替えるテクニックをご紹介したいと思います。

（わりと基礎的な記事ばっかり書いてたので、たまにはちょっと応用的な内容も書いてみたくなりました）


[サンプルのダッシュボードはこちら](https://public.tableau.com/views/_16285564942820/sheet0?:language=ja-JP&publish=yes&:display_count=n&:origin=viz_share_link)

# はじめに

今回やりたいのは↓です。

**「あるディメンション別の集計を可視化しつつ、そのディメンションを一部変更したらどうなるかをシミュレーションする」**

…と言ってもパッとイメージ湧かないと思うので、スーパーストアのサンプルデータを使って次のようなシチュエーションを想定してVizを作りたいと思います。

* メーカーとの契約打ち切りを検討している
* メーカーとの契約を打ち切った場合、カテゴリ別の売上がどう変化するのかをシミュレーションしたい
* ダッシュボードでポチポチと切り替えられるようにしたい

…細かい設定へのツッコミはなしでお願いしますね。

# やってみよう！

## 0. 大まかな方針

詳細を解説する前に、どういうことをやるのか簡潔に説明しますと、

* ダッシュボードでメーカーを選択すると、セットが更新される
* セットに登録されているメーカーのカテゴリを「契約打ち切り」で上書きする
* 元々のカテゴリと、上書きしたカテゴリとで売上を並べて比較する

こんな感じです。

## 1. 準備

まずはベースを作っていきます。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/7438272f-9e20-3d50-9637-cfeac5a6e94c.png) |
|:--|


詳細な手順は省略しますが、

1. メーカー別の製品数リストを作成。
1. カテゴリ別の売上を表す棒グラフを作成
1. 1と2を組み合わせたダッシュボードを作成

というポイントがクリアできていればOKです。

## 2. セットの作成

次に、メーカーのセットを作成します。
データソース欄の「メーカー」を右クリックし、「作成」 > 「セット…」を選択します。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/27321a65-611f-67a7-1db2-529880a0c55b.png) |
|:--|

この時点では値を指定しておく必要はありません。

## 3. セット値変更アクションの作成

ダッシュボードを開いた状態で、ツールバーの「ダッシュボード」 > 「アクション」 を開きます。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/04a8cfe0-61ca-6268-5390-8f28cd5d26d8.png) |
|:--|

そして、「セット値の変更」アクションを作成します。
今回の主役です。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/29953925-18f6-597e-0700-da8fc831ffa4.png) |
|:--|

アクションの内容はこんな感じ。「セットから全ての値を削除」を選んでおくと期待した操作性になります。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/897e6a5c-7d5a-e92f-381e-d40f55d7344a.png) |
|:--|

これでアクションの設定は完了です。

Viz上はまだわかりませんが、ダッシュボード上でメーカー（のグラフ部分）をドラッグすると、セットが更新されるようになりました。
後の工程でわかりやすくするため、適当にメーカーを選択しておいてください。

## 4. カテゴリを上書きする

今回のキモである、セット値を使ってカテゴリを上書きする設定をします。
と言っても、元々のカテゴリを上書きすることはできませんので、上書きした結果の新しいカテゴリを作成します。

計算フィールドで、以下のような式を書きます。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/79918fe1-1b3f-2142-4f98-5a80b00a4607.png) |
|:--|

意味合いとしては、メーカーが[メーカー セット]に含まれるものだったら'契約打ち切り'を、そうでなければそのままの[カテゴリ]を返す、という内容になります。

ちょっと違和感あるかもしれませんが、条件式を書かなくてもセットは単体でIFの条件として書くことができます。
↓と同じ意味ですね

```
IF [メーカー] IN [メーカー セット] THEN '契約打ち切り' ELSE [カテゴリ] END
```

## 5. 上書きしたカテゴリでグラフを作る

すでに作ってあるカテゴリ別売上のシートを複製して、先ほど作った上書きカテゴリに入れ替えます。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/dc776887-dc7b-219e-757a-56377862eb02.png) |
|:--|

「契約打ち切り」というカテゴリが表示されましたね。

ちょっとややこしいですが、

**ダッシュボードで選択されたメーカーがセットに保持される → セットに保持されたメーカーのカテゴリが、「契約打ち切り」で上書きされる**

という状態です。

あとは、色とソートを元のカテゴリに合わせておきます。

## 6. ダッシュボードの体裁を整える

上書きカテゴリのシートもダッシュボードに追加します。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/53730153-55ea-5c2a-fde1-f5e4e0c94591.png) |
|:--|

ちょっと不格好なので、スタイルを整えましょう。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/984e167d-8f4b-4f2c-71ca-3a3d4b7927b7.png) |
|:--|

このやり方は↓を参考にしてみてください。

https://qiita.com/Horino_Yohei/items/c35ba8118ca05854c8b6

## 7. 完成！！

これで完成です！
メーカーを選択すると、そのメーカーが「契約打ち切り」になった場合のシミュレーションができるようになりました。

| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/b2edd2f0-2f6d-fbc3-4303-db032b958028.png) |
|:--|

さらに応用としていろんな工夫ができます

* 今回は「契約打ち切り」だけでしたが、パラメータを使って、カテゴリAにしたパターン、カテゴリBにしたパターンなどを比べてみる
* 選択されたメーカーは色をつけてわかりやすくする
* 複数のセットを使って、さらに複雑な条件を可視化する

# フィルターするより、セット値の変更をオススメする理由

ダッシュボード上で選択した結果を別シートに適用させる場合、おそらく真っ先に思い浮かぶのはフィルターアクションの方かなと思います。

でも今回のように、「消えた値に興味がある」ようなシチュエーションの場合は、ぜひセットを使ってみていただきたいです。
なぜなら、セットの場合は**「消える値」を可視化することができる**からです。

フィルターを使うと、当然ですがフィルターされた値は消えてしまいますよね。
それはそれですっきりするのですが、じゃあどのくらい消えたんだろうか、というのを直感的に理解するのはちょっと大変です。
ないものを考えるのは難易度が上がりますので、「消える値」に興味があるVizでは使いづらいのです。

一方で今回のようにセットを使うと、「ここが消えるよ！」とVizに表示することができます。
Vizにあるので、視覚的に把握しやすいですし、ツールチップだって出せます。

# まとめ

フィルターではなくセットを使うことで表現の幅が広がります、という記事でした。

特に「消える値」に興味がある場合はセットの方がわかりやすいですし、グリグリ動かせるダッシュボードはやっぱり作っててテンションが上がります。
気付いたら作り込みに集中しすぎてで時間が解けるやつですね。

良いシチュエーションがありましたら、ぜひ試してみてください。

…まぁ、ちょっと面倒ですけどね。