Steepからdbt Semantic Layerで定義されたMetricsを参照してみた

2024.01.31

さがらです。

Metricsの定義が前提のBIツール「Steep」について、先日ブログを書いてみました。

このSteepですがdbt Semantic Layerとも連携が可能のため、この連携機能を試してSteepからdbt Semantic Layerで定義されたMetricsを参照してみました。

やること

先日私がdbt Semantic Layerを試した際の、以下リポジトリで定義されているMetricsをSteepから参照してみます。

dbt Cloudでの事前準備

リポジトリの準備

jaffle-sl-templateのリポジトリをforkし、dbt projectをdbt Cloud上で定義し、Production Environmentを定義して、dbt seedとdbt buildを含むジョブを実行しておきます。

リポジトリの内容の説明に関しては、下記のブログも参考になるはずです。

dbt CloudでのSemantic Layerの設定

まずdbt Cloud上の対象のdbt projectにおいて、Semantic Layerを有効化しておく必要があります。

Account settingsProjectsから対象のdbt projectを選択し、Configure Semantic Layerを押します。

続いて、このdbt projectで使用しているDWHへの認証情報を入力します。

最低でも、semantic_modelsmetricsが参照しているdbt Modelを含むスキーマ・テーブルへの読み取り権限が必要となります。

必要な情報を入力したら、右下のSaveを押します。

すると、Environment IDHostなどの情報が表示されます。

この上でSteepから接続するにはService Tokenが必要となりますので、Generate Service Tokenを押します。

任意のToken Nameを入れて、デフォルトのSemantic Layer OnlyMetadata Onlyが付与された状態で、右下のSaveを押します。

すると、Service Tokenが表示されます!この画面を離れると表示できなくなるので、忘れずにコピーしておきましょう。

Steepでの設定

左のメニューのData sourcesから、dbt Cloudを押します。

先程dbt Cloud上で確認した情報も用いて、HostEnvironment IDService account tokenを入力し、Continueを押します。

すると、dbt Cloudに対して定義されたMetricsを取得する連携処理が走ります。問題なく完了すれば、下図のように表示されます。

Steepからdbt Semantic Layerで定義したMetricsを参照してみる

連携が上手くいけば、SteepのMetrics catalogにdbt Semantic Layerで定義したMetricsが一覧で表示されます。

※CategoryとOwnerですが、dbt上で定義したMetricsに付随するメタデータを元に連携する機能連携は近日中に行われると公式Docの「Owners and categories」に記載がありました。

この中からMetricsを1つ開くと、下図のようにグラフを描写することが出来ました。(サンプルデータの日時が2016年9月から2017年3月のデータしかないため、少し横軸が無駄なグラフになってしまっていますが、Steepの仕様上避けられなそうです。SteepのTime grainの絞り込みのUIはとてもわかりやすくて便利なのですが、ユーザー側で見たいTime grainの設定が自由にできるとなお嬉しいですね!)

あとは、通常のSteepの操作感でReportsやDashboardsを作っていくことが出来ます!ReportsやDashboardsの操作については下記のブログも併せてご覧ください。

おまけ:Steepが発行するクエリについて

これはdbt Semantic Layerと紐づけた場合に限った場合の事象ではないのですが、Steepは各Metricsを開いた際に、使用できるDimensionsすべてに対してフィルターの候補値を得るために、以下のようなクエリが投げられていました。

※今回はSnowflakeを使用していたためコスト的な影響はなかったですが、裏側がBigQueryのオンデマンドだとひやひやしそうですね…

最後に

Steepからdbt Semantic Layerで定義されたMetricsを参照してみたので、その内容をまとめてみました。

連携自体は本当に簡単な操作で出来て簡単でしたね!あとは、CategoryとOwnerの定義もdbt上で定義してSteepにSyncできるようになると更に実用性が増すと思うので、今後のアップデートにも期待したい所です。