华为没有公开 MetaERP 预算主数据批量导入的源码/表级机制,但按它元数据驱动 + 微服务 + 云原生批量管道的架构,以及 Fusion / EBS / Sage Intacct 等高端 ERP 的通用做法,可以很确定地说:
预算主数据批量导入 =模板/文件/消息 → 接口表/Staging → 主数据服务校验 → 元数据引擎注册 → 发布前不控、发布后才控。
下面按“能导什么 → 走什么通道 → 内部怎么落 → 工程顺序”讲。
一、先界定:预算主数据批量导入“导什么”
不是导预算金额(那是 budget fact / 预算行),而是导这些:
主数据对象 | 批量导入内容 |
|---|---|
预算池 / 控制预算 | 池编码、类型(经营/Capex/项目/渠道/战略)、账簿/账簿集、币种 |
预算版本 | 基线 / 滚动 / 调整 / 情景、状态 DRAFT/PUBLISHED |
维度定义 | 项目、成本中心、产品线、区域、渠道、科目、资源类型 |
维度成员 | PRJ-A001、CC-ENG、Cloud-BG… 及层级父子关系 |
对象-维度绑定 | PR/PO/报销/合同 行 → 解析出哪些维度 |
控制规则 | 硬控/软控/预警、容差、超预算审批路由、控制池 |
金额本身通常叫“预算数额加载”,和主数据导入分开跑。
二、MetaERP 里常见的 3 条批量导入通道
1. 通道 1:Excel/CSV 模板导入(业务用户用)
类似 Fusion FBDI / Sage Intacct 预算导入:
下载模板 → 填 预算池 / 版本 / 维度 / 规则 → 上传 XLSX/CSV → 系统做格式校验 → 写接口表 / Staging → 主数据服务批量校验 → 注册到元数据层 → 返回错误行 + 成功行MetaERP 里模板不是写死字段,而是元数据生成模板:
- 加了“AI算力池”维度 → 模板自动多一列
- 不同 BG 看到不同必填维度
2. 通道 2:ETL / 数据迁移作业(上线、年切、老 ERP 迁移)
源系统(EBS / SAP / 用友 / 金蝶) GL_BUDGETS / GL_BUDGET_VERSIONS / CCID PA_BUDGETS / 项目/WBS HR 组织 / 成本中心 / 项目主数据 ↓ ODS / Staging 编码对齐、废弃维度剔除、CCID 拆维度 ↓ Mapping + Cleanse EBS CCID → MetaERP Dim Key 单版本 → Original Budget(PUBLISHED) ↓ 调用主数据批量服务 / 内部消息 ↓ 预算池 / 版本 / 维度成员 / 控制规则 入库这条通道不走前端表单,走数据管道 + 主数据微服务。
3. 通道 3:API / 消息批量写入(系统集成)
POST /api/meta/v1/dim-members/batch POST /api/budget/v1/pools/batch POST /api/budget/v1/control-rules/batch或:
MQ / EventBus: BudgetMaster.Upsert(Pool/Version/Dimension/Rule)特点:
- 幂等(sourceSystem + sourceKey)
- 支持 MERGE:不存在就建,存在就更新
- 大批量拆批(500/1000/5000 一包)
- 异步 Job + 错误文件回传
三、批量导入的内部实现逻辑(反推 MetaERP)
1. 阶段 1:文件 / 消息进 Staging
物理上可能有:
BUDGET_MASTER_STG ----------------- batch_id object_type -- POOL / VERSION / DIM / DIM_MEMBER / RULE src_system src_key payload_json status -- NEW / VALIDATED / REJECTED error_msg不会直接写业务基表。
2. 阶段 2:主数据校验(最关键)
校验顺序一般是:
- 结构校验:列名、类型、期间格式、币种
- 引用完整性:
- 项目是否存在于项目主数据
- 成本中心是否在 MDM 中 ACTIVE
- 科目是否在 COA 中
- 维度合法性:
- 维度成员是否在有效期间
- 父子层级是否成环
- 版本状态校验:
- DRAFT 可改
- PUBLISHED 版本不允许随便覆盖
- 规则冲突校验:
- 同一维度组合不能两条 HARD 规则
- 容差/审批人/权限点是否齐
失败行进REJECTED,成功行进VALIDATED。
3. 阶段 3:元数据引擎“注册”,不是插一行表
MetaERP 的元数据驱动体现在这里:
维度成员写入 → 元数据层更新 Dimension Member Cache → 维度层级物化(Materialized Hierarchy) → 预算立方体分区/索引准备 → PR/PO 解析器自动认识新维度 → 控制规则引擎重新加载规则集也就是:
导完主数据后,UI、API、校验、Funds Check、报表“自动长出来”。
4. 阶段 4:版本生效隔离
主数据导入后通常:
- 新版本先成
DRAFT - 跑平衡/覆盖检查
- 审批后变
PUBLISHED - 只有 PUBLISHED 版本参与 PR/PO 实时控制
所以批量导入不会让脏主数据立刻影响业务。
四、标准加载顺序(批量导入必须守)
1. 基础主数据 公司 / 账簿 / 成本中心 / 项目 / 科目 / 币种 2. 维度定义 + 维度成员 + 层级 PROJECT / COST_CENTER / CHANNEL / PRODUCT_LINE 3. 预算池 OPERATING / CAPEX / PROJECT / REBATE / STRATEGIC 4. 预算版本 DRAFT 先建,不控 5. 对象-维度绑定元数据 PR 行解析成哪些 Dim 6. 控制规则 HARD / SOFT / ADVISORY / TOLERANCE / OVERRIDE 7. 最后才导预算数额(BUDGET_FACT / BUDGET_LINE)顺序错了常见报错:
- “维度成员不存在”
- “预算池未发布版本”
- “控制规则无匹配维度”
- “PR 解析不出 Dim Key”
五、一个批量导入示例(项目预算主数据)
文件:project_budget_master.csv
object,code,name,parent,valid_from,valid_to,hierarchy,budget_pool,version,rule_level,tolerance_pct DIM_MEMBER,PRJ-A001,研发技改,BG-CLOUD,2026-01-01,2026-12-31,BG-CLOUD/PRJ-A001,PROJECT_2026,2026_BASELINE,HARD,0 DIM_MEMBER,PRJ-A002,交付平台,BG-CLOUD,2026-01-01,2026-12-31,BG-CLOUD/PRJ-A002,PROJECT_2026,2026_BASELINE,HARD,0 POOL,PROJECT_2026,项目预算池,,2026-01-01,2026-12-31,,PROJECT,2026_BASELINE,, RULE,PRJ-A001,RULE,CC-ENG+PRJ-A001,2026-01-01,2026-12-31,PROJECT_2026,PROJECT,2026_BASELINE,HARD,0导入后系统做:
- 建/更新项目维度成员
- 挂到 BG-CLOUD 层级
- 注册 PROJECT_2026 池
- 建 2026_BASELINE(DRAFT)
- 挂控制规则
- 审批后 PUBLISHED
- PR 提交 PRJ-A001 时开始控
六、和 Fusion / EBS 的对照
能力 | EBS | Fusion Budgetary Control | MetaERP(反推) |
|---|---|---|---|
批量方式 | SQL*Loader / 接口表 | FBDI + ESS Job | 模板 / ETL / 批量 API |
维度模型 | CCID 固定 | 多维过滤器 | 元数据维度,动态扩展 |
版本 | 多数不用 | DRAFT/PUBLISHED | DRAFT/PUBLISHED/ROLLING |
主数据校验 | PL/SQL 自己写 | 接口表 + ESS 校验 | 主数据服务 + 规则引擎 |
导入即生效 | 常直接改余额 | 发布后才控 | 发布后才控 |
错行处理 | 整批回滚常见 | 错行日志 + 重跑 | 错行隔离 + 幂等重跑 |
七、工程落地要点(做方案用)
- 幂等键:
sourceSystem + sourceObject + sourceKey - 错行不整批滚:主数据导入应支持“成功行生效、错误行回传”
- 大批量拆批:维度成员 10w 级、规则几万条,别单请求
- 先校验后发布:DRAFT 导入 → 治理报表 → 发布
- 主数据先于金额:没维度别灌预算数
- 迁移场景 CCID 拆维:EBS 的
01-1020-680101-PRJ-A001拆成 Entity/CostCenter/Account/Project - 导入后刷缓存:维度树、规则集、立方体分区都要重算
八、一句话总结
MetaERP 预算主数据批量导入不是“把 Excel 写进表”,而是:
文件/ETL/API → Staging → 主数据服务做引用/维度/版本/规则校验 → 元数据引擎注册维度与规则 → DRAFT 版本先行 → 审批发布后才进入 PR/PO 实时预算控制。