Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
2 contributors

Users who have contributed to this file

@kakakakakku @ariarijp
557 lines (371 sloc) 24 KB

redash-hands-on

GitHub stars Redash version

前提

Redash ハンズオン資料は以下の環境を前提に動作確認をしています.

  • Docker For Mac
  • Docker For Windows

なお,Redash のバージョンごとにハンズオン資料を用意しています.最新バージョン以外を使う場合は,以下のタグから参照できます.

環境構築

Docker Compose で Redash (v7.0.0) 環境を構築します.任意のディレクトリに kakakakakku/redash-hands-on リポジトリをクローンしましょう.

$ git clone https://github.com/kakakakakku/redash-hands-on.git
$ cd redash-hands-on

公式の getredash/redash リポジトリに公開されている設定をベースに,テストデータを事前に投入した MySQL 5.7 コンテナを含めた docker-compose.yml を準備しました.

以下のコマンドを実行し,Docker Compose で Redash を起動しましょう.

初回はイメージをダウンロードするため,少し時間がかかる場合があります.

$ docker-compose run --rm server create_db
$ docker-compose up -d

起動すると,以下の URL で Redash にアクセスできるようになります.

最初に Admin User と Organization Name を登録しましょう.以下にサンプルを載せておきます.登録が完了すると,Redash にログインできます.

  • Admin User
    • Name
      • admin
    • Email Address
      • admin@example.com
    • Password
      • 任意のパスワード
  • General
    • Organization Name
      • hands-on

なお,Redash 環境の構築方法は Docker Compose 以外にもあります.興味のある方は,公式ドキュメントを読んでみましょう.

データソース設定

次に Redash から MySQL に接続できるように「データソース」を設定します.

ログイン後の画面にある「1. Connect a Data Source」のリンクをクリックします.

次に「MySQL」をクリックします.「MySQL (Amazon RDS)」ではなく「MySQL」です.

以下の通りに設定したら「Save → Test Connection」とクリックし,接続確認をしましょう.Success と画面右下に表示されます.なお,今回はテストデータとして world データベースを使います.

項目 値
Name MySQL
Host mysql
Port 3306
User root
Password -
Database Name world

日付フォーマット設定

画面右上にある Settings アイコン(?の右側)をクリックし,「Settings」タブをクリックします.

日付フォーマットを以下の通りに変更します.

  • General
    • Date Format
      • YYYY-MM-DD

クエリを作ってみよう

ナビバーから「Create → Query」とクリックし,以下のクエリを入力しましょう.

SELECT * FROM country;

入力したら「Execute」ボタンをクリックしてクエリを実行します.すると「国の一覧」が取得できます.

クエリの実行ができたら,画面左上の「New Query」という部分をクリックし,クエリタイトルを 「国の一覧」 に変更します.忘れずに画面右側にある「Save」ボタンをクリックしましょう.

さらに「Publish」ボタンをクリックします.Redash ではクエリを公開することで,他のユーザーに共有することができます.

クエリの「お気に入り登録」と「タグ登録」をしよう

Redash ではクエリに対する「お気に入り登録」と「タグ登録」がサポートされています.

まず,クエリ名の左にある星アイコンをクリックし,お気に入り登録をしてみましょう.次に,クエリ名の右にある「Add tag」ボタンをクリックし,2個のタグ 「分析チーム」 と 「マスタデータ」 を登録してみましょう.

クエリが増えると探しにくくなってしまうため,積極的に「お気に入り登録」と「タグ登録」を活用しましょう.

グラフを作ってみよう

先ほどと同様に新規クエリを作成し,以下のクエリを入力しましょう.実行すると,登録されている国の件数が「239」であることが取得できます.この件数をグラフにしてみましょう.

SELECT COUNT(*) AS COUNT FROM country;

「TABLE」 タブの横に表示されている「+ New Visualization」タブをクリックし,以下の通りに設定をします.「Save」ボタンをクリックすると,件数のグラフが表示されます.最新値など,特定の値をグラフにする場合は Counter が便利です.

  • Visualization Type
    • Counter
  • Visualization Name
    • 国の件数
  • Counter Value Column Name
    • COUNT

なお Counter には「目標値」を設定する機能もあります.今回のデータソースではデータ件数に変化がありませんが,サンプルとして,作ってみましょう.先ほどのクエリを以下の通りに変更します.

SELECT COUNT(*) AS COUNT, 500 AS kpi FROM country;

もう1度「+ New Visualization」タブをクリックし,以下の通りに設定をします.先ほどとの違いは「Target Value Column Name」の設定を追加した点です.このようにクエリを活用することで,目標値と実績値を一緒に可視化することができます.

Counter に「目標値」を設定した場合,値が実績を下回る場合は赤く表示され,上回る場合は緑で表示されます.

  • Visualization Type
    • Counter
  • Visualization Name
    • 国の件数(+ 目標値)
  • Counter Value Column Name
    • COUNT
  • Target Value Column Name
    • kpi

クエリタイトルを 「国の件数」 とし,忘れずに保存と公開をしておきましょう.

円グラフと棒グラフを作ってみよう

クエリの作成はもう慣れたと思います.以下のクエリを作成し,実行しましょう.

国ごとに都市の件数を取得できます.中国とインドが特に多いことがわかります.

SELECT CountryCode, COUNT(*) AS COUNT
FROM city
GROUP BY CountryCode
ORDER BY COUNT DESC;

先ほどと同様に「+ New Visualization」タブをクリックし,以下の通りに設定をすると,円グラフを作ることができます.

  • Visualization Type
    • Chart
  • Visualization Name
    • 都市の件数
  • General
    • Chart Type
      • Pie
    • X Column
      • CountryCode
    • Y Columns
      • COUNT

次に棒グラフも作ってみましょう.設定は以下の通りです.

  • Visualization Type
    • Chart
  • Visualization Name
    • 都市の件数(棒グラフ)
  • General
    • Chart Type
      • Bar
    • X Column
      • CountryCode
    • Y Columns
      • COUNT

しかし,棒グラフの場合,このままでは順序がバラバラです.「GENERAL」タブの隣にある「X Axis」タブをクリックし,軸の設定をする必要があります.

  • Scale
    • Category
  • Sort Values
    • OFF

これで棒グラフも作れました.

クエリタイトルを 「都市の件数」 とし,忘れずに保存と公開をしておきましょう.

ダッシュボードを作ってみよう

次にダッシュボードを作ってみましょう.

ナビバーから「Create → Dashboard」とクリックし,ダッシュボードタイトルに 「ハンズオン:国ダッシュボード」 と入力しましょう.

ポイントは グループ名:ダッシュボード名 という命名規則にすることです.

Redash には Grouping Dashboards という機能があり,ダッシュボードタイトルにコロンを含めることで,同じグループのダッシュボードをまとめて管理することができます.詳しくは公式ドキュメントを読んでみましょう.

次にダッシュボードにグラフを配置していきます.

画面右下にあるメニューから「Add Widget」をクリックします.すると「Add Widget」というモーダルが表示されるため,以下の設定を繰り返し行いましょう.レイアウトは自由に変更することができます.

  • 1回目
    • Visualization
      • 国の一覧
    • Choose Visualization
      • Table
  • 2回目
    • Visualization
      • 国の件数
    • Choose Visualization
      • 国の件数(+ 目標値)
  • 3回目
    • Visualization
      • 都市の件数
    • Choose Visualization
      • 都市の件数
  • 4回目
    • Visualization
      • 都市の件数
    • Choose Visualization
      • 都市の件数(棒グラフ)

「Visualization」にクエリが表示されない場合は,そのクエリが公開されていないことが考えられます.

ナビバーの「Queries」で Unpublished 状態になっているクエリがあったら,そのクエリを公開し,再度ダッシュボードにグラフを追加してみましょう.

最後に画面右上にある「Apply Changes」をクリックし,続けて「Publish」をクリックしましょう.クエリ同様にダッシュボードも他のユーザーに共有することができます.

ダッシュボードの「お気に入り登録」と「タグ登録」をしよう

Redash ではクエリだけではなく,ダッシュボードに対しても「お気に入り登録」と「タグ登録」がサポートされています.

まず,ダッシュボード名の左にある星アイコンをクリックし,お気に入り登録をしてみましょう.次に,ダッシュボード名の右にある「Add tag」ボタンをクリックし,タグ 「分析チーム」 を登録してみましょう.

パラメータ付きクエリを作ってみよう

次はクエリにパラメータを付けてみましょう.

Redash では,クエリに {{}} を含めると,その部分がパラメータになります.以下の新規クエリを作りましょう.なお,クエリを入力した後にクエリの下にある2番目のアイコン「Format Query」をクリックすると,自動的にクエリをフォーマットすることができます.試してみましょう.

SELECT *
FROM city
WHERE CountryCode = '{{CountryCode}}'
ORDER BY Population DESC;

すると,画面左下に「CountryCode」をパラメータとして入力するテキストエリアが表示されます.

ここに「JPN」を入力し,クエリを実行すると,日本の都市を人口の多い順に取得することができます.クエリタイトルを 「都市の検索」 にして保存しておきましょう.

パラメータとして入力できる UI はテキストフィールド以外にもあります.名前の通り,例えば「Date」を選択すると,日付ピッカー(カレンダー)から日付を選択することができます.

  • Text
  • Number
  • Dropdown List
  • Query Based Dropdown List
  • Date
  • Date and Time
  • Date and Time (with seconds)
  • Date Range
  • Date and Time Range
  • Date and Time Range (with seconds)

今回は便利な「Dropdown List」を試しましょう.

パラメータの横にあるトグルをクリックし,「Type」を Dropdown List にします.さらに「Values」 に以下のリストを設定します.

JPN
USA
AUS

すると,選択肢から選べるようになるため,入力ミスを軽減できるようになります.

フィルタ機能を使ってみよう

Redash では,クエリのカラム名を カラム名::filter もしくは カラム名::multi-filter という命名規則にすると,クエリ結果をフィルタできるようになります.さっそく試してみましょう.

以下の新規クエリを作成し,実行すると,クエリ結果を「CountryCode」で自由にフィルタできるようになります.これが「フィルタ機能」です.

SELECT *, CountryCode AS 'CountryCode::filter' FROM city ORDER BY Population DESC;

次に「マルチフィルタ機能」を試しましょう.クエリを以下のように変更すると,今度は複数の「CountryCode」でフィルタできるようになります.なお,今回も「Format Query」を実行しておきましょう.

SELECT *, CountryCode AS 'CountryCode::multi-filter' FROM city ORDER BY Population DESC;

フィルタ機能は非常に便利です.詳しくは公式ドキュメントを読んでみましょう.

クエリタイトルを 「都市のフィルタ」 にして保存しておきましょう.

クエリスニペットを活用しよう

Redash では,よく使うクエリ(もしくはクエリの一部)をクエリスニペットとして登録する機能があります.

画面右上にある Settings アイコン(?の右側)をクリックし,「Query Snippets」タブをクリックします.

次に「New Snippet」ボタンをクリックすると登録画面が表示されます.以下の設定をしたら「Save」ボタンを押しましょう.

  • Trigger
    • _country_code
  • Description
    • 国コード検索
  • Snippet
    • WHERE CountryCode = '{{CountryCode}}'

新規クエリを作成し,以下のクエリを入力しましょう.クエリスニペットに登録した「Trigger」に部分一致すると候補として表示されるため _ と入力するとクエリスニペットを呼び出すことができます.

SELECT * FROM city _

クエリスニペットにプレースホルダを設定することもできます.

以下のように ${1:table} と設定すると,テーブル名のプレースホルダになります.是非試してみましょう.今回はクエリスニペットの動作確認が目的ですので,クエリは保存しなくて大丈夫です.

  • Trigger
    • _record_count
  • Description
    • レコード件数
  • Snippet
    • SELECT COUNT(*) FROM ${1:table};

クエリ結果に色を付けよう

Redash では,クエリ結果に HTML を埋め込むことができます.さっそく以下の新規クエリを作成してみましょう.

SELECT Code,
       Name,
       Population,
       CASE
           WHEN Population > 1000000000 THEN '<div class="bg-success p-30 text-center">AAA</div>'
           WHEN Population > 213000000 THEN '<div class="bg-warning p-20 text-center">BBB</div>'
           ELSE '<div class="bg-danger p-10 text-center">CCC</div>'
       END AS Color
FROM country
ORDER BY Population DESC;

「Population」の値によって「緑黄赤」と色を変えています.さらに縦サイズも変えています.このように活用すると,よりクエリ結果を便利に使うことができます.

クエリタイトルを 「国の一覧(色付き)」 にして保存しておきましょう.他にも利用可能なマークアップがあり,公式ドキュメントに載っています.

リンク集を作ろう

ダッシュボードに複数のグラフを配置する場合,関連する URL などを載せておくと便利な場合があります.

ダッシュボードにフリーテキストを入力する方法もありますが,Redash では,クエリ結果に HTML を埋め込むことができるため,簡単にリンクを作成することができます.

以下の新規クエリを作成し,クエリタイトルを 「リンク集」 にして保存しておきましょう.

SELECT '<a href="https://www.google.co.jp/" target="_blank">Google</a>' AS name
UNION
SELECT '<a href="https://www.yahoo.co.jp/" target="_blank">Yahoo!</a>'
UNION
SELECT '<a href="https://www.bing.com/" target="_blank">Bing</a>';

クエリを選択実行しよう

Redash には,クエリを選択実行する機能があります.

分析クエリを書くときにサブクエリや JOIN を活用する場面も多いと思います.サブクエリなどの部分クエリを選択して実行できると便利です.

以下の新規クエリを作成し,サブクエリを選択し,「Execute Selected」ボタンをクリックして実行してみましょう.

SELECT *
FROM country
WHERE Code =
    (SELECT Code
     FROM country
     WHERE Name = 'Japan')

クエリ結果をダウンロードしよう

Redash では,クエリ結果をダウンロードすることができます.現状サポートされているデータ形式は CSV と Excel です.

ナビバーの「Queries」をクリックし,既に作ったクエリ 「国の一覧」 を開きましょう.

画面下にある「縦点」ボタン(Edit Visualization ボタンの右にある)を押すと,以下のメニューが表示されます.クエリ結果をダウンロードしてみましょう.

  • Download as CSV File
  • Download as Excel File

クエリのフォーク機能を体験しよう

今回はハンズオンとして Redash を1人で使っていますが,一般的にはチームで使うことが多いと思います.

チームで使っていると「メンバーが作ったクエリを少しカスタマイズしたい」と感じる場面があります.そのために Redash には「フォーク機能」があります.

既に作ったクエリ 「国の一覧」 を開き,画面右上にあるプルダウンから「Fork」ボタンをクリックしましょう.すると,自動的に新規クエリが作成されます.クエリタイトルを 「Copy of (#1) 国の一覧」 から 「国の一覧(カスタマイズ)」 に変更しましょう.

クエリを自由に変更できるため,以下のクエリを入力し,実行しましょう.表示するカラムを「国コード」と「名前」と「人口」にカスタマイズできました.なお,今回も「Format Query」を実行しておきましょう.

SELECT Code, Name, Population FROM country;

アラートを設定しよう

Redash の機能は可視化だけではありません.特定の値が閾値を超えた場合にアラートを通知する機能があります.通知先は以下から選ぶことができます.

  • ChatWork
  • PagerDuty
  • Slack
  • Webhook
  • HipChat
  • Mattermost
  • Email
  • Google Hangouts Chat

Slack に Webhook 経由でアラートを通知してみましょう.今回は,自由に使える Slack アカウントがある前提で進めます.

まず,Slack で Incoming WebHooks を作成します.そのままでも使えますが,「Customize Name」に Redash Alerts,「Customize Icon」に Redash のロゴ画像などを設定しておくと便利です.「Webhook URL」の値は次に使います.

画面右上にある Settings アイコンをクリックし,「Alert Destinations」タブにある「New Alert Destination」ボタンをクリックしましょう.次に「Slack」をクリックし,登録画面で以下を設定します.

  • Name
    • Slack
  • Slack Webhook URL
    • Webhook URL

アラートを設定する前に,もう少し準備をしておく必要があります.

既に作成をした「国の件数」クエリを開き,画面左下にある「Refresh Schedule」を有効にする必要があります.今回は Every 1 minute にしましょう.

今回の例では,国の件数に変化はありませんが,定期的にクエリの実行をする機能です.アラートの設定をするクエリには「Refresh Schedule」の設定が必要です.

最後はアラートの設定です.ナビバーから「Create → Alert」をクリックし,「New Alert」の画面を開きます.以下のエラーが出る場合がありますが,問題ありません.

It looks like your mail server isn't configured. Make sure to configure it for the alert emails to work.

登録画面で以下を設定します.「Rearm seconds」は,異常値が続く場合にアラートを再通知する間隔(秒数)です.

  • Query
    • 国の件数
  • Name
    • 国の件数が200件を超えた場合
  • Value column
    • COUNT
  • Op
    • greater than
  • Reference
    • 200
  • Rearm seconds
    • 60

「Save」をクリックすると,右側に「Notifications」のメニューが表示されるため,「Slack」を「Add」し,もう一度「Save」をクリックします.

すると,Slack にアラートが通知されます.確認ができたら「Rearm seconds」をブランクにして「Save」をクリックしておきましょう.

Redash ユーザーを追加/無効化しよう

次に,Redash 管理者として Redash ユーザーを追加/無効化する運用手順を試してみましょう.

まず,画面右上のメニューから「Users」をクリックし,次に「New User」ボタンをクリックします.

以下の通りに,Redash ユーザーを2個登録します.登録が終わったら「Pending Invitations」をクリックし,ユーザーを確認しましょう.招待中の状態になっています.

  • New User
    • Name
      • RedashUser1
    • Email
      • redashuser1@example.com
    • Name
      • RedashUser2
    • Email
      • redashuser2@example.com

メンバーの退職など,Redash ユーザーを削除する場合はどうしたら良いのでしょう?

Redash にはユーザーを削除する機能はありませんが,ユーザーを無効化する手順があります.今回は招待中のユーザーを無効化します.

「Pending Invitations」で「RedashUser2」をクリックし,「Disable User」ボタンを押してみましょう.すると「Disabled Users」に移動したことが確認できます.無効化を解除する場合は「Enable User」ボタンをクリックします.

You can’t perform that action at this time.