本文へ移動
Telemetry
収益と請求 SQL レシピ

支払い失敗時の回復を測定する

失敗した請求書が、その後の支払いの試みによって回復される頻度を計算します。

中級者invoice_eventsレビュー済み 2026-07-27テスト済み アパッチ DataFusion 45.2.0

レビュー者 Telemetry 製品チーム . SQL の互換性、イベント コントラクト、合成出力、および操作上の注意事項. 基準と所有権を確認する

質問に回答しました

どの支払い失敗が回復し、どのくらいの収益が依然としてリスクにさらされているのでしょうか?

支払い失敗だけをカウントすると、永続的な収益リスクが過大評価されます。回収分析はその後の試行を通じて請求書を追跡し、リスクにさらされている金額を保存します。

イベント契約

クエリが期待するフィールド

フィールド種類なぜ存在するのか
timestamp_utcTimestamp請求書のイベント時間。
invoice_idUtf8安定したプロバイダーの請求書識別子。
event_nameUtf8invoice_payment_failed または invoice_paid。
amount_usdFloat64正規化された請求金額。
failure_typeUtf8安全に分類された失敗の理由。
DataFusion SQL

クエリをコピーする

sql
WITH failures AS (
  SELECT
    invoice_id,
    MIN(timestamp_utc) AS first_failed_at,
    MAX(amount_usd) AS amount_usd,
    MIN(failure_type) AS failure_type
  FROM invoice_events
  WHERE event_name = 'invoice_payment_failed'
    AND timestamp_utc >= now() - INTERVAL '60 days'
  GROUP BY invoice_id
),
recoveries AS (
  SELECT
    invoice_id,
    MIN(timestamp_utc) AS recovered_at
  FROM invoice_events
  WHERE event_name = 'invoice_paid'
  GROUP BY invoice_id
)
SELECT
  failures.failure_type,
  COUNT(*) AS failed_invoices,
  SUM(CASE
    WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
    ELSE 0
  END) AS recovered_invoices,
  100.0 * SUM(CASE
    WHEN recoveries.recovered_at > failures.first_failed_at THEN 1
    ELSE 0
  END) / NULLIF(COUNT(*), 0) AS recovery_rate_pct,
  SUM(CASE
    WHEN recoveries.recovered_at IS NULL THEN failures.amount_usd
    ELSE 0.0
  END) AS unrecovered_amount_usd
FROM failures
LEFT JOIN recoveries
  ON recoveries.invoice_id = failures.invoice_id
GROUP BY failures.failure_type
ORDER BY unrecovered_amount_usd DESC;

この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。

クエリ結果

障害の種類別の支払い回収率

認証が必要な障害は回復する頻度が最も低く、重大な収益リスクが残ります。

failure_typefailed_invoicesrecovered_invoicesrecovery_rate_pctunrecovered_amount_usd
insufficient_funds1428962.686,840
expired_card584781.031,320
authentication_required3618502,940

合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。

Payment recovery rate by failure type: Measure Payment-Failure Recovery 結果例からの合成 recovery_rate_pct 値の静的チャート
決定論的な出力例のインデックス可能な SVG。記事、ランブック、または出典を明示した設計レビューのためにダウンロードしてください。

例を再現する

パブリックフィクスチャをダウンロードする

JSON バンドルには、型付きイベント コントラクトが含まれています。 illustrative 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。

SQL の仕組み

  1. 1CTE に障害が発生すると、プロバイダーの繰り返しの試行が危険にさらされて 1 つの請求書にまとめられます。
  2. 2回復は、記録された最初の失敗の後、支払いが成功した場合にのみカウントされます。
  3. 3未回収の金額がレートを補完するため、少数の高額な請求書が表示されたままになります。

決定すべきエッジケース

  • 新しい支払い試行として処理する前に、Webhook 配信の重複を排除します。
  • 返金とチャージバックには、正常に回復した後に別のライフサイクル イベントが必要です。
  • 文書化されたレートで通貨を正規化し、調整のために元の通貨フィールドを保持します。

推奨されるダッシュボード

  • バー: recovery_rate_pct by failure_type
  • 統計: unrecovered_amount_usd
  • 表: 最高額の未回収請求書とアカウント所有者

アラートガイダンス

未回復の値がしきい値を超えた場合、または通常回復可能な障害タイプが悪化した場合に、収益オペレーションにアラートを送信します。

アラート設定を読む

レシピを活用する

関連する機器とガイド

ソースデータを定義する

この分析のイベント スキーマ

分析を続ける

実際のイベントで実行する

テーブルを作成し、フィールドを調整して、結果を保存します

無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。

API キーを取得する