【Tableau】並び替えが嫌だ【Data Saber Apprentice】
この記事は Tableau DATA Saber Apprenticeのコミュニティポイント稼ぎの記事です。
最近、業務上の必要性と、前職でライセンス持ってたのに使わせて貰えなかった失われた青春のプレイバックで、少しずつTableauを勉強し始めています。
そんな中、入門書や先人のブログを読んでいて不満に思っていることがありまして。
地域別に集計すると、デフォルトだと下記のような並び順になるのですが。
ココ、ほとんどの入門書やサイトでは「最後に手動で並び替えたら終了です」って書かれてるんですよね。正直めんどくさいです。これが都道府県になった日にはもう、発狂してしまいます。
ということで、今回は「都道府県を楽してキレイに並び替える」をテーマにしたいと思います。
作戦1:最初からコードを振っておく
元データの都道府県の頭に通し番号を振っておくパターンです。この場合は、データテーブルを作る段階でそういう設計にしておきます。
個人的に好きなやり方なので、自分でデータ整備からする場合には多用しています。テクニックとしては、「1_北海道」ではなく「01_北海道」にしている点です。文字列のソートになるので、先頭のゼロが無いと「1_北海道」の次に「10_群馬」が来てしまいます。
この方法のメリットは、データソース順だろうがアルファベット順だろうが、一切頭使わなくてもキレイに並ぶ点です。また、コードさえ振ってあれば後の実装は非常にシンプルで、他のツールでも応用がききます。Excelのピボットテーブルでも一発で使えますし、SQLでORDER BYしたり、Rでarrangeしたりする際も簡単です。
デメリットとしては大きく2つ。1つ目に、そもそも元データにコードが振ってあるとは限らないという点。2つ目に、画像の「01_北海道」のように、先頭にコードが表示されてしまうことを嫌がる人もいるかも、という点です。
作戦2:コード・ラベル対応表をinner joinする
元データにコードが付与されてるとは限らないので、コード・ラベル対応表を別途作成して、元データにinner joinしてしまいましょう。
実は、国土交通省のページに都道府県名に対応するコード一覧が公開されています*1。なお、市区町村も含めた地方公共団体統一のコードは(先程とは別管轄なのか)総務省のページに公開されています*2。
結合した結果は下記の通りです。
注意点として、サンプル-スーパーストアは岩手だけ「岩手県」表記になっているので、そのままinner joinすると岩手のレコードが落ちてしまいます。なにか特別な意図でもあるに違いありません。
ということで、結合計算の機能を使って、スーパーストア側の都道府県カラムから「県」という文字列を結合時だけ削除しています。
inner joinしたコードを使った結果は下記の通りになります。
意図通り(!)、岩手県の”県”表記を残しつつ、付与したコードで並び替えることができました。
「都道府県_コード」はデフォルトだとメジャーになってるかもなので、ディメンションに変換したほうが使いやすいです。
作戦2(延長線):コードの表記を消す
ここでゴールしてしまいたいのですが、Tableauは見栄えを気にするツール。コードが表示されているのが気に食わない人もいるんじゃないでしょうか。
ということで、コードで並び替えるけど、コード自体はVizに表示させない方法を試してみましょう。
まずは先程と同様に、「都道府県_コード」を行に配置する
⇒「都道府県_コード」の横の▼を押す
⇒「ヘッダーの表示」のチェックを外す
これで、コードを表示させないまま、コード順に並べることができました。
この方法の地味なメリットとして、項目追加や並び順への修正への容易さがあります。元のコード・ラベル対応表だけをキチっと管理しておけば、それを使っているすべてのVizの並び順は自動で最新版にアップデートされます。マスタデータの管理は重要ですよね。
ある程度データ基盤が整っている環境ですと、データベースに繋ぐ運用をしていることも多いかもしれません。その場合、トランザクションテーブル上にはコードだけが存在していて、ラベルを後から結合することも多いと思います。ので、このやり方はそれなりに出番があるんじゃないでしょうか*3。
作戦1のコード・ラベル一体型から宗旨変えしたい方は、カスタム分割をお使いくださいませ。
まとめ
「手動で並び替えたくない!」というモチベーションの元、対応策を検討してきました。とはいえ、地方くらいであれば手で並び替えちゃったほうが早いですよね。
もっと並び替え項目が増えたり、簡単な並び替えでも頻発するようであれば、検討してみてくださいませ。
と、ここまで書いた内容ですが、クラスメソッドさんのブログで5年以上前に同じことを書かれてしまっていました。
ということで、本ブログのオリジナリティは「01_北海道」の扱いと、国土交通省のコード表くらいです。
引き続きどうぞ、よろしくお願いいたします。
*1:が、お察しの通り酷いレイアウトです。ということで縦持ちに変換したものを作成しました。都道府県コードラベル対応表.xlsx
*2:6桁目はチェックディジットという無駄に凝ったコード体系です。が、レイアウトは以下略
*3:という運用のためには、データベース内や社内のドキュメントにコード・ラベル対応表が存在していることが必須なんですけどね(苦笑)