跳转到内容
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. 1失败的 CTE 将提供商重复的尝试合并到一张有风险的发票中。
  2. 2仅当在第一次记录的失败后付款成功时,恢复才算作恢复。
  3. 3未收回金额与费率相补充,因此少量大额发票仍然可见。

需要决定的边缘情况

  • 在将 Webhook 交付视为新的付款尝试之前,对其进行重复数据删除。
  • 成功恢复后,退款和退款需要单独的生命周期事件。
  • 使用记录的汇率标准化货币并保留原始货币字段以进行调节。

推荐仪表板

  • 酒吧:recovery_rate_pct by failure_type
  • 状态:unrecovered_amount_usd
  • 表:最高价值的未收回发票和帐户所有者

警报指导

当未恢复的值超过阈值或正常可恢复的故障类型恶化时,向收入运营部门发出警报。

读取警报设置

让查询示例发挥作用

相关埋点和指南

定义源数据

此分析的事件模式

继续分析

在真实事件中运行它

创建表,调整字段并保存结果

免费开始,发送结构化事件,并将查询结果用作图表、共享仪表板小部件或警报输入。

获取 API 密钥