RACCOON TECH BLOG

株式会社ラクーンホールディングス 技術戦略部より、
tipsやノウハウなど技術的な話題を
発信いたします。

redashでラクーンの業績ハイライトを作ってみた

こんにちは今川です。
Paidの開発チームからURIHOの開発チームに移動しました。
redashを広めようと秘密裏に活動しています。
なので今回はredashについての話です。

概要

redashはオープンソースで提供されているダッシュボード作成ツールです。
対応しているデータソースにはMySQL、Oracle、PostgreSQLといった主要なデータソースやGoogleSpreadSheet、Salesforceといったものまで対応しています。
テストデータは弊社のIR情報の業績ハイライトになります。

環境構築

環境構築にはDockerDocker Composeを使用します。
そのためDockerとDocker Composeのインストールが必要になります。
各環境に合わせてインストールしてください。
Docker Composeは複数のコンテナで構成するアプリケーション管理を楽にしてくれるツールです。
使用するものはredashのgitで提供されているものをデモ用に修正したものを使います。

https://github.com/getredash/redash/blob/master/docker-compose.production.yml

修正箇所はデモ用のデータソースとしてMySQLデータソースを追加してあります。

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

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が使用するPostgreSQLのデータベース初期化が始まります。

docker-compose run --rm server create_db

下記のコマンドを実行するとredashアプリケーションを構成するコンテナが立ち上がります。

docker-compose up

docker-composeを起動した環境でnginxが起動しているのでポート番号80でアクセスすると下記のような画面が表示されます。

デモ用なので適当に入力してください。
入力が完了したらデータソース登録~ダッシュボード作成の手順が載っている画面が表示されます。

redashの使い方

redashでグラフを作成しダッシュボードに載せて共有するまでには下記のステップを踏む必要があります。

  1. データソースの登録
  2. クエリの登録
  3. グラフ化
  4. ダッシュボード作成
  5. ダッシュボードにグラフを登録

順にやってみます。

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を使用します。
下記の通り設定していきます。

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軸の詳細設定を行います。
X軸で選択したカラムから時間軸、対数、方程式のグラフ、カテゴリ毎の表示ができます。
今回はsales_yearを選択したので時間軸でもいい感じに描画してくれますが、年度というカテゴリで表示したいのでCategoryを選択しています。

Y軸の詳細設定を行います。
Y軸もX軸と同様の設定ができます。異なるのは最大と最小が設定できます。
またY軸は2つまで設定することができるので、1つは年度ごとの売上高、もう一つは前年度売上高増加率を表示といったこともできます。

表示する順序を設定できます。
設定しないと描画される順番がまれに入れ替わってしまうことがあるので、設定することをおすすめします。

表示しているグラフの色を設定できます。
もし各項目に対応するイメージカラーがあるなら、棒グラフの色をそれに合わせて指定すると分かりやすくなります。
例えばPaidはイメージカラーが緑なので、Colorsで緑を指定します。

下記のグラフには売上高の数値が表示されていますが、これをカンマ区切りにしたい、小数点第二位までにしたいときに設定します。

設定が完了したら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布教活動を続けようと思います。

関連記事

運営会社:株式会社ラクーンホールディングス(c)2000 RACCOON HOLDINGS, Inc