redashでラクーンの業績ハイライトを作ってみた
こんにちは今川です。
Paidの開発チームからURIHOの開発チームに移動しました。
redashを広めようと秘密裏に活動しています。
なので今回はredashについての話です。
概要
redashはオープンソースで提供されているダッシュボード作成ツールです。
対応しているデータソースにはMySQL、Oracle、PostgreSQLといった主要なデータソースやGoogleSpreadSheet、Salesforceといったものまで対応しています。
テストデータは弊社のIR情報の業績ハイライトになります。
環境構築
環境構築にはDockerとDocker Composeを使用します。
そのためDockerとDocker Composeのインストールが必要になります。
各環境に合わせてインストールしてください。
Docker Composeは複数のコンテナで構成するアプリケーション管理を楽にしてくれるツールです。
使用するものはredashのgitで提供されているものをデモ用に修正したものを使います。
https://github.com/getredash/redash/blob/master/docker-compose.production.yml
修正箇所はデモ用のデータソースとしてMySQLデータソースを追加してあります。
- docker-compose.ymlファイルを作成します
version: '2'
services:
server:
image: redash/redash:5.0.2.b5486
command: server
depends_on:
- postgres
- redis
ports:
- "5000:5000"
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
REDASH_COOKIE_SECRET: veryverysecret
REDASH_WEB_WORKERS: 4
NLS_LANG: "JAPANESE_JAPAN.JA16EUC"
NLS_DATE_FORMAT: "YYYY-MM-DD"
restart: always
worker:
image: redash/redash:5.0.2.b5486
command: scheduler
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
QUEUES: "queries,scheduled_queries,celery"
WORKERS_COUNT: 2
NLS_LANG: "JAPANESE_JAPAN.JA16EUC"
NLS_DATE_FORMAT: "YYYY-MM-DD"
restart: always
redis:
image: redis:3.0-alpine
restart: always
postgres:
image: postgres:9.5.6-alpine
# volumes:
# - /opt/postgres-data:/var/lib/postgresql/data
restart: always
nginx:
image: redash/nginx:latest
ports:
- "80:80"
depends_on:
- server
links:
- server:redash
restart: always
mysql_datasource:
image: mysql:5.7
volumes:
- ".:/docker-entrypoint-initdb.d"
environment:
MYSQL_ROOT_PASSWORD: "root_password"
MYSQL_DATABASE: "test"
MYSQL_USER: "test_user"
MYSQL_PASSWORD: "test_password"
ports:
- "3306:3306"
restart: always
- デモ用SQLファイルを作成
docker-compose.ymlを配置したディレクトリと同じ階層にデモ用SQLファイルを作成します。
ファイル名は任意で「*.sql」にしてください。MySQL起動時に実行してくれます。
create table domain_sales_amounts (
sales_year int(4) not null,
sales_amount int(10) not null,
domain varchar(255) not null
);
create table financial_highlights (
year int(4) not null,
sales_amount int(10) not null,
gross_profit int(10) not null,
operating_profit int(10) not null,
ordinary_profit int(10) not null,
non_controlling_interests int(10) not null,
net_income_per_share double(4,2) not null
);
insert into test.domain_sales_amounts values (2014,57591,"1");
insert into test.domain_sales_amounts values (2014,366472,"2");
insert into test.domain_sales_amounts values (2014,1508114,"3");
insert into test.domain_sales_amounts values (2015,105537,"1");
insert into test.domain_sales_amounts values (2015,402836,"2");
insert into test.domain_sales_amounts values (2015,1547894,"3");
insert into test.domain_sales_amounts values (2016,171799,"1");
insert into test.domain_sales_amounts values (2016,474723,"2");
insert into test.domain_sales_amounts values (2016,1583119,"3");
insert into test.domain_sales_amounts values (2017,249562,"1");
insert into test.domain_sales_amounts values (2017,497769,"2");
insert into test.domain_sales_amounts values (2017,1611979,"3");
insert into test.domain_sales_amounts values (2018,303381,"1");
insert into test.domain_sales_amounts values (2018,547472,"2");
insert into test.domain_sales_amounts values (2018,1695226,"3");
insert into test.financial_highlights values(2014,1932178,1626683,247644,248629,123445,7.27);
insert into test.financial_highlights values(2015,2056268,1741742,336177,327626,201659,11.51);
insert into test.financial_highlights values(2016,2229642,1851715,393717,367760,239376,13.84);
insert into test.financial_highlights values(2017,2359311,1984719,420812,414313,255791,14.58);
insert into test.financial_highlights values(2018,2546080,2105604,437689,431501,282920,16.05);
commit;
- redashデータベース初期化
下記のコマンドを実行するとredashが使用するPostgreSQLのデータベース初期化が始まります。
docker-compose run --rm server create_db
- コンテナ起動
下記のコマンドを実行するとredashアプリケーションを構成するコンテナが立ち上がります。
docker-compose up
- 基本情報の登録
docker-composeを起動した環境でnginxが起動しているのでポート番号80でアクセスすると下記のような画面が表示されます。
デモ用なので適当に入力してください。
入力が完了したらデータソース登録~ダッシュボード作成の手順が載っている画面が表示されます。
redashの使い方
redashでグラフを作成しダッシュボードに載せて共有するまでには下記のステップを踏む必要があります。
- データソースの登録
- クエリの登録
- グラフ化
- ダッシュボード作成
- ダッシュボードにグラフを登録
順にやってみます。
1.データソースの登録
- データソース初期画面
①のボタンを押下すると下記のような画面が表示されます。
この画面は登録してあるデータソースが表示される画面なので今回は初めて登録するため何も表示されていません。
②のNew Data Sourceボタンを押下するとデータソース登録画面に遷移します。
- データソース選択画面
今回は赤枠で囲ったMySQLを選択します。
- データソース登録画面
下記の画面に表示されている項目を入力してSaveボタンを押下します。
その後「Test Connection」というボタンが表示されるので、それを押下すると「Success」と表示されれば登録完了です。
登録項目 | 入力内容 | 備考 |
---|---|---|
Name | mysql_datasource | データソース初期画面で表示される名前 |
Host | mysql_datasource | docker-compose.ymlのサービス名 |
Port | 3306 | docker-compose.ymlのports |
User | test_user | docker-compose.ymlのMYSQL_USER |
Password | test_password | docker-compose.ymlのMYSQL_PASSWORD |
Database Name | test | docker-compose.ymlの|MYSQL_DATABASE |
2.クエリの登録
- クエリ登録画面
画面番号 | 説明 | 備考 |
---|---|---|
① | Createボタンを押下しQueryを選択すると下記の画面が表示されます。 | |
② | ダッシュボードで表示される項目を入力します | |
③ | SQLを入力します | ※テストSQL |
④ | SQLを実行します | |
⑤ | SQLを保存します | |
⑥ | グラフ化の設定をします |
※テストSQL
年度、売上高、ドメインごとのデータを取得するSQLです。
domainのコード(1~3)はそれぞれ「1:Paid事業」、「2:売掛債権保証事業」、「3:EC事業」になります。
select
sales_year,
sales_amount,
domain
from domain_sales_amounts
3.グラフ化
2.クエリの登録⑥のNew Visualizationをクリックすると実行結果をグラフにすることができます
redashで対応しているグラフには様々な種類がありますが今回はよく使うと思われるChartを使用します。
下記の通り設定していきます。
- General
X軸、Y軸といった基本設定を行う場所です。
画面番号 | 入力項目 | 入力内容 | 備考 |
---|---|---|---|
① | Visualization Name | 売上高構成 | ダッシュボードに張り付けるときに表示するグラフ名 |
② | Chart Type | Bar | Line、Bar、Area、Pie、Scatter、Bubble、Boxが選択できます。 |
③ | X Column | sales_year | X軸に表示したいカラム名 |
④ | Y Columns | sales_amount | Y軸に表示したいカラム名 |
⑤ | Group by | domain | グループごとに表示したい場合にグループを識別するカラム名 |
⑥ | Stacking | Stack | Stackを選択すると画像のように積み上げグラフになります。選択しない場合は棒グラフが横に並びます。 |
- X Axis
X軸の詳細設定を行います。
X軸で選択したカラムから時間軸、対数、方程式のグラフ、カテゴリ毎の表示ができます。
今回はsales_yearを選択したので時間軸でもいい感じに描画してくれますが、年度というカテゴリで表示したいのでCategoryを選択しています。
- Y Axis
Y軸の詳細設定を行います。
Y軸もX軸と同様の設定ができます。異なるのは最大と最小が設定できます。
またY軸は2つまで設定することができるので、1つは年度ごとの売上高、もう一つは前年度売上高増加率を表示といったこともできます。
- Series
表示する順序を設定できます。
設定しないと描画される順番がまれに入れ替わってしまうことがあるので、設定することをおすすめします。
- Colors
表示しているグラフの色を設定できます。
もし各項目に対応するイメージカラーがあるなら、棒グラフの色をそれに合わせて指定すると分かりやすくなります。
例えばPaidはイメージカラーが緑なので、Colorsで緑を指定します。
- Data Labels
下記のグラフには売上高の数値が表示されていますが、これをカンマ区切りにしたい、小数点第二位までにしたいときに設定します。
設定が完了したらSaveボタンを押下して設定を保存します。
4.ダッシュボード作成
2.クエリの登録と同様にCreateボタンを押下しDashboardを選択するとダイアログが表示されるので、ダッシュボードの名前を入力します。
今回は「業績ハイライト」を入力します。Saveボタンを押下すると下記の画面が表示されます。
画面番号 | 説明 | 備考 |
---|---|---|
① | 入力したダッシュボード名 | 押下すると名前を変更できます。 |
② | ダッシュボードにグラフを追加するボタン | |
③ | ダッシュボード保存ボタン |
5.ダッシュボードにグラフを登録
- グラフ選択
4.ダッシュボード作成で「Add Widget」ボタンを押下すると下記の画面が表示されます。
2~3で作成したグラフを選択し「Add to Dashbord」ボタンを押下するとダッシュボードにグラフを追加することができます。
- ダッシュボードにグラフを追加した結果
以上の手順でダッシュボードにグラフを追加することができました。
売上高構成だと少し寂しい気がするので、テストデータにあるfinancial hilightsからグラフを作成すると下記のようになります。
redashは1つのSQLから複数のグラフを作成することができるので下記のSQLから残りの業績ハイライトのグラフを作成することができます。
select
year,
sales_amount,
gross_profit,
operating_profit,
ordinary_profit,
non_controlling_interests,
net_income_per_share
from financial_highlights
まとめ
SQLが扱えれば簡単にグラフを作成できダッシュボードをチームで共有できるので、お手軽に効果測定を行う場としてredashはなかなかいいと思います。
また自分が作ったものがどの程度事業に貢献しているかもわかるようになるのでエンジニアのモチベーションにつながると思いますのでredash布教活動を続けようと思います。