💃

Metabase の「モデル」機能がすごく便利!

2024/07/08に公開

ラブグラフでエンジニア&CTOをしております横江( @yokoe24 )です。

データ分析のツールとして Metabase の導入を検討していて
およそ4年ぶりにさわっていたのですが、その進化に驚きました!

自分のさわっていた頃は v0.37 くらいだったので、
v0.40 でおこなわれた大幅なUI改修で使いやすくなったのはもちろん、
特に今回語りたいのが v0.42 で追加された モデル の機能です。

比較的新しい機能だからか、検索しても日本語情報が出なかったのですが、これはすごいです。

1. 「モデル」が出る前の世界

「直近1ヶ月の、1日ごとの会員登録数」 を取りたいというユースケースを考えます。

Metabase でおこなうのは非常にカンタンで、例えば以下のようにして出せます。
created_at を Day ごとに分けてカウントしています。

しかしここにマーケティングメンバーからツッコミが入るとしましょう。
「今日の会員登録数の表示がおかしい気がします……」と。
なるほど、データベースの created_at の値には UTC の時刻が入っているようです。
日本時間とは9時間もずれてしまいます。

そしたらカスタム列に Metabase の Custom Expressions の機能で
日本時間の created_at となる jp_created_at カラムを追加して……

あれ、でも jp_created_at を Day ごとでまとめようとしたら、
以下の画像のようにそれは出来なさそう……

「結局、SQLで書くしかないのか・・・」 となる。
これが、「モデル」が出る前の世界でした。

2. 「モデル」が誕生してからの世界

「モデル」のある世界では、SQL をわかる人による 擬似的なカラム追加 が可能になりました!

2-1. モデルの作成

「+New」→「モデル」を選び……

「ネイティブクエリを使用する」を選びましょう。

データベースを選んだのち、例えば以下のように SQL を打ったとしましょう。

SELECT
  users.*,
  CONVERT_TZ(`users`.`created_at`, 'UTC', 'Asia/Tokyo') AS `jp_created_at`
FROM users;

そうすると、このように jp_created_at というカラムが擬似的に作成されます。

この状態で保存をします。

2-2. モデルの使用

次に、このモデルを使用してみましょう。

まずはいつも通り「+New」→「質問」を選び……

開始するデータとしては「モデル」から先ほど作ったモデルを選びます。

jp_created_at は日時のカラムと Metabase 側は認識してくれているので、
集約をおこなうときも、上の画像のように「"日" で集計する?」「"月" で集計する?」などと Metabase は選択肢を渡してくれます。
(1. の項で説明した Custom Expressions で jp_created_at を用意したときは、この選択肢が出てこない問題がありました)

このように、
SQLをわかる人がモデルの作成をおこなってくれれば、
SQLのわからない人でもモデルを使って高度な分析をおこなうことが可能になります!!

ちなみに、このようにブロックエディターで作られたものが
どんな SQL になっているかは、右上のボタンから確認が可能です。

3. おわりに

以上、 Metabase の「モデル」機能の説明でした!

Metabase は SQL が書けない人でも分析をおこないやすくなる
ノーコード的なBIツールとして便利ですが、SQL を書ける人が「モデル」を作成することで
さらに強力なツールとなること が伝わりましたら幸いに思います!

ところで、4年ぶりにさわったら機能が増えていたけれど、
便利な機能のいくつかは有料版じゃないと開放されていないところは少しつらみでした。

昔は OSS 版(セルフホスティング版)とクラウド版に
機能的な差異はなかったと思うのですが、なかなか OSS の金銭的な世知辛さを最近は感じますね。
……とはいえ、セルフホスティング版でも「モデル」は使えてかなり便利ですので、ぜひこの記事をお役立てくださいー!

ラブグラフのエンジニアブログ

Discussion