财务统计口径
When to Invoke
GMV、销售额、实收、退款率、看板、面试「GMV 怎么算」。财务对数字,口径比 SQL 重要。
When NOT
渠道对账文件 → reconciliation。商家结算打款 → finance-settlement。记账分录 → finance-ledger。渠道分账划款 → pay-split-account。
风险(面试考点)
GMV ≠ 平台收入 ≠ 净利润 ≠ TPV。 平台收入通常是佣金+广告+服务费。TPV 是支付通道吞吐,可含充值、代付。把 GMV 当营收是面试扣分项。
多种 GMV,必须写清发生点。直播/电商面试常考「支付 GMV 有水分」:
| 名称 | 计入时点 | 含退款? | 典型用途 |
|---|---|---|---|
| 下单 GMV | 创单 | 含未支付 | 战报注水,少用 |
| 支付 GMV | 支付成功 | 含后续退款 | 规模,默认对外口径之一 |
| 结算/履约 GMV | 核销/确认收货且未退 | 净成交 | 质量、可结算、算法权重 |
同一「今日销售额」,按支付成功还是按切日时区,能差一天。endTime=23:59:59 会漏 1 秒。用 [start, nextDay),时区写死(文旅默认 Asia/Shanghai)。
退款记哪一天必须二选一写死:支付日冲减(改历史日,报表会变)或 退款日冲减(净额另列)。禁止两套 SQL 混用。
优惠、运费、税费、平台补贴 vs 商家补贴是否计入要写进指标字典。平台券往往仍计入 GMV、不计入商家实收。客单价 = 某口径 GMV / 该口径订单数,分母跟错会差一倍。
禁止交易库 SELECT SUM(amount) 扫全量当实时大屏。用流水汇总表、离线数仓、或支付成功时累加计数器(可对账校正)。金额分;跨系统禁止 float。
方案选型(轻量优先)
每个指标一张口径卡:时间窗、时区、状态集合、含不含退/券/运费/补贴、一个算例、数仓表名。
支付GMV(日) = SUM(pay_trade.amount_fen)
WHERE status=SUCCESS AND paid_at ∈ [D 00:00+08, D+1 00:00+08)
净GMV(日) = 支付GMV - 当日确认成功的退款(或按下单日退回冲减,二选一写死)
平台收入(日) = SUM(佣金分) 同窗 // 不是 GMV
文旅:核销 GMV 常比支付 GMV 更接近可结算。门票未核销退款要从净额扣。预售/定金:只把已收金额计入支付 GMV,尾款另笔支付再计。
实时大屏:支付成功 MQ 累加 Redis;日终用明细重算覆盖。对不上进 reconciliation。
反例
错误:看板 GMV = 订单表全部 CREATED 金额。 正确:按支付成功或核销,并注明。
错误:退款不冲减,年底对不上银行。 正确:净额指标单独命名,冲减规则写死。
错误:运营、财务、BD 各算各的,差 8%。 正确:指标字典,一个 SQL 来源。
错误:把渠道分账到账、商家提现、GMV 加在同一张「今日流水」里给老板。 正确:规模看 GMV;可打款看结算单;通道吞吐看 TPV。
验证
- 同一日支付成功 10 笔、退 2 笔,支付 GMV 与净 GMV 数字符合口径卡。
- 23:59:59 与 00:00:00 边界订单只进一天。
- 大屏不是扫交易明细全表。
- 换「支付日冲减 / 退款日冲减」后,历史日是否允许变动有文档。
评审清单
- GMV 与收入、TPV、结算打款分开
- 时点、时区、退款规则、券/运费/补贴写成文
- 金额分
- 无实时全表 SUM