社内にRedashを導入してみた ＆ 最近追加された機能のご紹介

## はじめに
職場では、新しいツールの評価や自己学習のため自由に使えるLinux環境を希望者には支給してもらえます。
ただ試すだけならローカルに立てたDockerで事足りるのですが、固定のIPが振られ他のメンバーと共有できる環境がもらえるのはありがたい事です。
今年4月ごろから、その環境を利用してRedashを立てて使い始めているのでその話をしたいと思います。
（ちなみに、CentOS7 + Docker composeで環境を作っています。）

## Redashとは

公式サイトから意訳です。
オープンソースであり、SQLを書いていくスタイルで、簡単に共有ができて、エンジニアにとって非常に使いやすいものとなっています。

>[Redash](https://redash.io/)は、データの問い合わせ、視覚化、共同作業を行うためのオープンソースのツールです。
問い合わせ結果とダッシュボードを他のメンバーと共有することができ、コードのフィルタやパラメータを即座に調整して組織全体のデータ駆動力を強化することができます。
メール、Slack、またはHipchatに事前定義されたトリガーのアラートを取得します（カスタムWebhookも設定できます）。

>Redashは文化や使用パターンに合わせて、会社内のデータを解放します。従来のBIスイートは、遅くて/煩雑なフローなのに対し、Redashはエンジニアが使いやすいアプローチをとりました。

>Redashは、Amazon Redshift（ペタバイト規模のデータウェアハウス）を使用して処理して収集する、何十億ものレコードにすばやく簡単にアクセスできるように構築されました。今日Redashは、Redshift、Google BigQuery、Google Spreadsheets、PostgreSQL、MySQL、Graphite、Axibase Time Series Database、カスタムスクリプトなど、複数のデータベースのクエリをサポートしています。


## 導入したきっかけ

もともとデータ分析はしていたのですが、事前に用意された切り口以外の分析をしたい場合は
SQLを書いて実行して、エクセルでグラフにして、というのを各々がしていました。
共有する仕組みがないので変更した場合の再配布が面倒だったり、似たようなSQLを各々が作っている非効率な状態を改善したくて試しに導入してみました。

## 導入した効果

私は主に、稼働時間やRedmineのチケットの分析に使用していますが、
「体感的にはそうでもないけど、会議にどれぐらい時間を使っている」とか、「見積もりに対して実績はどれぐらいかかっている？」とか、「過去に行った類似機能の開発ではどれぐらい掛かっていた？」というのがパッと分かるようになりました。
自分が知りたい情報に、 **タイムリー**に、 **時間と手間をかけずに**、 **視覚化**して見れるようになったのは非常に大きいです。
他の人がどんな分析をしているのかを見たり、気に入ったものをフォークして使うなど、コラボレーション的な面でも効果があると思います。
すでに報告書などにも使われていたり、「もはやRedashなしでは運用できない」という声もあるので、もはやお試しとは言えないレベルに活用されてきています。（正式なツールになる日も近いかな。でも今の緩い運用も捨て難い。。）
**エンジニアが使うツールはエンジニアが選ぶべきですね。**

## 最近の追加機能のご紹介

話は急に変わりますが（あまりに脈絡がないので後日別記事に分けるかも）、当初v1.0.1を導入して、先日やっと3.0にバージョンアップしました。
（現在は4系が開発中なようで進化が早いですね）
最近のバージョンで追加されたであろう便利な機能を紹介します。

### Query Resultsデータソース

`query_<query ID>` と指定することで別のSQLの実行結果をテーブルのように参照できる仕組みが追加されました。
例えば、`http://demo.redash.io/queries/5949`というURLのクエリーなら`query_5949`で参照できます。
では実際にやってみましょう。

- 事前に以下のSQLが登録されている前提とします

```sql:queryID=1
select id, org_id, name from data_sources;
```

```sql:queryID=2
select id, name from organizations;
```

-  Type=`Query Results(Beta)`を選択してデータソースを追加します。

![redash_query_result_datasource.png](https://qiita-image-store.s3.amazonaws.com/0/387/2113c200-cc9f-fb20-4e31-cd98169455d1.png "redash_query_result_datasource.png")


- 作成したデータソースを使用すると、`query_1`, `query_2`をテーブルのように使用できました。

![redash_query_result_sql.png](https://qiita-image-store.s3.amazonaws.com/0/387/f08a0c06-f7fe-2045-b6ee-6407e5d68a4a.png "redash_query_result_sql.png")

もちろん異なるデータベースのテーブルでも大丈夫ですので、DBリンク的な使い方ができます。
ただしインメモリーのSQLiteで実行されるため、あまり大量データは処理できないとのことです。

### Dropdown List

以前から`{{paramName}}`でプレースホルダを使用できましたが、プルダウン形式で選択できるようになっています。
やってみましょう。

- プレースホルダーの設定アイコンをクリックします。

![redash_query_result_sql2.png](https://qiita-image-store.s3.amazonaws.com/0/387/17ad277b-12c8-ada3-7a27-cd824a899764.png "redash_query_result_sql2.png")

- `Type`は「Dropdown List」を選択、`Dropdown List Values`に改行区切りで候補となる値を入力します

![redash_query_result_sql3.png](https://qiita-image-store.s3.amazonaws.com/0/387/fa425c36-6988-3c93-b776-3a5792d4e535.png "redash_query_result_sql3.png")

- そうするとプルダウンから値を選択可能になります

![redash_query_result_sql4.png](https://qiita-image-store.s3.amazonaws.com/0/387/91d64a99-0139-883a-b802-563203923105.png "redash_query_result_sql4.png")


- 今度は、Typeに`Query Based Dropdown List`を選択し、`Query to load dropdown values from:`に既存のSQLを選択すると同じようにSQLの実行結果がリストになります

![redash_query_result_sql5.png](https://qiita-image-store.s3.amazonaws.com/0/387/7d7921e6-fffc-1bc3-8176-c2b91af0e265.png "redash_query_result_sql5.png")


### Queryフィルター

```
select id, name as "Name::filter", description, query from queries;
```

Select句に `as <columnName>::filter` のようにaliasをつけると、検索結果のフィルタリングができます。

![redash_query_filter.png](https://qiita-image-store.s3.amazonaws.com/0/387/2c6ab2d9-3148-d604-6e36-5f8dd1d14e08.png "redash_query_filter.png")

Where句で絞り込んだ結果をさらに絞り込みたい場合に便利ですね。
また、下記のように `as <columnName>::multi-filter`とすると複数選択可能になります。

```
select id, name as "Name::multi-filter", description, query from queries;
```

![redash_query_filter_multi.png](https://qiita-image-store.s3.amazonaws.com/0/387/39ef936e-4049-468c-88cc-978ceaecfec7.png "redash_query_filter_multi.png")


## Dashboardフィルター

ダッシュボード名を`任意の名前:ダッシュボード名`とすりことで、絞り込みができます。  
ダッシュボードの数は増えてくると思うので組織なり、カテゴリーで接頭句を決めておくと絞り込みやすくなるでしょう。

![redash_dashboard_filter.png](https://qiita-image-store.s3.amazonaws.com/0/387/8c3c5ad3-302f-0a69-a977-4b77fe84cab2.png "redash_dashboard_filter.png")

## 最後に

まだまだ利用者募集中ですので、興味を持った弊社の方はご連絡ください。
非エンジニアの方にも使って頂けるようになると最高だな。
来年はalert機能をもっと活用したり、プロダクトのログを分析したいと思っています。