1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redashで行ごと列ごとに異なるリンクを設定する

Last updated at Posted at 2022-07-19

前置き

Redashで契約件数KPIを可視化したいとします。

作りたい表をこんな感じだとします。

n月の契約件数実績

新規 解約 継続
日本 40 4 500
アメリカ 5 1 20

件数の数字の部分がリンクになっていて、クリックすると内訳の表に飛びたい。とします

リンク先:日本の新規契約内訳

日付 id プラン名
20xx/xx/xx 12345 A

こんなときどうすればよいでしょうか?

実装

行ごと列ごとに異なる数値を埋め込んでいく

n月の契約件数実績に関してはSQSを駆使し力技で行きます。黒魔術のよう

mysqlベースのデータソースならそのままコピペして使えます。sqliteだとだめかも

with japan_new as(
select
    'Japan' country,
    'new' category, 
    40 num -- count(*) num
-- 件数を抽出するクエリ
),
japan_cancel as(
select
    'Japan' country,
    'cancel' category, 
    4 num --count(*) num
-- 件数を抽出するクエリ
),
japan_continuation as(
select
    'Japan' country,
    'continuation' category, 
    500 num --count(*) num
-- 件数を抽出するクエリ
),
america_new as(
select
    'America' country,
    'new' category, 
    5 num -- count(*) num
-- 件数を抽出するクエリ
),
america_cancel as(
select
    'America' country,
    'cancel' category, 
    1 num --count(*) num
-- 件数を抽出するクエリ
),
america_continuation as(
select
    'America' country,
    'continuation' category, 
    20 num --count(*) num
-- 件数を抽出するクエリ
),
japan_union_table as(
select * from japan_new
union
select * from japan_cancel
union
select * from japan_continuation
),
america_union_table as(
select * from america_new
union
select * from america_cancel
union
select * from america_continuation
),
union_table as(
select 
 '1.Japan' country,
 max(case when category = 'new' then num else 0 end) new,
 max(case when category = 'cancel' then num else 0 end) cancel,
 max(case when category = 'continuation' then num else 0 end) continuation
from japan_union_table
union
select 
 '2.America' country,
 max(case when category = 'new' then num else 0 end) new,
 max(case when category = 'cancel' then num else 0 end) cancel,
 max(case when category = 'continuation' then num else 0 end) continuation
from america_union_table
)
select *
from union_table
order by country

こうなります
image.png

行ごと列ごとに異なるリンクを設定する

さらにリンクを張りたいと。。。

Redashではある程度リンクを設定することができます

クエリを保存し、左下のEdit Visualizationを開く

image.png

リンク化したいColumnを選択肢、Display asのLinkを選択する

image.png

Linkを選択するとどうするか選べるようになります。

image.png

redashのURL/queries/<飛ばしたいクエリNo>?id={{ @ }}

上記みたいにすることで、クエリの検索結果であるIDを動的にリンクとして生成し、ID詳細に飛ばすことができたりします

ここまでは知っている方も多いかと思います。

★ここのURL templateですが、「他のカラムの値を指定することもできます」

つまりURL用のカラムをそれぞれ力技で作り、各カラムにURLを埋め込むことが可能です。

やるとこんな感じ

with japan_new as(
select
    'Japan' country,
    'new' category, 
    40 num, -- count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
japan_cancel as(
select
    'Japan' country,
    'cancel' category, 
    4 num, --count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
japan_continuation as(
select
    'Japan' country,
    'continuation' category, 
    500 num, --count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
america_new as(
select
    'America' country,
    'new' category, 
    5 num, -- count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
america_cancel as(
select
    'America' country,
    'cancel' category, 
    1 num, --count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
america_continuation as(
select
    'America' country,
    'continuation' category, 
    20 num, --count(*) num,
    'url/xxx?p_at_month=' || date_format(date_add('month',0,date '{{ at_month }}'), '%Y-%m-%d') url
-- 件数を抽出するクエリ
),
japan_union_table as(
select * from japan_new
union
select * from japan_cancel
union
select * from japan_continuation
),
america_union_table as(
select * from america_new
union
select * from america_cancel
union
select * from america_continuation
),
union_table as(
select 
 '1.Japan' country,
 max(case when category = 'new' then num else 0 end) new,
 max(case when category = 'new' then url else '0' end) new_url,
 max(case when category = 'cancel' then num else 0 end) cancel,
 max(case when category = 'cancel' then url else '0' end) cancelurl,
 max(case when category = 'continuation' then num else 0 end) continuation,
 max(case when category = 'new' then url else '0' end) continuation_url
from japan_union_table
union
select 
 '2.America' country,
 max(case when category = 'new' then num else 0 end) new,
 max(case when category = 'new' then url else '0' end) new_url,
 max(case when category = 'cancel' then num else 0 end) cancel,
 max(case when category = 'cancel' then url else '0' end) cancel_url,
 max(case when category = 'continuation' then num else 0 end) continuation,
 max(case when category = 'continuation' then url else '0' end) continuation_url
from america_union_table
)
select *
from union_table
order by country

こんな感じになります。※飛ばし先のクエリxxxはすべて別で用意する必要があります。検索パラメータとして月で絞るようにしています。

at_monthをdate_addしているのは、最終的にダッシュボードにし、直近三ヶ月分の契約実績を出すときに役に立ちます。今月、先月、2ヶ月前もそれぞれクエリを作る必要があります。

image.png

ここまで来たら、URL templateをURL用に作ったカラムを指定し、そのカラムは非表示にすればいい感じになります

image.png

一つやるとこんな感じ。

image.png

地味なtips

カラム名の別名は日本語を使わないほうがいいです。結合時とかにエラーになります。使うなら、最後にやりましょう。

終わりに

淡々と書きました。

お金を抑えるフェーズは、Redashを使いつつも、Redashだから表現に限りがあるからと諦めずに、使われるダッシュボードを力技で作り上げることも、時には大事かと思います。

こういう黒魔術力技の積み重ねで、社内のデータ文化が進んでいくかと思います。

こうした積み重ねの後、データ文化が根づいた後は、予算を確保し有料のBIツールを導入し楽をしましょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?