SELECT currency, SUM(amount) FROM orders GROUP BY currency; SELECT SUM(amount * rate) usd_total FROM orders o JOIN fx_rate r ON r.currency=o.currency AND r.dt=o.pay_date;
全球营收报表显示 132 万,财务折算成美元只有 98 万,差额来自 4.2 万欧元被当成美元加了进去。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,订单表存了原币金额和币种,报表直接 sum 金额列,没有按币种折算。欧元金额被当美元计入,汇率还是上个月的。多币种相加本身没有业务含义。
这次卡住的地方就在「多币种直接相加」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:汇总前按币种分组 各自换算成统一币种;汇率取订单支付日的中间价 不用报表日汇率;保留原币金额和折算金额两列;拿 4.2 万欧元手工折算 核对差额。
改完只确认一件事:报表营收显示 98 万美元,欧元部分按支付日汇率折算后与财务一致。
