Tableauで並び替えを行ったとき同値ならどうなる？

明けましておめでとうございます。
いよいよ2025年ですね。
さて、新年1発目のブログはやはりTableauで始めたいと思います。
今回は、私が実務でかなり悩んだ「並び替えで同値の場合」について考えてみたいと思います。

## 並び替えで同値とは

サンプルスーパーストアで、以下のような場合に考えてみたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/004e9a01-1d30-c6aa-5710-188ef29831fc.png)

カテゴリごとサブカテゴリごとに「製品Idの個別のカウント」＝製品の種類数を数えたものですが、　
本棚と椅子の個数が同じですね。（他にも同じのありますが、割愛します）
どちらも個数は同じなものの、この場合は本棚が上に来ています。
その仕組みはどうなっているのでしょうか？
実はこれ、「フィールド」か「ネスト」かによって変わります。

## 「ネスト」の場合
ネストとは、並び替えるフィールドが別のディメンションで区切られているときに、
その別のディメンションごとに並び替えるかどうかです。
言葉だけでは分かりにくいと思いますが、
こちらのサイトがとてもわかりやすいので、
ネストをご存じでない方はぜひご一読ください。
[【Tableau】並び替え～ネストとは～](https://kaodora.hatenablog.com/entry/2020/11/24/233425)

さて、「ネスト」で並び替えの基準値が同値の場合、「データソース順」に並びます。

先ほどのVizでは、このように並び替えが設定されております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/7586aeab-58db-22be-4dcc-80f4b84fa78a.png)

ここで、「データソース順」とは何なのかというと、その名の通りデータソースが元々並んでいた順です。
Tableauで並び替えを特に何も設定せずVizを作っていくと、データソース順に表示されます。
データソース順がどんな順なのかを確かめるには、そのディメンションを表示してみるだけでOKです。
スーパーストアの「サブカテゴリ」で見てみましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/9c43a23b-12d2-98ac-9b51-98546fa3d9ba.png)


「本棚」が一番下、「椅子」が真ん中の方ですね。
この2つに限っていうと、データソース順では「椅子→本棚」となります。

あれ？さっきと逆じゃない？データソース順に並ぶって言わなかった？

その通りです。もう一度ネストでの並び替えを見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/004e9a01-1d30-c6aa-5710-188ef29831fc.png)

「本棚→椅子」となっています。
理由は簡単、「降順」だからです。
私はここに気づかず時間を浪費しました。
並び替え順を「昇順」にすると「椅子→本棚」の順となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/b74e4d9c-9d3b-cb35-55a7-e614a2a187f7.png)

まとめると、「ネスト」の場合並び替えの基準値が同値の場合はその中でデータソース順に並びます。

## 「フィールド」はどうなのか？
「フィールド」の場合はどうかというと、
まず「ネスト」の時に置いているもう一つのディメンションありますよね？
まずその別のディメンションを外す。
その場合に並び替えたときの順と同じになります。
どういうことかというと、
先ほどまでカテゴリごとサブカテゴリごとの製品数にしていたのを
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/46d99a37-9e7b-adfc-afa8-cad8cbe59db5.png)
このようにサブカテゴリごとだけにしてしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666377/5747c6ed-dc74-001e-4570-438baa0d0060.png)
この時に並んでいる順です。

ただ、カテゴリはサブカテゴリごの大分類なので、
カテゴリのディメンションを外したところで製品数は変わりません。
なので問題の「椅子」と「家具」の製品数は同じになり、こちらも同値となります。

この時の並びが「椅子→家具」になっている理由を知りたいのですが、
ごめんなさい、なぜこうなるのかは分かっていないです...
ただ、もしこの時椅子の方が製品数が多ければ「椅子→家具」になるし、
家具の方が製品数が多ければ「家具→椅子」になります。
当たり前の話なのですが、並び替え順を「フィールド」にした場合はこのように、
一つのディメンションでソートした時の順です。
そしてそれが、並び替えの基準値が同値の場合も保たれます。
ところが「ネスト」にすると、もう一つのディメンションでフィルターして、尚且つそのディメンションの中での当該ディメンションの順になります。
ここが違うところですね。

## まとめ
並び替えの基準値が同値の場合
 - 「ネスト」を選ぶと、データソース順になる（降順・昇順に注意）
 - 「フィールド」を選ぶと、当該ディメンション一つで指定したメジャーを並び替えた順になる（それでも同値の場合は、残念ながら不明）

## おわりに
いかがでしたでしょうか？
この問題は私が実務で、現行ダッシュボードのデータソースを変更したとの、現行版との差分検証を行っていた時でした。
なぜ差分が出ているのか、調査をする際に、ディメンションの並び替え方法が「ネスト」から「フィールド」に変更されていたことに気づいたものの、なぜそれで違いが生じるのか？が分からなかったためです。
調べども調べどもわからないので遂にTableau Comminuty Forumで質問しました。
[Sort order when there are multiple values with the same base value](https://community.tableau.com/s/feed/0D5cw000007OFOYCA4)
（英語ですが、もしよかったらDeepLか何かで翻訳して読んでみてください。）

すると、Tableau Forum AmbassadorのJamesが、分かりやすく解説してくれました！
残念ながら上記「フィールド」の場合の詳細な仕組みは分からなかったのですが、
「ネスト」についてはこの回答からとてもよく理解できました。
Comminuty Forum、ぜひおすすめです。

それでは、最後まで読んでくださりありがとうございました。
2025年は昨年よりたくさん書いていこうと思うので、よろしくお願いします。

Rieko