はじめに
こんにちは、データドリブン推進室でデータエンジニアをやっている鶴です!
みなさん、LightdashのTable calculation機能って使ってますか?
自分はLightdashを触っていて[+Table calculation]という表記を見かけた際に
「Table calculationってことは表計算機能のことか〜
Tableauとかにもある出力した結果データの中で集計したりするやつかな
あると便利だよな…そのうち使う機会くるっしょ〜」
みたいなこと考えてあまり触らずスルーしてました…
同じような方もいらっしゃるのではないでしょうか?
実はLightdashのTable calculation機能はちょっと面白い機能になっているのでここでご紹介したいと思います!
Table calculationを触ってみよう
まずはQuerying from tablesから見たいテーブルを選択し、Resultの右上にある[+Table calculation]を押してみると…
こんな画面が出てきます。
つまり出力したデータを使ってSQLを書いて集計する、という感じなんですね。
やはり表計算といえばウィンドウ関数ということで書いてみます!
今回サンプルで用意したスーパーマーケットデータで売上前日比を作ってみます。
SQLはこんな感じです。編集画面で文字を入力するとサジェストしてくれるので便利です。
${sample_supermarket_sales.sum_of_total_price} /
LAG(${sample_supermarket_sales.sum_of_total_price} OVER(${sample_supermarket_sales.sale_date_day}))
このデータはソートを設定しているので一旦ORDER BYは記載せず進めてみます。
フォーマットはパーセント表示にしましょう。

保存して実行するとこんな感じになりました!

またこの作った項目を直接フィルターに設定することができます! 右上のボタンを押すと[Filter by 売上前日比]があるので押してみると…

フィルター欄に追加されました!
これを使って前日売上比100%越えの日を出してみる、なんてこともできます。
テンプレート機能もあります
ウィンドウ関数はSQLに慣れていない方だと正直難しい部分がありますよね…
ですがLightdashにはテンプレートが用意されてます!
[Sum of total price]の右上のボタンを押すと、Add quick calculationにテンプレートがあります。

Percent change from previous(前からの変化率)をクリックしてみます。

項目が自動で作成されました!
一応内容を確認するため項目右上を押し、Edit calcultationをクリックします。

内容的には先ほど自分が作ったクエリの内容に近いロジックがあり、それに対して1を引いている形になります。

なお、注意して欲しいのがLAG関数のORDER BYの箇所がDESCになっています。
日付で昇順にしたいためここは消しておきましょう。
ここは見たいものによると思うので適宜調整してください!
実行した結果はこうなりました。正直こっちの方がわかりやすいですね!w

このようにテンプレートをうまく使うとサクッと作れます。
他にもテンプレートはあるのでぜひ公式ドキュメントの解説ページをご確認ください。
また今の時代はChatGPT先生やGemini先生などに聞けばわかりやすく教えてくれますし、作ってくれます。有効に活用していきましょう!
実はこれだけじゃなかったTable calculation
さて、ここまで触ってきたTable calculationですが察しの良い方はこのことに気づいているかもしれません…
SQLで書けるってことはSQLでやれることは割と何でもできるのでは…?
そうです、何でもできます。
たとえばこのようなCASE文を書いてバナナフラグを立てることもできます(Result typeはbooleanにしてます)

ストアと商品の文字列を結合するようなテキスト計算もできます(Result typeはstringにしてます)

なんか自分が思ってた表計算と違う…!!!!
集計した項目をさらに好きなようにデータ加工・計算できるので面白いと思います。
また少し前のLightdashアップデートで作成した表計算項目を再利用できるようになりました。
つまりこうやって先ほど作成したバナナフラグとストアと商品の項目も合わせることが可能です。

作成した表計算結果をさらに計算して…みたいに広げていけるので柔軟性が上がっていいですね!
最後に
Table calculationは定義されたメトリックで対応できなかった集計やデータ加工をカバーする機能となっていて利用される方はこういう機能があると認識されておいた方が良い機能だと思います!
ただ公式ドキュメントにも記載がありますがこのTable calculationは一時的なニーズに対応するものとしては良い機能ですが、繰り返し再利用されている場合はdbt側の定義に追加して管理するようにした方が良いので管理者は適宜チェックしておきましょう。
We are hiring!
現在、データドリブン推進室ではデータエンジニア/アナリティクスエンジニアを大募集中です!
セーフィーのデバイスやアプリケーションからは1日あたり数十億件のログが発生し、データ量は線形的に増加しています。
このような超ビッグデータを効率的に処理し、ビジネスの意思決定に繋げるための仕組みを一緒に作ってみませんか?
ご興味のある方はセーフィー採用サイトを覗いてみて下さい!
よいLightdash Lifeを〜それではまた!