Tableauでフィルターの表示順を制御する方法：都道府県の並び順を指定する

Tableauはデータの可視化において非常に強力なツールですが、フィルターの表示順を制御する際に少し工夫が必要な場合があります。
特に、都道府県のような特定の順序で表示したい場合、デフォルトではアルファベット順（または文字コード順）で並び替えられてしまいます。
この記事では、ASCIIコードの特殊文字を活用して、都道府県のフィルター表示順を制御する方法を紹介します。

## 課題：フィルターの表示順がアルファベット順になる

Tableauでデータを表示する際、一覧表示では簡単にソート順を指定できます。しかし、フィルターの場合はデフォルトでアルファベット順（または文字コード順）で表示されます。例えば、都道府県を「北海道、青森県、岩手県…」と表示したい場合、デフォルトの並び順では期待通りに並びません。

## 解決策：ASCIIコードの特殊文字を活用する

この問題を解決するために、ASCIIコードの特殊文字を活用します。具体的には、都道府県名の前に特殊文字を追加し、その文字の順序で並び替えを制御します。

以下は、そのためのSQLテーブル定義とサンプルデータです。





```sql
-- 依存関係のあるテーブルを先に削除
DROP TABLE IF EXISTS population_data;
DROP TABLE IF EXISTS prefecture_master;
DROP TABLE IF EXISTS region_master;

-- 都道府県ディメンションテーブルの作成
CREATE TABLE prefecture_master (
    prefecture_id SERIAL PRIMARY KEY,
    prefecture_name VARCHAR(50),
    display_order INTEGER,  -- 表示順序を制御するフィールド
    is_active BOOLEAN DEFAULT true
);

-- サンプルデータの挿入
INSERT INTO prefecture_master (prefecture_name, display_order) VALUES
    (E'\u0001\u0001\u0001北海道', 1),
    (E'\u0001\u0001\u0003青森県', 2),
    (E'\u0001\u0001\u0005岩手県', 3),
    (E'\u0001\u0001\u0008宮城県', 4),
    (E'\u0001\u0003\u0001秋田県', 5),
    (E'\u0001\u0003\u0003山形県', 6),
    (E'\u0001\u0003\u0005福島県', 7),
    (E'\u0001\u0003\u0008茨城県', 8),
    (E'\u0001\u0005\u0001栃木県', 9),
    (E'\u0001\u0005\u0003群馬県', 10),
    (E'\u0001\u0005\u0005埼玉県', 11),
    (E'\u0001\u0005\u0008千葉県', 12),
    (E'\u0001\u0008\u0001東京都', 13),
    (E'\u0001\u0008\u0003神奈川県', 14),
    (E'\u0001\u0008\u0005新潟県', 15),
    (E'\u0001\u0008\u0008富山県', 16),
    (E'\u0003\u0001\u0001石川県', 17),
    (E'\u0003\u0001\u0003福井県', 18),
    (E'\u0003\u0001\u0005山梨県', 19),
    (E'\u0003\u0001\u0008長野県', 20),
    (E'\u0003\u0003\u0001岐阜県', 21),
    (E'\u0003\u0003\u0003静岡県', 22),
    (E'\u0003\u0003\u0005愛知県', 23),
    (E'\u0003\u0003\u0008三重県', 24),
    (E'\u0003\u0005\u0001滋賀県', 25),
    (E'\u0003\u0005\u0003京都府', 26),
    (E'\u0003\u0005\u0005大阪府', 27),
    (E'\u0003\u0005\u0008兵庫県', 28),
    (E'\u0003\u0008\u0001奈良県', 29),
    (E'\u0003\u0008\u0003和歌山県', 30),
    (E'\u0003\u0008\u0005鳥取県', 31),
    (E'\u0003\u0008\u0008島根県', 32),
    (E'\u0005\u0001\u0001岡山県', 33),
    (E'\u0005\u0001\u0003広島県', 34),
    (E'\u0005\u0001\u0005山口県', 35),
    (E'\u0005\u0001\u0008徳島県', 36),
    (E'\u0005\u0003\u0001香川県', 37),
    (E'\u0005\u0003\u0003愛媛県', 38),
    (E'\u0005\u0003\u0005高知県', 39),
    (E'\u0005\u0003\u0008福岡県', 40),
    (E'\u0005\u0005\u0001佐賀県', 41),
    (E'\u0005\u0005\u0003長崎県', 42),
    (E'\u0005\u0005\u0005熊本県', 43),
    (E'\u0005\u0005\u0008大分県', 44),
    (E'\u0005\u0008\u0001宮崎県', 45),
    (E'\u0005\u0008\u0003鹿児島県', 46),
    (E'\u0005\u0008\u0005沖縄県', 47);

-- 地域マスターテーブルの作成（地方区分）
CREATE TABLE region_master (
    region_id SERIAL PRIMARY KEY,
    region_name VARCHAR(50),
    sort_priority INTEGER,
    is_active BOOLEAN DEFAULT true
);

-- 地域データの挿入（地方区分の標準的な並び順）
INSERT INTO region_master (region_name, sort_priority) VALUES
    ('北海道地方', 1),
    ('東北地方', 2),
    ('関東地方', 3),
    ('中部地方', 4),
    ('近畿地方', 5),
    ('中国地方', 6),
    ('四国地方', 7),
    ('九州地方', 8);

-- 人口データテーブルの作成
CREATE TABLE population_data (
    data_id SERIAL PRIMARY KEY,
    prefecture_id INTEGER REFERENCES prefecture_master(prefecture_id),
    population INTEGER,
    year INTEGER,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 2020年の人口データを追加（サンプル）
INSERT INTO population_data (prefecture_id, population, year) VALUES
    (1, 5224614, 2020),   -- 北海道
    (13, 14047594, 2020), -- 東京都
    (27, 8837685, 2020),  -- 大阪府
    (14, 9237337, 2020),  -- 神奈川県
    (23, 7542415, 2020),  -- 愛知県
    (40, 5135214, 2020),  -- 福岡県
    (28, 5465002, 2020),  -- 兵庫県
    (11, 7350353, 2020);  -- 埼玉県 

```


## 3. 仕組み
各都道府県名の前に、\u0001、\u0003、\u0005 などの特殊文字を追加しています。

これらの特殊文字は、ASCIIコードの順序で並び替えられます。

例えば、\u0001 は \u0003 よりも小さいため、北海道 が 青森県 よりも先に表示されます。

Tableau 表示：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133516/c2aeff5c-15ec-486c-b8a7-09616f127377.png)