华为没有公开 MetaERP 预算模块的“内部查询 SQL / 表名”,但按它元数据驱动 + 微服务 + 多维预算立方体的架构,预算主数据的“查询”通常不是直接查业务表,而是分四类入口:
主数据查询 ≠ 预算余额查询
主数据:预算池 / 版本 / 维度 / 维度成员 / 控制规则
余额数据:预算数 / 承诺 / 占用 / 实际 / 可用额
一、总体查询分层
① 主数据服务查询(预算池、版本、维度、规则)
② 维度成员查询(项目、成本中心、渠道、产品线…)
③ 预算立方体查询(某维度组合有多少预算)
④ 执行/占用查询(Commitment / Obligation / Actual / Available)
MetaERP 里前两类是“主数据查询”,后两类是“预算数据/执行数据查询”。
二、预算主数据怎么查(核心)
1. 通过「预算主数据 / 元数据服务」查
云原生做法:不走 SELECT * FROM BUDGET_POOL,而是调主数据/配置服务。
逻辑接口形态(MetaERP 风格):
GET /api/budget/v1/pools?status=PUBLISHED&type=PROJECT
GET /api/budget/v1/versions?poolCode=PRJ_BUDGET_2026&status=PUBLISHED
GET /api/meta/v1/dimensions?object=BUDGET
GET /api/meta/v1/dim-members?dimension=PROJECT&keyword=PRJ
GET /api/budget/v1/control-rules?pool=PROJECT_BUDGET&project=PRJ-A001
返回的是:
- 预算池定义
- 版本状态(DRAFT / PUBLISHED / CLOSED)
- 维度定义与层级
- 控制规则(HARD / SOFT / ADVISORY、容差、超授审批人)
这类查询用于:
- 配置界面
- 主数据治理
- 迁移校验
- 控制规则审计
2. 通过「维度解析服务」反查“这张单据对应哪些主数据”
业务侧不是先查主数据再做事,而是:
PR / PO / 报销 / 合同
→ 解析出 Dim Key
→ 再查预算主数据是否覆盖该 Dim Key
例如 PR 行有:
project=PRJ-A001, cc=CC-ENG, account=680101, period=2026-09
系统会查:
- PRJ-A001 是不是已注册项目维度成员
- CC-ENG 是不是成本中心维度成员
- 该组合在不在某个 PUBLISHED 预算版本里
- 是否有对应控制规则
所以“主数据查询”常常是隐式发生在 Funds Check 里。
3. 通过「预算编制界面 / 低代码表单」查
用户视角:
- 预算池列表
- 版本对比(Baseline vs Rolling Forecast)
- 维度树(集团 → BG → 区域 → 项目)
- 控制规则明细
背后是:
主数据缓存 / 元数据缓存 / OLAP 立方体元数据
不是实时扫事务表,而是读已发布的主数据快照。
4. 通过「报表 / OLAP / 数仓」查
用于分析而不是控制:
预算池维度表
维度成员维表
版本维表
控制规则维表
再和预算事实表 join:
budget_fact.dim_key = dim_member.dim_key
and budget_fact.version_id = budget_version.version_id
and budget_version.status = 'PUBLISHED'
这类查询常见于:
- 预算执行分析
- 主数据血缘
- 维度未覆盖清单
- “有项目但没预算”的治理报表
三、预算主数据查询的 5 个关键过滤条件
不管走 API 还是报表,基本都绕不开这些:
|
poolCode / poolType |
经营 / 资本 / 项目 / 渠道返点 / 战略专项 |
|
versionStatus |
DRAFT / PUBLISHED / CLOSED / ARCHIVED |
|
dimensionCode |
PROJECT / COST_CENTER / CHANNEL / PRODUCT_LINE |
|
memberStatus |
ACTIVE / INACTIVE / PENDING |
|
effectivePeriod |
维度成员在哪段期间有效 |
只有 versionStatus = PUBLISHED 的预算主数据 + 预算数,才会参与 PR/PO 控制。
四、主数据查询 vs 余额查询(别混)
1. 查“有没有这个预算对象”
GET /api/budget/v1/pools/PRJ_BUDGET_2026
GET /api/meta/v1/dim-members?dimension=PROJECT&code=PRJ-A001
返回:
{
"poolCode": "PRJ_BUDGET_2026",
"type": "PROJECT",
"version": "2026_BASELINE",
"status": "PUBLISHED"
}
2. 查“这个对象还有多少钱”
POST /api/budget/v1/balance/query
{
"version": "2026_BASELINE",
"members": {
"ENTITY": "HuaweiCloud",
"PROJECT": "PRJ-A001",
"COST_CENTER": "CC-ENG",
"ACCOUNT": "680101",
"PERIOD": "2026-09"
}
}
返回:
{
"budget": 800000,
"committed": 200000,
"obligated": 100000,
"actual": 100000,
"available": 400000
}
前者是主数据查询,后者是预算执行/余额查询。
五、如果做迁移/治理,实际会怎么查
从 EBS / SAP / 金蝶 / 用友迁到 MetaERP 时,主数据查询通常用于:
1. 查维度成员是否齐全
PROJECT / WBS / COST_CENTER / CHANNEL 是否都在 MDM 中
2. 查预算池是否覆盖业务对象
PRJ-A001 有没有项目预算池版本
3. 查控制规则是否完整
项目+成本中心+科目 是否配置了 HARD/SOFT 规则
4. 查“孤儿单据”
有 PR 项目号,但主数据里没项目维度成员
5. 查版本状态
DRAFT 不控,PUBLISHED 才控
典型治理 SQL 思路:
SELECT pr.project_code
FROM pr_lines pr
LEFT JOIN dim_member proj
ON proj.dimension='PROJECT'
AND proj.member_code=pr.project_code
WHERE proj.member_code IS NULL;
——这就是“通过业务单据反查主数据缺口”。
六、一句话总结
MetaERP 预算主数据查询的本质:
不是查一张预算表,而是查“维度空间是否被定义、版本是否发布、规则是否覆盖”。
用户走界面,集成走 API,治理走元数据/数仓,控制时由单据解析器隐式查询。


