こんにちは、廣本です🦉。今回はTableauでダッシュボードを作る際の小技について。
Tableauのダッシュボードを作っていると、ついついグラフをたくさん詰め込みたくなりますよね。でも、実はそれって描画速度に大きな影響を与えてしまうのです。
パフォーマンスを重視するなら、グラフの数は必要最小限に抑えるのがベストプラクティスです。ただ、「1つの画面でいろんなグラフを見比べたい!」という要望も当然あると思います。
そこで今回は、複数のワークシートを1つにまとめる便利なテクニックをいくつか紹介します。
INDEX関数とは
みなさん、INDEX関数は使ったことありますか?
Tableauの公式サイトでは以下のように説明されています。
値に関しては並べ替えをせずに、パーティション内の現在の行のインデックスを返します。最初の行のインデックスは 1 から始まります。
ようするに、表計算で定義した順番に連番を振ることができる関数です。
このINDEX関数をうまく使うと、ワークシートの数を減らすことができます。
横に[カテゴリ]、縦に[サブカテゴリ]を並べるクロス表現
列に[カテゴリ]、行に[サブカテゴリ]を入れる方法
列に[カテゴリ]、行に[サブカテゴリ]を入れてしまうと、以下のように、データ内のすべての[サブカテゴリ]が並んでしまいます。そのため、それぞれの[カテゴリ]に関係のない[サブカテゴリ]の棒グラフは空白になってしまい、不格好でわかりにくい見た目になってしまいます。

複数シートで作成する方法
そこで、仕方なく[カテゴリ]フィルターをかけたシートをそれぞれ作成し、

ダッシュボード上にすべてのワークシートを並べると、やりたいことは実現できます。

しかしこの方法ではワークシートをそれぞれ作成する手間・メンテナンスする手間がかかりますし、ダッシュボード上で使用するワークシートの数が増えて描画速度にも悪影響を及ぼしてしまうかもしれません。
今回は3シートですみましたが、もしもカテゴリの種類が10種類以上あったら……?想像するだけで大変ですね。
INDEX関数を使用する方法
そこで活躍するのがINDEX関数です。
行に[サブカテゴリ]の代わりにINDEX関数で作成した計算式(不連続に設定します)、マーク内に[サブカテゴリ]を配置します。そしてINDEX関数の表計算を[サブカテゴリ]ごとに設定すると、

下記のように横に[カテゴリ]、縦に[サブカテゴリ]が並ぶグラフを1シートで作成することができます。

各[カテゴリ]内の[サブカテゴリ]ごとに連番を振り、その連番を行に置くことで1シートにまとめることができました。
都道府県すべての推移グラフ
今度は分析の切り口がたくさんある場合を考えてみましょう。例えば[都道府県]ごとの売上の推移を見たい場合、方法はいくつか考えられます。
[都道府県]ごとに線を色分けする方法
簡単かつ1シートで作成することはできますが、比べる数が多すぎて線がごちゃごちゃしてしまいます。これではなかなか分析はしづらいですね。

[都道府県]を横に並べる方法
次に横に[都道府県]を並べる方法です。それぞれの[都道府県]ごとの推移は見やすくなりましたが、見る際に横にスクロールをする必要があり、比較をしたり、全体を俯瞰的に見たりすることはしづらくなってしまいます。

INDEX関数を使用する方法
ではINDEX関数を使用する方法を考えてみましょう。INDEX関数を使用すると、縦横に並べるグラフの数を任意に指定することができます。
今回は[都道府県]ごとのグラフを並べたいので、7×7に並ぶよう設定してみましょう。
まずは下記2つの計算式を準備します。 ※今回は7×7のため、7を計算式で使用していますが、ここは並べたい数に応じて変更しましょう。
横
(INDEX()-1)%7
「%」は割り算をしたときの余りの数を計算するための関数です。
縦
INT((INDEX()-1)/7)
「INT」は数値を整数で丸めるための関数です。今回は割り算の結果を「INT」で囲っているため、割り算をしたときの商を計算しています。
そしてグラフを作成します。列に[横]、行に[縦](それぞれ不連続に設定します)を並べ、マーク内に[都道府県]を配置しておきます。
[横][縦]それぞれの表計算が[都道府県]ごとに行われるように設定すると、

下記のように各都道府県の推移グラフを7×7マスの形で表示することができました。
※余談ですが、サンプルスーパーストアには45都道府県のデータしかありません。

計算の理屈は以下のようになっています。
INDEX関数は都道府県ごとに連番を振っており、愛知県が1、愛媛県が2……和歌山県が45となっています。
そして**それぞれの連番から1引いた数を7で割ったときの余りが[横]、商が[縦]**となります。
| 都道府県 | INDEX | INDEX - 1 | 横(=7で割ったときの余り) | 縦(=7で割ったときの商) |
|---|---|---|---|---|
| 愛知県 | 1 | 0 | 0(0÷7 = 0あまり0) | 0(0÷7 = 0あまり0) |
| 愛媛県 | 2 | 1 | 1(1÷7 = 0あまり1) | 0(1÷7 = 0あまり1) |
| … | … | … | … | … |
| 和歌山県 | 45 | 44 | 2(44÷7 = 6あまり2) | 6(44÷7 = 6あまり2) |

まとめ
今回はINDEX関数を使用した、ワークシートの数を減らすためのTipsを紹介しました。
INDEX関数は使いこなせると様々な応用が効きますので、ぜひお試しください!