【Tableau】テキスト表のヘッダ背景色を別シートのグラフ色に対応づける（ように見せる）

グラフで色を使って表現しているディメンションが、別シートのテキスト表で列として配置されているときに、テキスト表のヘッダ背景色をグラフ色に合わせたいという要望があったときの対応。

テキスト表単独では実現できないんですよね、これ（ディメンション値に合わせた色を列ヘッダに適用する機能はないため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/df014b94-7076-4452-b278-4e10930a39f9.png)

## 制約
例によって無茶してるので、細かいレイアウトが合わないことはあります。具体的には以下。

- 以下のケースで、列幅とヘッダ幅が追随しきれないことがある
    - ダッシュボードのサイズが固定ではなく、自動である場合
    - 行に配置するディメンションのフィルタによって縦スクロールバーが表示されたりされなかったりする場合

## 事前準備：帯グラフ（100%積み上げ棒グラフ）とテキスト表の作成
データはいつものサンプルスーパーストア。以下から「スーパーストアの売り上げ」データセットを入手しておきましょう。使うのは「Order」シート。
https://public.tableau.com/app/learn/sample-data

### 帯グラフ（100%積み上げ棒グラフ）の実装
各ディメンションとメジャーをスクショの通りに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/65f9d22a-3f5c-461f-bcad-a0a21305e1fc.png)

Salesの表計算は「合計に対する割合」に指定し「表（横）」方向に計算とします。これで、各Sub Category行におけるSegment売上の割合を可視化できます。

### テキスト表の実装
各ディメンションとメジャーをスクショの通りに配置します。Segment列は並び順を帯グラフのSegment順と合わせておきます。Salesと共にSales割合を置くには、ひと手間要りますね。後述します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/70c03ae9-2d7b-4f39-ac6e-07865a769238.png)

上記において、Sales割合の配置方法は以下です。

1. メジャーネームを列に、メジャーバリューをテキストに配置する
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/4b0f9137-8bf5-49ea-9a61-0b692d50f3eb.png)

1. メジャーバリューに配置された「合計（Sales）」を表計算にして「合計に対する割合」に指定し「表（下）」方向に計算とする。各Segment列におけるSub Category売上の割合を可視化できる。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/bb2cfd97-036e-4a12-ad8b-e22e1160b657.png)

1. 左サイドバーから「Sales」をメジャーバリューのリストに追加する。2で作った、表計算であることを示す△マークが付与されたSalesと、今追加したSalesとの2つがリスト上で並ぶはず
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/edd67e0e-5c5f-4d90-beae-5613ee8cd0dd.png)

1. メジャーバリューから2つのSales以外のすべての列を削除する
2. 微調整する
    1. Sales割合列はテキスト表で「表（下）に沿ったSalesの合計の%」という名称になっているので、別名を振る
    2. Sales列とSales割合列の順番を入れ替える
    3. Sales列の書式設定で単位を円にする

### フィルタを適用する
Sub-CategoryおよびSegmentをフィルタに配置し、適用先ワークシートを「関連するデータソースを使用するすべて」に指定します。

## 列ヘッダ部分をグラフ色に合わせる
ベースとなる2つのワークシートが完成したので、色付きの列ヘッダ部分を作っていきます。

まず前提として、テキスト表単独でヘッダ背景色をディメンション別に色分けすることは、Tableau仕様上不可能（なはず）。書式設定ではすべての列色が一括で変わってしまいますしね。

そこで、テキスト表の上部に配置して「ヘッダであるかのように見せる」ワークシートを1枚、新規作成します。

### ヘッダとして配置するワークシートを作成する
各ディメンションとメジャーをスクショの通りに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/23be94f5-f6ca-453d-a6e8-ee8589f330f7.png)
Segment列は並び替え順を帯グラフと合わせておきます。ラベルは配置の水平方向を中央に指定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/bd36fadc-eaea-45e1-97e5-e2811ab47053.png)

列には直接入力で以下の計算式を入れ、表計算は「合計に対する割合」に指定し「表（横）」方向に計算とします。ここでFIXED式を使わず、単にmin(1)などとすると、割合の合計が100% × Segment数になってしまい、上手く制御できませんでした。なのでFIXEDを使っています。
```csharp
{fixed[Segment]:min(1)}
```

これにより、ディメンション値の数に応じて帯グラフと同色かつ等間隔で並ぶ棒グラフができました。グラフ左右（特に右側）の余白を解消するために、グラフ軸を右クリックして編集し、開始を0、終了を1に固定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/b98c2950-50ed-48a9-ae2b-c5f42c724e1a.png)

その後、グラフ軸で右クリック→ヘッダーの表示 チェックを外して、目盛り表示を解除しておきます。ここまでの手順で、以下のような帯グラフができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/1ce4983f-cba7-4032-a00b-e8fbe001f994.png)

### ダッシュボードに配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/d8cb536e-1716-45ac-892f-abdaed06d012.png)
上記のようにワークシートをダッシュボードへ配置します。ヘッダ部のワークシートは自動調整を「ビュー全体」とします。またヘッダ部のワークシート左側には空白を置いて、テキスト表の行ヘッダ・列ヘッダとの横幅調整に使っています。

ヘッダ部のディメンションとテキスト表内のディメンション値位置が一致していることが確認できたら、テキスト表の列ヘッダはすべて非表示とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/0b891db0-6380-444b-a50b-5d9441f6f89e.png)

---
完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/4ddab710-53db-411d-9968-f04522043657.png)

以下は、完成したダッシュボードのSegmentフィルタから、赤色にあたるHome Officeを除外した様子。テキスト表の列からHome Office該当部が消え、ヘッダ部もこれに追随していることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/2bc143bf-d684-43af-ba58-2c5d158e618e.png)

ここまでで作業完了です。

## 【ボツ案】列ヘッダ部分をグラフ色に合わせる（ディメンション値の数だけワークシートを作る）

フィルタ値により列が消えるテキスト表に対してヘッダ部の追随ができないのでボツにしました。記録として手順は残しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/f1684979-0853-449e-ab34-a8891a4590e8.png)

---

ダッシュボードでテキスト表の上部に配置してヘッダであるかのように見せるワークシートを、列の数だけ作成します。列に配置するディメンションの数だけワークシートを作成・配置するので、ディメンションの内部値が不定の場合には対応しきれないです。けれども、グラフとテキスト表とで色を固定して対応づけたい情報は、業務上の比較指標として予め区分の数や名称が決まっている場合が多いと思うので、あんまり問題にならないと思いますね。

### ヘッダとして配置するワークシートを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/d64c28a2-c598-4128-9823-401e834089ec.png)

諸々、手動で指定します。

- マーク：四角
- 色：対応づけたいSegment値の色　グラフで表示されている値に合わせる
- サイズ：スライダーで最大に
- ラベル：対応づけたいSegment値を文字列で直接入力
    - 文字列を直接入力するには、「詳細」「ツールヒント」アイコンの下部をダブルクリックすると入力フィールドが現れるので、ここにダブルクォート括りで文字列を入力する
    - 文字色は列ヘッダの文字色として使いたい色（今回は黒色で統一）かつ、必要であれば太字に
    - 配置は横方向を中央揃えに

このワークシートを、Segmentに存在する値「Consumer」「Corporate」「Home Office」の3枚、作成します。

### ダッシュボードに配置する

ここまでに作成したワークシートを、以下のようにダッシュボード上に配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/f64edb53-5df2-4033-ac7f-4283d3496301.png)

列ヘッダのように見せかけるワークシートは、「水平コンテナー」のレイアウトコンテナに放り込んで「コンテンツの均等配置」を有効にします。コンテナーの左側には「空白」を配置して、行ヘッダと幅を合わせています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/f6c4c423-5b93-44ff-a48f-fe6c94a30834.png)

テキスト表のヘッダとヘッダ風ワークシートの対応づけが合っていることを確認できたら、テキスト表側のヘッダを右クリック→列のフィールドラベルの非表示 をクリックして完成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/05f3aefc-804b-4b28-aa3e-d031c55ff7d2.png)