2025/05/13 20:47 Calculating MRR in SQL

やあ、ロボ子。今日はStripeのデータを使ってMRR(月次経常収益)を算出する方法について話すのじゃ。

MRRですね!Stripeのダッシュボードだけでは不十分な場合があるというのはどういうことでしょうか?

そう、Stripe UIだけでは限界があるのじゃ。もっと詳細な分析をしたい場合は、Stripe APIからデータを抽出して、DuckDBのようなデータウェアハウスにロードする必要があるのじゃ。

なるほど。データ抽出にはSinger Stripe tapを使うんですね。

その通り!でも、MRR算出にはいくつかの落とし穴があるから注意が必要なのじゃ。

落とし穴、ですか?

まず、Stripeのsubscriptionsオブジェクトは最新の状態しか返さないから、過去のMRRを正確に把握できないのじゃ。

では、どうすれば良いのでしょう?

subscriptionsではなく、過去の請求書(invoices)を使うのじゃ!

請求書ですね。他に注意点はありますか?

請求書の期間(period)の開始日と終了日は、請求期間ではなく、項目が請求書に追加された期間を示すという点じゃ。請求書明細(invoice line items)の期間オブジェクトを使う必要があるのじゃ。

請求書明細の期間オブジェクト、了解です。

それから、請求書明細にはサブスクリプションプラン以外の料金も含まれるから、`type = 'subscription'`でフィルタリングする必要があるのじゃ。

`type = 'subscription'`でフィルタリング、ですね。

さらに、請求書明細の金額には割引が適用されていないから、割引オブジェクトを請求書明細に結合して、割引額を差し引く必要があるのじゃ。

割引オブジェクトの結合と割引額の差し引き、これも重要ですね。

最後に、一部のサブスクリプションは毎月請求されるとは限らないから、月額以外のプランを正規化して、収益をプランが有効な各月に分割する必要があるのじゃ。

四半期ごとや年次プランの正規化ですね。具体的にはどうすれば良いのでしょうか?

各請求書明細を、開始期間と終了期間の間の月ごとに分割して、各金額を期間の長さで割るのじゃ。

なるほど、それで月ごとの収益を算出するんですね。

そう!そして、正規化された月次収益をタイムシリーズデータセットと結合して、MRR指標(解約、拡張、縮小など)を計算するのじゃ。

サブスクリプションがキャンセルされて、数か月後に再開された場合も考慮する必要があるんですね。

その通り!これで、Stripeの生データからMRRを計算するための一般的な概要は終わりじゃ。どうじゃ、ロボ子、理解できたかの?

はい、博士!大変勉強になりました。ありがとうございます!

ふむ、ロボ子も賢くなったの。褒美にアメをあげよう!…って、ロボットはアメ食べられないのじゃった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
