Redashのクエリパラメータで実現するインタラクティブなデータ集計

はじめに

データベースのテーブルデータを集計する際、Redashを使うとDBとの接続やクエリの記述がすぐにできて非常に便利です。

そのRedashでクエリを作成する際によく使うクエリパラメータのトリックを紹介します。

集計粒度の選択

データを集計する際は、目的に応じて異なるカラムを使って集計したくなることがよくあります。

このとき、ベースになるクエリは1つだけ作り、その中で集計に使うカラムを自由に都度選択できるようにすると、似たようなクエリを沢山作成して管理する必要がなくなり非常に便利です。

以下のようにカラム名の前にパラメータを配置し、そのパラメータでの入力は Dropdown List で /* ON */ -- OFF を選択する形式にします。

select
    common_key_1,
    {{ dimension_1 }}, dimension_1
    {{ dimension_2 }}, dimension_2
    , sum(value_1)
    , sum(value_2)
from
    table_name
group by
    common_key_1,
    {{ dimension_1 }}, dimension_1
    {{ dimension_2 }}, dimension_2

RedashのUI上でのクエリの見え方

集計粒度を選択するクエリパラメータ
<

  • ‐‐OFF を選択すると、行末まですべてコメントアウトされるため、パラメータの後ろにあるカラムは集計粒度として使われなくなります。
  • /* ON */ を選択すると、パラメータの後ろにあるカラムはコメントアウトされすに集計粒度として使われます。

パラメータで /* ON */ --OFFを選択したときに実際に発行されるクエリは以下のようなものです。

select
    common_key_1,
    -- OFF, dimension_1
    /* ON */, dimension_2
    , sum(value_1)
    , sum(value_2)
from
    table_name
group by
    common_key_1,
    -- OFF, dimension_1
    /* ON */, dimension_2

条件指定の選択

同様のパラメータを使うことで、where句で条件指定をする/しないを選択できるようにもできます。

select
    dimension_1
    , sum(value_1)
    , sum(value_2)
from
    table_name
where true
    {{ xxx_idの指定 }} and xxx_id in ({{ xxx_id(カンマ区切り) }})

RedashのUIから条件指定するかしないかを選択する

「xxx_idの指定」で‐‐OFF を選択すると、行末まですべてコメントアウトされるため、全レコードが集計されます

select
    dimension_1
    , sum(value_1)
    , sum(value_2)
from
    table_name
where true
    --OFF and xxx_id in (指定して下さい)

「xxx_idの指定」で/* ON */ を選択すると、「xxx_id(カンマ区切り)」に値を入力することで、xxx_idが指定した値であるレコードだけが集計されます

select
    dimension_1
    , sum(value_1)
    , sum(value_2)
from
    table_name
where true
    /* ON */ and xxx_id in (12, 34, 56)

最後に

Redashを使うと簡単にクエリを作成できる反面、クエリのクローンやコピペによって似たようなクエリがたくさん作成されてしまい、管理しづらくなることがあります。 そういった事態を防ぐ方策の1つとして、今回紹介したような方法が活用できそうです。