多币种事实链
01

交易:原币金额与币种

02

记账:功能币与交易日汇率

03

报告:报告币与报告规则

04

期末:重估与折算调整

05

治理:汇率源、方向、版本

结论:金额不是单独一个 decimal 字段

100 美元、100 欧元和100日元不能直接相加。事实表至少要保存原币金额与 currency_code,并根据明确会计与管理政策保存功能币或报告币金额。汇率不是查询时随手 Join 的普通维度,而是带日期、类型、来源和方向的受治理事实。

本文讨论分析模型,不构成会计建议。交易日、结算日、月末和预算分析可能使用不同汇率;货币性与非货币性项目的处理也受准则与企业政策影响。数据模型必须表达已批准规则,不能让建模工具自行推断会计处理。

先定义组织的功能币、报告币和业务目的

同一集团可能有多个法人功能币,管理报表另用人民币或美元。先建立 entity、ledger、functional_currency、reporting_currency 和 policy_version 的映射,并说明适用期间。不能给整个集团硬编码一个“本位币”字段。

销售经营分析、法定报表、现金结算和预算比较需要不同口径。每个指标声明使用哪一金额列、哪类汇率、哪个日期角色和哪个政策版本;名称只写“销售额”而不写币种视角,会让正确数据产生错误结论。

事实表同时保留原币和已折算金额

订单行可以保存 transaction_amount、transaction_currency、functional_amount、functional_currency、reporting_amount、reporting_currency,以及各自 rate_id。原币是审计与重新折算基础,不能在 ETL 后丢弃;折算金额则固定当时采用的规则,避免报表每天漂移。

退款、折扣、税、运费和成本应在相同粒度分别保存符号和币种。不要把订单头金额按行重复,也不要先将不同币种金额求和再乘平均汇率。聚合必须先在行或受控批次完成折算,再按目标币种汇总。

汇率表要声明报价方向和有效时间

fx_rate 保存 from_currency、to_currency、rate_type、rate、valid_from、valid_to、source、published_at、ingested_at 和 version。明确 1 from 等于多少 to;只写 currency_pair 和 rate 容易出现倒数误用。

日汇率要定义周末、节假日和缺失日的回退政策。盘中汇率还需要时区和时间戳。多个来源冲突时按批准优先级选择并保留原始值;绝不能在缺失时静默使用 1 或最近任意一条。

还要检查同一货币对、汇率类型和有效时段是否重叠。重叠会使一笔交易命中多行并重复金额;空档则应进入异常队列。查询层不得用任意排序后的第一条掩盖模型缺陷。

区分交易日、结算日、期末和平均汇率

交易确认通常绑定 event_date;现金结算看 settlement_date;资产负债表日可能需要 closing rate;期间经营分析可能使用经批准的平均或预算汇率。日期维度应以角色键表达,rate_type 也必须进入 Join。

月平均汇率不能由现有交易量加权后冒充市场平均,也不能用于需要交易日汇率的明细。若业务只提供月度汇率,模型应展示粒度限制,不能把每一天生成同一个值后声称日级准确。

三角换算、倒数和舍入需要统一规则

缺少直接货币对时可经批准的 pivot currency 三角换算,但要保存两段 rate_id、计算路径和最终精度。正向与反向汇率理论上互为倒数,供应商点差和发布日期差异可能导致不完全相等,不能强行覆盖原值。

定义金额小数位、汇率精度、舍入模式和舍入层级。逐行舍入后求和与先求和后舍入会产生差异;系统应选择政策并把 residual 记录到明确调整行,而不是把尾差隐藏在最后一笔业务。

重估和折算差额应成为显式事实

汇率变化对未结项目的重估、结算损益和集团折算差额,不应通过覆盖原交易金额实现。建立 adjustment_fact,保存对象、期间、旧金额、新金额、差额、rate_id、policy_version、run_id 和冲销关系。

这样可以同时回答“按交易时口径的经营结果”和“按期末口径的报告结果”。直接更新 functional_amount 会破坏历史审计,也让重跑后无法解释差异来自业务变更还是汇率变更。

回填汇率和政策换版要可重放

汇率源迟到或修订时,先生成新版本并识别受影响事实。是否回写、在哪个期间确认差额、是否重述历史由财务政策决定。数据管道只执行已批准动作,并保存前后 rate_id 与影响金额。

不要让报表查询每次直接读取“最新汇率”。这会使昨天发布的数字今天改变,却没有重述标志。发布层应有 close 状态、版本和重跑清单,关闭期间的变更走审批。

用货币守恒与异常样本验收

验收检查每行币种非空、汇率方向正确、有效期唯一、原币到功能币公式可复算、退款符号一致、汇总不混币、调整与冲销守恒。测试直接汇率、三角换算、倒数、周末、零与负金额、高通胀、缺失汇率和多次回填。

按法人和期间把功能币金额与总账或已批准报表对账,并把差异拆成业务、汇率、舍入和时间边界。仅抽查美元订单不够,最容易出错的是稀有货币、跨午夜交易、部分退款和期末未结项目。

实施清单与 BuildTable.ai 边界

先由财务确认币种角色和汇率政策,数据团队盘点金额字段与日期角色,建立版本化汇率和原币事实,再实现折算、调整、对账与语义指标。发布前让财务复核样本和尾差,发布后监控缺失率、过期率、回填影响与对账差异。

BuildTable.ai 可作为事实表、汇率表和语义结果设计候选,但本文不证明它已内置 IAS 21 规则、自动取得权威汇率或承担会计判断。汇率来源、精度、调度、审批和重述能力必须按项目核验;最终会计政策应由合格财务人员确定。

公开参考资料

开始构建 AI 友好的数据基础

联系我们讨论企业数据建模场景并获取 BuildTable Desktop。

联系我们