首页/数据/数仓建模速查/案例:财务总账凭证建模
建模基础69 条

案例:财务总账凭证建模

总账域:凭证分录事实(一借一贷或一借多贷)+ 科目维 + 期间维 + 组织维;试算平衡(借贷合计相等)是硬校验。

数仓建模速查数据更新于 2026-10-13

总账建模的要点

总账域的事实是凭证分录行:一张凭证由一借一贷或多借多贷组成,每行挂科目、期间、组织、币种维度,借方金额与贷方金额分开存放。试算平衡是硬校验——同一张凭证内借方合计必须等于贷方合计,加载流程先过这道校验再放行。

基本信息

事实粒度凭证分录行,凭证号加行号唯一
主要维度科目、会计期间、组织、币种、经办人
度量借方金额、贷方金额
硬校验同一凭证借贷合计相等
派生表科目余额表由分录汇总生成,与分录每日勾稽

典型使用场景

  • 报表编制:按科目与期间汇总借贷发生额,出具资产负债表与利润表
  • 余额追溯:从余额表下钻到明细分录,定位某笔余额的构成
  • 月末结账:关账前跑试算平衡,不平衡不允许关账
  • 费用分析:按组织与成本中心汇总费用类科目的发生额
  • 审计抽样:按凭证号抽取分录,核对原始单据与账务一致性

分录事实表与平衡校验

分录事实表与平衡校验
-- 分录行:凭证号加行号唯一,会计期间作为分区
CREATE TABLE fact_gl_entry (
  voucher_id string COMMENT '凭证号',
  line_no    int COMMENT '凭证行号',
  account_sk bigint COMMENT '科目代理键',
  org_sk     bigint COMMENT '组织代理键',
  dr_amt     decimal(18,2) COMMENT '借方金额',
  cr_amt     decimal(18,2) COMMENT '贷方金额',
  period     string COMMENT '会计期间'
) PARTITIONED BY (period) STORED AS ORC;

-- 试算平衡:同一凭证借贷必须相等,不通过即阻断加载
SELECT voucher_id, sum(dr_amt) AS dr_sum, sum(cr_amt) AS cr_sum
FROM fact_gl_entry
WHERE period = '2026-10'
GROUP BY voucher_id
HAVING sum(dr_amt) <> sum(cr_amt);

分录与余额的分工

对比项凭证分录科目余额
粒度凭证行级科目乘以期间
用途追溯原始账务报表直接取数
关系汇总后生成余额由分录推导,可反查
校验同凭证借贷平衡期末等于期初加发生额
科目版本变化要有对照表:科目表调整后,同比与趋势分析必须按对照关系还原,否则新旧科目混在同一列,同比直接断裂且无法解释。
凭证号加行号是唯一键,重复加载会让发生额虚增,加载前要按该键做去重或幂等覆盖,而不是依赖全量重跑。

易错点

  • 凭证号加行号不唯一:分录重复加载,科目余额相应虚增
  • 跨凭证汇总做平衡校验:不同凭证的借贷互相抵消,单张凭证的错误被掩盖
  • 科目版本变化未做对照:同比与趋势口径断裂,报表数字无从解释
  • 原币与本币金额混存一列:汇率变动后无法回溯折算依据
  • 余额表手工调整而不落分录:期末余额与分录汇总对不上,审计时无法解释

数据来源与参考

  • 财务数仓实践:总账模型
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌