dbt + BigQuery→Lightdashをやってみた・可視化編

に公開

はじめに

前回の記事では、Lightdashを使いたいので、そのために必要なマートテーブルの作成までを行いました!今回の記事では、いよいよ本題のLightdashを使ってみた内容を書いていきます。
https://zenn.dev/shakshi3104/articles/88f1773d46d854

おさらい

今回使用しているデータはTableauのサンプルデータのBookshopデータで、月毎で人気の本を分析するためのデータマートを設計しました。以下のようなスタースキーマのテーブルを使って、Lightdashで簡単なグラフやダッシュボードを作ってみます。

(「TableauのサンプルデータなのにLightdashで可視化するんかい」というツッコミは受け付けていません)

Lightdashを使ってみる

Lightdashとは、dbt-labsが開発しているツールで、一言で言うと「セマンティックレイヤーをベースとしたBIツール」です。今回は、Cloud版のLightdashを使ってみます!
https://www.lightdash.com
詳しくは以下の記事も参考にしてみてください。
https://stable.co.jp/blog/introduction-lightdash
https://zenn.dev/lclco/articles/04e97141779165

プロジェクトの作成

Lightdashのアカウントを作成すると、以下のようなデータウェアハウスを選ぶ画面が出てきます。今回は、BigQueryを選択します。

BigQueryを選ぶと、セットアップ方法を聞いてきます。今回は「Using your CLI」を選びました。

そうすると、実行するコマンドが出てきます。指示通りに、dbtのプロジェクトでコマンドを実行します。

実行するコマンドは以下です。

  1. Lightdash CLIをインストール
    npm install -g @lightdash/cli@0.16321
    
  2. Lightdashにログイン
    lightdash login https://app.lightdash.cloud --token <token>
    
  3. プロジェクトの作成
    lightdash deploy --create
    

なんかエラーが出てデプロイできない

手順通りにコマンドを実行したのですが、以下のようなエラーが出てテーブルが出てこない状態でした。

エラー内容
Found 5 errors when validating dbt models:
- silver_sales: No dimensions available
- silver_checkouts: No dimensions available
- monthly_popular_books: No dimensions available
- fact_monthly_sales_and_checkouts: No dimensions available
- dim_book: No dimensions available


- ERROR> silver_sales : No dimensions available
- ERROR> silver_checkouts : No dimensions available
- ERROR> monthly_popular_books : No dimensions available
- ERROR> fact_monthly_sales_and_checkouts : No dimensions available
- ERROR> dim_book : No dimensions available

Compiled 5 explores, SUCCESS=0 ERRORS=5

? Add a project name or press enter to use the default: [Bookshop dbt]  Bookshop

? Do you confirm Lightdash can store your warehouse credentials so you can run queries in
Lightdash? Yes
? Do you want to save this answer for next time? Yes
✔️   New project Bookshop created

Can’t deploy with errors. If you still want to deploy, add --ignore-errors flag

調べてみると、テーブルのドキュメントをYAMLファイルで書く必要があったようです。
https://docs.lightdash.com/references/dimensions

今回必要なテーブルはmonthly_popular_booksなので、とりあえず以下のようなYAMLファイルを書きました。ドキュメントを書かないとLightdashで使えないというのは、メタデータを用意させることを強制しているという意味では理にかなってる気がします。

version: 2

models:
  - name: monthly_popular_books
    columns:
      - name: book_id
        description: "本のユニークなID"
      - name: year_month
        description: "年月"
      - name: amount
        description: "その月の売上数"
        meta:
          metrics:
            total_amount:
              type: sum
      - name: checkouts
        description: "その月の貸出数"
        meta:
          metrics:
            total_checkouts:
              type: sum
      - name: title
        description: "本のタイトル"
      - name: genre
        description: "本のジャンル"
      - name: author_name
        description: "著者名"
      - name: average_rating
        description: "平均のレビュー点数"

ついでにMetricsも用意しておきました。
https://docs.lightdash.com/references/metrics

本当は他のテーブルのドキュメントも書く必要はありますが省略します。エラーを無視するオプションをつけて、デプロイしました。

lightdash deploy --ignore-errors

グラフを作ってみる

Lightdash上でテーブルが見えるようになったので、テーブルからグラフを作ってみます。
「New」から「Query from tables」を選択し、2193年5月の売上数が多い順に本のタイトルと著者名を見てみます。

実際に発行されるクエリを見ることもできます。

また、グラフの形式は簡単に選ぶことができました。

ここで作ったグラフは保存ができるので保存しておきます。後からダッシュボードに追加することもできます。

ダッシュボードにしてみる

売上数が多い順の棒グラフと同様に貸出回数が多い順の棒グラフも用意して、ダッシュボードとしてグラフを並べてみました。レイアウトは簡単に配置できて便利だと思います。

また、フィルタを後から自由に追加できるのが便利な機能だと思いました。他のBIツールではダッシュボードの作成時に必要なフィルタを用意しておく必要がありますが、Lightdashではテーブルにあるディメンションは自由にフィルタとして使えるようです。

例えば、あらかじめ日付のフィルタのみ用意しておいたダッシュボードに、後からジャンルのフィルタの追加ができました。

ダッシュボードをコードで保存する

Lightdashの利点の1つがダッシュボードをYAMLファイルで管理できることです。
以下のコマンドを実行すると、Lightdashで作成したグラフやダッシュボードをYAMLファイルでダウンロードできます。

lightdash download

https://www.lightdash.com/blogpost/introducing-dashboards-as-code

今回作成したダッシュボードのYAMLファイルはこんな感じです。

YAMLファイル
name: Monthly popular books
description: ""
updatedAt: "2025-05-22T12:41:38.955Z"
tiles:
  - x: 18
    "y": 0
    h: 9
    w: 18
    tabUuid: null
    type: saved_chart
    properties:
      title: ""
      hideTitle: false
      chartSlug: top-10-checkouts-1747740412006
    tileSlug: top-10-checkouts-1747740412006
  - x: 0
    "y": 0
    h: 9
    w: 18
    tabUuid: null
    type: saved_chart
    properties:
      title: ""
      hideTitle: false
      chartSlug: top-10-amount
    tileSlug: top-10-amount
filters:
  metrics: []
  dimensions:
    - target:
        fieldId: monthly_popular_books_year_month_month
        fieldName: year_month_month
        tableName: monthly_popular_books
      values:
        - 2193-05
      disabled: false
      operator: equals
      required: false
      tileTargets:
        top-10-checkouts-1747740412006:
          fieldId: monthly_popular_books_year_month_month
          tableName: monthly_popular_books
        top-10-amount:
          fieldId: monthly_popular_books_year_month_month
          tableName: monthly_popular_books
  tableCalculations: []
tabs: []
slug: monthly-popular-books
spaceSlug: shared
version: 1
downloadedAt: "2025-05-22T12:50:34.304Z"

グラフのYAMLファイルもダウンロードできます。それぞれのYAMLファイルは、GitHubも参照してみてください。
https://github.com/Shakshi3104/bookshop_dbt/tree/main/lightdash

おわりに

今回は、Lightdashを使ってdbtで整形したテーブルを可視化してみました。データ整形編と合わせて、データモデリングと可視化を一連でやってみることができたと思います。簡単なシナリオでやってみた例ですが、何かの参考になればと思います!

Discussion