「売り上げやユーザ増加傾向をDBから抽出して上役に報告したりチームで共有したい」
資料を作る為にSQLを流して、結果をコピーして、Excelに張り付けて、グラフ化して・・・結構面倒で骨が折れます。間違いがあるからもう一回やって、とか嫌ですね。
そんな時BIツールを使えばワンストップでDB内容をグラフ化出来て効率化出来ます。
無料のBIツールとして「Re:dash」がメジャーですが、インストールが手間で導入で詰まるパターンがあるかも知れません。
その点今回のテーマのmetabaseは実行するPCにJavaさえ入っていれば一瞬で導入することが出来ます。物の試しにインストールして動作確認していきましょう。
目次
実行環境
- Windows 10
- Java 8
- サンプルDB「dvdrental」が入ったPostgreSQL
postgresqlにdvdrentalを入れる手順は以下で行なっています。
dvdrentalやpostgresqlがなくても、metabaseが内包するh2データベースにsampleデータベースが入っているのでそれを使って検証することも出来ます。
インストール手順
metabase.jarをダウンロード
metabase公式サイトからmetabase.jarをダウンロードしてきます。
Webアプリを起動
ダウンロードしたjarを実行するとhttp://localhost:3000でWebアプリが起動します。
java -jar metabase.jar
接続先DBをセットアップ
http://localhost:3000にアクセス、セットアップを行います。

名前やメールアドレスを適当に設定した後、分析するデータの入ったDBを設定します。今回はPostgreSQLを選択。

PostgreSQLに接続する為の情報を入力。

Googleアナリティクスで情報収集されるそうなので、それが嫌な場合はオフにしておきましょう。

セットアップ終了です。Re:dashのインストールと比べると手軽過ぎ。
動かしてみる
初期画面はこんな感じ。dvdrentalのテーブルが表示されていてクリックすると様々なデフォルト分析結果を見せてくれるのでポチポチしてみましょう。

グラフ化してみる
「照会する」→「ネイティブクエリ」を選択。

dvdrentalでは既に集計ビュー「sales_by_store」が作られているのでこれをグラフ化してみます。
select * from sales_by_store;
を実行してビジュアライゼーションを棒グラフに設定。
細かい設定は「棒」の右のアイコンで設定ができます。

うーん、集計されすぎていて可視化するにはちょっと寂しいですね。
レンタル数の時間単位集計をしてみる
2005/05/23~25日の三日間で、時間帯毎のレンタル数を集計してみます。
SELECT
DATE_TRUNC('hour',rental_date) AS rental_date_hour,
COUNT(*) AS レンタル数
FROM
rental
WHERE
rental_date BETWEEN '2005-05-23 00:00:00' AND '2005-05-26 00:00:00'
GROUP BY
rental_date_hour
ORDER BY
rental_date_hour;
良くレンタルされている時間帯を可視化出来ました。マウスカーソルを合わせると詳細も見れます。

同じSQL結果を円グラフにしてみます。何も処理を書いていないのにパーセンテージも出してくれます。

グラフの種類は他にも沢山用意されています。好きな分析方法で見える化してみてください。
metabaseはコストパフォーマンス高い
インストール、設定が簡単、グラフ化もSQLを考えれば融通が利きます。
ある程度成長しているデータベースを運用していて、かつ可視化をしていないなら、metabaseは最初のBIツールとして打ってつけかも知れません。
本番でもがっつり使って行く場合は、metabaseのDBを内包のh2からPostgreSQLやMySQLにしておけば運用もし易いです。
有料のBIツールだとスクラッチ代も含めてウン千万するものもあります。良し悪しを比較出来るように、まずはこういった無料オープンソースで事足りないか試してみることをお勧めします。