【Metabaseチュートリアル】ビジュアライゼーションを理解しよう

[< 前(Questionにフィルターを設定してみよう)](https://qiita.com/k_0120/items/07bdb859773eb77ad1a7)
[> 次(Questionのデータをダウンロードしてみよう)](https://qiita.com/k_0120/items/5be63523d13a0444b2cb)

# このチュートリアルで理解できること

- NativeQueryで作成したQuestionのビジュアライゼーション方法について

# Metabaseで作ることができるビジュアライゼーションの種類

- 2019年12月27日現在、下記のビジュアライゼーションでデータ抽出した結果を表示することができます。
  - 折れ線グラフ
  - 縦棒グラフ
  - 折れ線＆縦棒グラフ
  - 面グラフ
  - 横棒グラフ
  - 散布図
  - 円グラフ
  - ファネルグラフ
  - トレンドグラフ
  - プログレスグラフ
  - ゲージグラフ
  - 数値
  - テーブル
  - マップ


# 折れ線グラフ

- 注文データを管理するOrdersテーブルをもとに、月別の一人あたり平均商品購入数を折れ線グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL
SELECT 
  TO_CHAR(created_at, 'YYYY/MM') AS month
  , COUNT(id)::FLOAT / NULLIF(COUNT(DISTINCT user_id), 0) AS avg_count_order
FROM 
  orders 
WHERE 
  created_at >= '2018-01-01'::TIMESTAMP
  AND created_at < '2019-01-01'::TIMESTAMP
GROUP BY 
  month 
ORDER BY 
  month
```

- 結果が出力されたら、ビジュアライゼーションの`線`をクリックし、折れ線グラフが表示されることを確認してみましょう。

![Question1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/c900e73c-0478-ca64-b551-a66460ad06e6.png)

- 設定をクリックすることで、折れ線グラフの設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 線の色や値の軸を左右のどちらに設定するか、点線のON/OFF、欠損値の置き換えを変更することができます。
  - グラフ上に、目標値を表示させることもできます。
- 軸
  - X軸、Y軸の表示/非表示を切り替えることができます。
- ラベル
  - X軸、Y軸の表示/非表示の切り替えや、ラベル名を変更することができます。



# 縦棒グラフ

- 注文データを管理するOrdersテーブルをもとに、月別の購入者数と購入商品数を縦棒グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL
SELECT 
  TO_CHAR(created_at, 'YYYY/MM') AS month
  , COUNT(id) AS count_order 
  , COUNT(DISTINCT user_id) AS count_order_user
FROM 
  orders 
WHERE 
  created_at >= '2018-01-01'::TIMESTAMP
  AND created_at < '2019-01-01'::TIMESTAMP
GROUP BY 
  month 
ORDER BY 
  month
```

- 結果が出力されたら、ビジュアライゼーションの`棒`をクリックし、縦棒グラフが表示されることを確認してみましょう。

![Question2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/50993710-53c0-e5d8-4f67-e74e8a7a209d.png)

- 設定をクリックすることで、縦棒グラフの設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 棒の色や値の軸を左右のどちらに設定するかを変更することができます。
  - グラフの形式を`積み上げグラフ`や`100%積み上げグラフ`に変更することもできます。
- 軸
  - X軸、Y軸の表示/非表示を切り替えることができます。
- ラベル
  - X軸、Y軸の表示/非表示の切り替えや、ラベル名を変更することができます。


# 折れ線＆縦棒グラフ

- 注文データを管理するOrdersテーブルをもとに、月別の一人あたり平均商品購入数を折れ線グラフで、購入者数と購入商品数を棒グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL
SELECT 
  TO_CHAR(created_at, 'YYYY/MM') AS month
  , COUNT(id)::FLOAT / NULLIF(COUNT(DISTINCT user_id), 0) AS avg_count_order
  , COUNT(id) AS count_order 
  , COUNT(DISTINCT user_id) AS count_order_user
FROM 
  orders 
WHERE 
  created_at >= '2018-01-01'::TIMESTAMP
  AND created_at < '2019-01-01'::TIMESTAMP
GROUP BY 
  month 
ORDER BY 
  month
```

- 結果が出力されたら、ビジュアライゼーションの`Combo`をクリックし、折れ線＆縦棒グラフが表示されることを確認してみましょう。

![Question3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/aa6ea4d2-6a53-8c78-679c-4f24032a72a3.png)

- 設定をクリックすることで、折れ線＆縦棒グラフの設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 線の色や値の軸を左右のどちらに設定するか、点線のON/OFF、欠損値の置き換えを変更することができます。
  - 棒の色や値の軸を左右のどちらに設定するかを変更することができます。
  - グラフ上に、目標値を表示させることもできます。
- 軸
  - X軸、Y軸の表示/非表示を切り替えることができます。
- ラベル
  - X軸、Y軸の表示/非表示の切り替えや、ラベル名を変更することができます。



# 面グラフ

- 購入者を管理するPeopleテーブルをもとに、月別で認知元毎の購入者数の累計を面グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。(ウィンドウ関数が使えなかったため、CROSS JOINで代用)

```SQL 
WITH 
  query_results AS (
SELECT
  TO_CHAR(created_at, 'YYYY/MM') AS month 
  , source
  , COUNT(id) AS count_user 
FROM 
  people
GROUP BY 
  month, source
)

SELECT 
  qr1.month
  , qr1.source 
  , SUM(qr2.count_user) AS total_user
FROM 
  query_results AS qr1
INNER JOIN 
  query_results AS qr2
ON 
  qr1.month >= qr2.month
  AND qr1.source = qr2.source
GROUP BY 
  qr1.month, qr1.source
ORDER BY 
  qr1.month, qr1.source
``` 

- 結果が出力されたら、ビジュアライゼーションの`範囲`をクリックし、面グラフが表示されることを確認してみましょう。
- 初期表示では積み上げの面グラフになっていないため、設定メニューの表示から`スタック`をクリックし、認知元毎の累計購入者数がわかるように変更してみましょう。

![Question4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/e2553eaf-9de7-3615-0cc1-d750e04137b3.png)


- 設定をクリックすることで、面グラフの設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 面の色や値の軸を左右のどちらに設定するか、点線のON/OFF、欠損値の置き換えを変更することができます。
  - グラフの形式を`積み上げグラフ`や`100%積み上げグラフ`に変更することもできます。
  - グラフ上に、目標値を表示させることもできます。
- 軸
  - X軸、Y軸の表示/非表示を切り替えることができます。
- ラベル
  - X軸、Y軸の表示/非表示の切り替えや、ラベル名を変更することができます。


# 横棒グラフ

- 注文データを管理するOrdersテーブルをもとに、特定期間中の購入数トップ5を商品を横棒グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL 
SELECT 
  COUNT(orders.id) AS count_order 
  , products.title
FROM 
  orders 
LEFT JOIN 
  products 
ON 
  orders.product_id = products.id
WHERE 
  orders.created_at >= '2018-01-01'::TIMESTAMP
  AND orders.created_at < '2019-01-01'::TIMESTAMP 
GROUP BY 
  products.title 
ORDER BY 
  count_order DESC 
LIMIT 
  5
```

- 結果が出力されたら、ビジュアライゼーションの`行`をクリックし、横棒グラフが表示されることを確認してみましょう。

![Question5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/0c452419-3c54-7c18-3bdf-df87c440bd1d.png)



- 設定をクリックすることで、横棒グラフの設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 棒の色を変更することができます。


# 散布図

- 商品データを管理するProductsテーブルをもとに、価格と評価の関係を散布図で表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL 
SELECT 
  price,
  rating,
  id
FROM 
  products
``` 

- 結果が出力されたら、ビジュアライゼーションの`散布`をクリックしてください。
- 初期表示ではX軸とY軸が設定されていないため、設定メニューのデータからX軸にPRICE、Y軸にRATINGを選択し、散布図が表示されるか確認してみましょう。

![Question6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/b7391f0f-4dc7-fa58-79b8-7e96ed9d74b0.png)



- 設定をクリックすることで、散布図の設定メニューを開くことができます。
- データ
  - X軸、Y軸にどのカラムを設定するかを選択できます。
  - X軸、Y軸にシリーズを追加することで、更に細分化した結果をグラフで表示させることができます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
  - 吹き出しサイズを設定することで、吹き出しの大小を表示させることもできます。
- 表示
  - 吹き出しの色を変更することができます。
  - グラフ上に、目標値を表示させることもできます。
- 軸
  - X軸、Y軸の表示/非表示を切り替えることができます。
- ラベル
  - X軸、Y軸の表示/非表示の切り替えや、ラベル名を変更することができます。


# 円グラフ

- 購入者データを管理するPeopleテーブルをもとに、認知元の割合を円グラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。


```SQL 
SELECT 
  source
  , COUNT(id) as count_user
FROM 
  people
GROUP BY 
  source 
ORDER BY 
  count_user DESC
``` 

- 結果が出力されたら、ビジュアライゼーションの`円`をクリックし、円グラフが表示されることを確認してみましょう。


![Question7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/8932220c-c2c7-cdeb-6339-f5b0ac35ffe2.png)


- 設定をクリックすることで、円グラフの設定メニューを開くことができます。
- データ
  - ディメンション(区切り方)と測定にどのカラムを設定するかを選択できます。
  - 歯車マークをクリックすると、表示する値の形式の変更や、接頭語・接尾語を加えることもできます。
- 表示
  - 凡例の表示/非表示を切り替えることができます。
  - 凡例のパーセンテージ表示のON/OFFを切り替えることができます。
  - パーセンテージの最小値を設定することができます。
  - 円の色を変更することができます。


# ファネルグラフ

- 注文データを管理するOrdersテーブルをもとに、2019年8月を起点に毎月何かしらの商品を注文しているユーザー数をファネルグラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL 
WITH 
  orders_201908 AS (
SELECT 
  user_id 
  , TO_CHAR(created_at, 'YYYY-MM') AS month 
FROM 
  orders 
WHERE 
  created_at >= '2019-08-01'::TIMESTAMP 
  AND created_at < '2019-09-01'::TIMESTAMP
)

, orders_201909 AS (
SELECT 
  user_id 
  , TO_CHAR(created_at, 'YYYY-MM') AS month 
FROM 
  orders 
WHERE
  created_at >= '2019-09-01'::TIMESTAMP 
  AND created_at < '2019-10-01'::TIMESTAMP
  AND EXISTS(SELECT * FROM orders_201908 WHERE orders.user_id = orders_201908.user_id)
)

, orders_201910 AS (
SELECT 
  user_id 
  , TO_CHAR(created_at, 'YYYY-MM') AS month 
FROM 
  orders 
WHERE
  created_at >= '2019-10-01'::TIMESTAMP 
  AND created_at < '2019-11-01'::TIMESTAMP
  AND EXISTS(SELECT * FROM orders_201908 WHERE orders.user_id = orders_201908.user_id)
  AND EXISTS(SELECT * FROM orders_201909 WHERE orders.user_id = orders_201909.user_id)
)

SELECT 
  COUNT(DISTINCT user_id) AS count_user
  , month 
FROM 
  orders_201908
GROUP BY 
  month 

UNION ALL 

SELECT 
  COUNT(DISTINCT user_id) AS count_user
  , month 
FROM 
  orders_201909
GROUP BY 
  month 

UNION ALL

SELECT 
  COUNT(DISTINCT user_id) AS count_user
  , month 
FROM 
  orders_201910
GROUP BY 
  month 
```

- 結果が表示されたら、ビジュアライゼーションの`ファネル`をクリックし、ファネルグラフが表示されることを確認してみましょう。

![ファネル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/cb0b5ed1-7052-3861-ca8a-4bc3fbf84d5a.png)

- 設定をクリックすることで、ファネルグラフの設定メニューを開くことができます。
- データ
  - ステップ(区切り方)と測定にどのカラムを設定するかを選択できます。
- 表示
  - ファネルグラフを棒グラフに切り替えることができます。


# プログレスグラフ

- 注文データを管理するOrdersテーブルをもとに、2019年8月の売上予算と実績をプログレスグラフで表示してみましょう。
- NativeQueryページを開き、`SampleDataset`を選択した上で、下記SQLを実行してください。

```SQL 
SELECT 
  SUM(total) AS sum_total
FROM 
  orders 
WHERE 
  created_at >= '2019-08-01'::TIMESTAMP
  AND created_at < '2019-09-01'::TIMESTAMP
```

- 結果が表示されたら、ビジュアライゼーションの`プログレス`をクリックし、ファネルグラフが表示されることを確認してみましょう。
- 選択時点では目標値が設定されていないため、設定をクリックし、表示メニューの目標値に60000を入れてみましょう。

![プログレス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311026/ff30becd-def7-6dfc-0911-d40606f3f377.png)

- 設定をクリックすることで、プログレスグラフの設定メニューを開くことができます。
- 書式
  - 数値の書式や桁区切りのスタイル、小数点の最小桁数を設定することができます。
  - 結果に対して任意の倍率をかけることができます。
  - 接頭語、接尾語をつけることもできます。
- 表示
  - 目標値を設定することができます。
  - プログレスバーの色を変更することができます。