Redashにてプルダウンのフィルターを作る ~BigQueryのpublic-dataを使って実践~


1.はじめに

最近インターンでSQLを書き始め、可視化ツールとしてRedashを使い始めました。

RedashはSQLが書けさえすれば、あとはGUIでプロットをいい感じに作ることができるので大変便利です。この便利な機能より便利に使えるようになりたいです。

私自身SQL駆け出しということもあり日々の業務から発見したtipsなどを残していければと考えています。

2.Redashのプロットにプルダウンのフィルターを付けたい!

イメージ的にはこんな感じのプダウンフィルターをプロットにくっつけたいです。

今回はこのRedashにてフィルターをくっつける方法をメモしていきます。

3.使うデータ

今回はBigQueryのpublic-dataである「Google Analytics Sample」のデータを使っていきたいと思います。GCPのアカウントを持っていれば誰でもこのデータを使うことができます。
詳細はここ1

4.Redashでプルダウンフィルターを出現させる方法

__filterを使う

SELECT os AS os__filter

みたいな感じで
’作成したいフィルター名__filter’
とすると以下のようにフィルターが出現します。
実装の詳細は下で!

*「__filter」のアンダーバーは「2つ」

5.注意点 

BigQureyでは「::」がサポートされていないことに注意!

公式サイト2を見ると以下のような書き方をしてもフィルターが出現すると書かれています。

SELECT os AS 'os::filter'

しかし

Note that you can use __filter or __multiFilter, (double underscore instead of double quotes) if your database doesn’t support :: in column names (such as BigQuery).

とあるようにBigQueryでは「::」がサポートされていないらしいです。

私はこのことに気づかずひたすらに「::」を使ってフィルターで出てこず時間を使ってしまったので皆さんもお気を付けください...

BigQueryを使う際には「filter」か「multiFilter」を使いましょう。

6.実際にSQLを書いてRedashで可視化する

RedashとBigQueryの接続などはできているという前提で、下記のようなコードでフィルターを出現させる練習をしてみました。(とりあえず練習ということで期間は適当に持ってきました)

今回はデータ内の「visits」というカラムを日時別、Os別で集計したいと仮定して「Os」に関するフィルターを出現させます。(Os別に日別の訪問者数を集計したい!)

以下が実装のコードです。

SELECT PARSE_DATE("%Y%m%d", date) AS dt,
       lower(device.operatingSystem) AS os__filter,
       sum(totals.visits) AS visits
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE _table_suffix BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 60 MONTH)) AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 48 MONTH))
  AND device.operatingSystem !='(not set)'
GROUP BY dt,
         os__filter
ORDER BY dt,
         os__filter

可視化した結果はこんな感じ

参考になれば幸いです。

7.最後に

今回はRedashにてフィルターを出現させる方法について追っていきました。

これまではplolyやggplotを使ってデータの可視化を行ってきましたがRedashが便利すぎて感動しています笑。BIツールって偉大ですね。より便利な使い方を模索していきたいです。

今後も自分自身が引っ掛かったところなどをまとめていければと思っております。

間違い等ございましたらご指摘いただけると幸いです。