CRMAでチャートの並び替えをカスタマイズする方法

CRMAでは、ディメンションの順位付けはデフォルトでアルファベットまたは番号に基づいて行われます。しかし、ディメンションが日本語の場合、希望する順序にならないことがよくあります。例えば、以下のチャートでは、曜日の順序で来客数を表示したい場合、デフォルトでは期待通りに設定できないことがあります
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/c3861428-2e3c-7440-42ba-777d1a1367a5.png)


**このブログでは、CRMAでチャートの並び替えをカスタマイズする方法を3つご紹介します。**

### 1. 系列の表示ラベルに番号をつけます

#### 1.1 
順序を決定した後、その順序を反映させた列を作成するために、新しいCSVファイルを作成し、ディメンション値の前に順序を示す列を追加します。
例えば、今回の例では、「曜日」列の隣に、値の先頭に順序番号を付けた「曜日」列を作成し、それをCSVとして保存します。
※順序を付ける方法について、値の数が少ない場合は、レシピの変換ノードで「置換」機能を利用することで実現することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/5a1d29c4-49b5-513b-fb51-27d49f0ec159.png)

#### 1.2 レシピで2つのデータセットを結合して出力します

結合ノードで「列」の画面で、共通キー項目は1つだけ残して保存すれば十分です。もう1つの共通キー項目のチェックをはずしてください。
出力ノードを利用してデータセットを出力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/425e7796-9909-c0e8-9ba8-15daa5bd7f00.png)

#### 1.3 チャートの作成

チャートを作成する際、番号が付いている列を選択することで、希望する順序に並び替えが適用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/07e190df-861f-4b34-134c-149e650599d2.png)

しかし、ラベルに番号が表示されることを気にされるユーザーもいらっしゃいます。その場合、次のステップを追加することで番号を隠すことが可能です。

Analytics Studioのホーム画面に戻って、データセットをレンズとして開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/fd0ed26f-8522-2219-dd1f-d7ea32e8e66b.png)

以下のスクリーンショットの通りに、レンズから「項目パネルを表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/88f9e44a-1fdc-ce55-f05c-176d1f0c1e24.png)

番号をついている列の「値を編集」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/f992b6e2-ff74-6740-7d8e-2711d9c0fe3d.png)

値の鉛筆のマークをクリックし、値から番号を削除します。この処理により、表示ラベルは変更されますが、実際の値には番号が残ったままです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/52e63aef-87f7-a6b1-fd92-a6d2e55fbe79.png)

値を更新した後に、「戻る」をクリックし、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/02b9e3dc-b823-aee9-38a3-3e432fc489bc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/be9ae11c-87bd-57e4-aff3-82953710f4ea.png)

ダッシュボードに戻り、画面をリロードしてください。
以下の図のように、グラフの表示ラベルから番号がなくなりますが、並び替えの順序は希望通りに維持されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/c8204f55-1b01-4f61-b4fb-25d16813ed45.png)


### 2.順序の列を作成し、それを使用してディメンションを順位付けします。

#### 2.1

方法1と同じですが、以下のようにCSVを作成し、レシピで結合し、出力します。
注意点があります。
順番の列は数値として作成されていますが、アップロード時にはデータ型を手動で「ディメンション」に設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/a22040b7-0b81-7f7d-9a19-e9a37f9f12cd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/bc780be8-2f27-964c-7148-7e0a6030eec2.png)

#### 2.2
出力したデータセットを利用して、チャートを作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/441b0d2c-9a07-54b5-5a46-a88baf43502a.png)

横棒グラフで「順番」と「曜日」の2つの列を選択します。「順番」の列を第一位に設定してください。その後、「順番」の列に対して「昇順に並び替え」を適用します。これにより、以下の図のように、曜日が希望する順序で表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/663d99f6-9e37-e4c6-6154-c6045656bddb.png)

最後に「順番」列を非表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/5b0ea764-0ff3-9839-cb02-011ebe57bb14.png)

完成図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/0764fc79-50fc-35e2-87bd-e86d6826bd78.png)



### 3. SAQLを利用し、順序を設定します。
最後の方法として、列を追加する必要はありません。元のデータを利用し、作成したチャートのSAQLを改修することで、順序を定義することが可能です。

チャートの編集画面でクエリモードをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/d37866d1-29df-1b78-36d6-a5147d53880a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/2d290089-b9fe-a100-7415-20d3b9e8286b.png)

下図の通りにSAQLを改修します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/1a6203ae-51ec-649c-a885-3d99c1c8a350.png)


順序を定義する列(SortOrder)を作成します。
```case  when 'Column1' == "月" then 1 
when 'Column1' == "火" then 2 
when 'Column1' == "水" then 3 
when 'Column1' == "木" then 4 
when 'Column1' == "金" then 5 
when 'Column1' == "土" then 6 
when 'Column1' == "日" then 7 end  as 'SortOrder';
```

以下のコードは、このチャートを列「SortOrder」の昇順に基づいて並び替えるものです。
```
q = order q by 'SortOrder' asc;
```
最後に、「クエリを実行」をクリックして、テーブル内容が更新されています。
「更新」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/dae2d34b-fd1f-097a-67fa-b1cef3fcf256.png)

但し、「SortOrder」も一緒に表示されていますので、チャートの編集画面に戻って、列「SortOrder」を非表示にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/0577981f-dea6-1189-9107-2fc70c2caf05.png)

SAQLを改修した結果、列名が「A」になってしまう場合があります。
気になる方は、「列の名前を変更」機能を利用して、適切な列名に更新してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/fbad5df2-0da8-724e-6dee-8b2c0c4ea469.png)

完成図！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/51850a0b-bdd3-377f-c5ff-e53cd4856d44.png)