Supersetを導入して、DBを可視化してみた

# supersetを導入して、DBを可視化してみた

## はじめに

会社でエンジニアブログを書いたので、qiitaにもまとめてみました( ・∇・)
[Supersetを導入して、DBを可視化してみた](http://blog.engineer.adways.net/entry/advent_calendar_2017/10)

## 概要

今回はチームの可視化ツールに [superset](https://github.com/apache/incubator-superset) を導入したのでその紹介をしたいと思います。
可視化ツールにsupersetを選んだ理由は特にないっす。強いて言うならまだ他のチームが使ってなかったから、
検証しよう的なノリで導入したのがきっかけです。

## supersetってなんぞ？

supersetはAirbnbが開発しているOSSのBusiness Intelligence Tool(BIツール)です。
RedashやTableauに似ています。

## 導入

今回はdocker-composeを使ってsupersetの環境を構築したいと思います。docker便利ですね！
(※Dockerの導入に関しては割愛させていただきます)

- [amancevice/superset](https://github.com/amancevice/superset)

では、さっそく進めていきましょう！

```
$ git clone https://github.com/amancevice/superset.git
$ cd superset
$ ls
examples  superset  Dockerfile  LICENSE  README.md  docker-compose.yml
```

examples以下に各ミドルウェアごとのdocker-composeの設定ファイルがあるので、好きなものを選んで試してみるのありかと！
では、さっそくsupersetの環境を作ってみます。

```
$ docker-compose up -d

# 初期設定
$ docker-compose exec superset superset-demo
Username [admin]: admin
User first name [admin]: admin
User last name [user]: admin
Email [admin@fab.org]:
Password:
Repeat for confirmation:
```
上記はアカウントの初期設定になるので、適当なもの設定してください
(※今回はデモデータがある状態でsupersetの環境を構築してます)

上記のアカウント設定が完了後、 http://localhost:8088 にアクセスすると以下の画面が表示されます。

![ログイン画像.png](https://qiita-image-store.s3.amazonaws.com/0/36325/789ea977-ff6a-0e80-2f5b-45c6ecd4cff7.png)


ここでは先ほど設定したアカウント情報を入力してください。
また、画面右上に国旗が表示されてる部分をクリックして日本語に切り替えることも可能みたいです！
(※最近知りましたw)

ログインすると、ダッシュボード画面に遷移します。

![ダッシュボード.png](https://qiita-image-store.s3.amazonaws.com/0/36325/2b42da0e-b2c8-99d1-a9f3-422a4b25ee39.png)


なにかしらクリックしてダッシュボードを確認すると、なんかイケてる画面が出てくると思います！

![ダッシュボードサンプル.png](https://qiita-image-store.s3.amazonaws.com/0/36325/6e0e8b10-bd3d-28ce-ef6d-3b4e922833aa.png)

こんな感じでダッシュボードが表示されれば導入は完了です。

## 設定

続いて、実際にDBと連携にさせてみます。
上部メニューの[ソース]-[データベース]クリックすると以下の画面に遷移します。

![データベース一覧前.png](https://qiita-image-store.s3.amazonaws.com/0/36325/d4b5e338-838b-dff0-c3b0-e21a53545e5d.png)

右上の`+`からクリックして、データベースを作成します。

![テーブル設定.png](https://qiita-image-store.s3.amazonaws.com/0/36325/ef1a0b28-b341-793d-95c3-3e4234c71932.png)

- `Database` の項目にDBの名前をつけます。
- `SQLAlchemy URI` の項目にDBのURIを設定します。  
(※mysqlの場合、`mysql://[ユーザー名]:[パスワード]@[URI]/[DB名]`のような設定になります。その他は[こちらから](http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls)設定方法を確認してください。
- `Expose in SQL Lab` にチェックを入れるとSQL Labからアクセス出来るようになります。

だいたいこんな感じの設定で大丈夫だと思います！(笑)
これで保存するとデータベースが作成されます。

![データベース一覧後.png](https://qiita-image-store.s3.amazonaws.com/0/36325/f03756f7-c13d-49c6-876d-5ee98a06d2b1.png)

次はテーブルを作成します。

上部メニューの[ソース]-[テーブル]クリックすると以下の画面に遷移します。

![テーブル一覧前.png](https://qiita-image-store.s3.amazonaws.com/0/36325/c1757ee8-8dbb-9396-e459-e888f1352b0e.png)


右上の`+`からクリックして、テーブルを作成します。

![テーブル設定.png](https://qiita-image-store.s3.amazonaws.com/0/36325/42fbad92-68f9-0f98-2758-7e595e468ed4.png)

- `Database` は先ほど作ったデータベースを選択してください
- `スキーマ` は必要があれば指定してください
- `テーブル名` はDBにあるテーブルを指定してください

今回は試しに`users`テーブルを作成します。

![usersテーブル作成.png](https://qiita-image-store.s3.amazonaws.com/0/36325/62cdcc25-a6c2-da84-60dc-41d3167198ad.png)

テーブルの定義は以下のようになります。

![usersテーブル定義.png](https://qiita-image-store.s3.amazonaws.com/0/36325/c3b09550-eded-6d0d-9289-0dbef3fd3ea6.png)

ちょっと雑に設定していますが、許してください(笑)
以上で設定は終わりです！

## グラフ化してみよう

続いて、usersテーブルを使ってログイン回数の多い人をグラフ化してみます。
必要となるカラムは以下になります。

- nickname
- sign_in_count

先ほど作成した`users`テーブルをクリックすると、スライスを作成する画面に遷移します。

![スライス作成.png](https://qiita-image-store.s3.amazonaws.com/0/36325/6e260177-c90d-03e8-9e13-96533e52c831.png)

左サイドメニューの設定

- Datasource & Chart Type
  - Datasourceは参照元となるデータを選択するので、今回は`users`になります。
  - Visualization Typeからどのように可視化したいかグラフを選んでください。今回は`PieChart`を選びます。

- Query
  - Metricsの部分ではグラフ化する指標を選択してください。(※`sum_sign_in_count`を選択してください)
  - Group by で選択した対象でグルーピングします。今回はユーザーごとのログイン回数をみるので、ここでは`nickname`を選びます。

以下は任意でいろいろいじってみてください(笑)
期間やグラフのラベルなど、結構いろいろといじれるので楽しいですよ！

- Time 
- Chart Options
- SQL
- Filters

最後に左上の`Run Query`をクリックすると更新がかかります。  
以下のようなグラフが完成しました！( ＾∀＾)

![スライス完成.png](https://qiita-image-store.s3.amazonaws.com/0/36325/3e5949aa-9fdc-4269-617a-f4c94e735444.png)

(※Chart Optionsとかをちょろっといじってます)

あとは、左上の`Save`ボタンを押すとスライスを保存することができます。
これでいつでも確認できるようになりました！

## ダッシュボードをつくってみる
ダッシュボードの画面に遷移して、右上の`+`ボタンをクリックすると以下の画面に遷移します。

![ダッシュボード作成.png](https://qiita-image-store.s3.amazonaws.com/0/36325/fa5218e7-a076-aefd-eda1-dd2257d6714d.png)

- タイトル
- スライス

好きな`タイトル`を記入し、スライスには先ほど作成したスライスを選んで保存をクリックするとダッシュボードの完成です！
以下が作成したダッシュボード画面になります。

![ダッシュボード完成.png](https://qiita-image-store.s3.amazonaws.com/0/36325/06fd174c-a545-fcff-61bc-f241d3bb873d.png)

いい感じでダッシュボードが作れたかと思います。

## 最後に

`superset`はRedashと比べるとグラフの種類とかも豊富で、いろいろと楽しいグラフとかを作れるな〜と個人的に感じています。
私のチームでは、日毎や月間のユニークユーザー数や売上、広告の設定情報などを可視化してたりします。
広告の配信ターゲットなどで、どんなキーワードが多く設定されているとかを確認すると結構楽しいです。(下図)

![キーワードターゲット.png](https://qiita-image-store.s3.amazonaws.com/0/36325/1d164961-6474-deec-99a7-a9a5052db196.png)

また最近では、リリースした機能のテーブルを可視化して監視し、しっかり使われているかなどのKPIにも使うこともあります。

いかがでしたでしょうか？　みなさんがこの記事を読んで無事にダッシュボードを作れていることを祈っていますmm
最後までお読みいただきありがとうございました。