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
<
‐‐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(カンマ区切り) }})
「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つとして、今回紹介したような方法が活用できそうです。