Article body
正文
同一家公司里,财务按开票计算收入,销售按签约计算收入,运营又按回款计算收入。ChatBI面对“本月收入是多少”时,如果只看到字段名,它很可能选择最像的一列并生成一条能运行的SQL。口径正确性仍需指标定义来保证。
指标是一份可执行合同
企业需要把指标名称、计算逻辑、时间粒度、适用维度、数据来源、负责人和权限写成可执行定义。HQL这类指标语言提供了比原始SQL更接近业务的表达层。分析师定义一次“活跃客户数”,看板、API和Agent都引用同一个指标对象。底层表结构变化时,平台维护指标实现,上层消费方继续使用稳定名称。
指标语义层还可以组织同义词与歧义词。业务人员说“营收”“收入”或“销售收入”时,系统先匹配候选指标,再根据部门、应用和历史使用记录缩小范围。无法确定时,Agent展示定义并请用户选择。这个过程把错误拦在SQL生成之前。
HQL提供受控的分析自由
SQL面向数据库结构,HQL面向业务语义。用户可以组合指标、维度、筛选和时间窗口,平台再把表达式编译到底层引擎。治理团队能够限制可用函数、检查维度兼容性,并记录指标之间的依赖关系。
时间分析最能体现语义层价值。同比、环比、滚动十二月和财年至今都包含日历规则。团队把这些规则封装进指标表达后,Agent不必在每次对话中重新猜测。查询结果也能追溯到指标定义与源字段。
Headless语义层服务多个入口
企业的数据消费入口远多于BI门户。CRM需要客户指标,供应链系统需要库存预警,移动端需要经营摘要,Agent需要查询与解释。Headless语义层通过API向这些入口提供一致的指标、权限和查询能力。界面可以变化,业务口径保持稳定。
这套架构也适合ISV。软件厂商把行业指标沉淀在自己的产品中,客户通过内嵌看板、ChatBI或工作流调用同一语义层。ISV可以控制用户体验,平台负责计算、权限和治理。
从十个指标开始
指标治理不需要一次覆盖全公司。团队可以选择一个经营主题,先定义十个高频指标,补齐负责人、口径、维度和权限,再让ChatBI只回答这一区域的问题。每次歧义、修正和失败查询都回到指标库处理。随着可信范围扩展,Agent可承担的任务也会增加。
工程细节与实施补充
一、引言:为什么企业需要指标语义层?
1.1 数据团队的三大痛点
在企业数字化转型过程中,数据团队通常面临以下困境:

1.2 指标语义层的核心理念
指标语义层(Metrics Semantic Layer)是一种元数据抽象层,它将业务指标的定义(口径)、计算逻辑(算法)、业务语义(维度、层级)与底层数据存储解耦,实现”一处定义、多方复用”的治理目标。
┌─────────────────────────────────────────────────────────────┐
│ 业务应用层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
│ │ 报表 │ │ ChatBI │ │ API │ │ AI Agent │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────────┬────────┘ │
└───────┼───────────┼───────────┼─────────────────┼──────────┘
│ │ │ │
└───────────┴─────┬─────┴─────────────────┘
▼
┌────────────────────────────────────────┐
│ 指标语义层 (Metrics Layer) │
│ ┌──────────────────────────────────┐ │
│ │ HQL 语义定义 │ 指标血缘 │ 权限 │ │
│ └──────────────────────────────────┘ │
└────────────────────────────────────────┘
│
┌─────────────────┴───────────────────────┐
▼ ▼
┌───────────────┐ ┌─────────────────┐
│ 数据湖/数仓 │ │ 关系型数据库 │
└───────────────┘ └─────────────────┘
图1:指标语义层架构示意
二、HQL:指标语义层的表达基石
2.1 什么是HQL?
HQL(Hengshi Query Language)是HENGSHI SENSE专有的指标定义语言,旨在用声明式语法表达复杂的业务指标逻辑。与传统的SQL嵌入业务逻辑不同,HQL将指标定义从数据查询中分离出来,使得指标具备独立性、可复用性和可治理性。
2.2 HQL核心语法要素
HQL的设计遵循”维度-指标-计算”的语义模型:
METRIC <指标名称> (
<维度定义>,
<指标定义>,
<计算逻辑>
)
示例1:基础GMV(商品交易总额)指标
METRIC gmv (
-- 维度声明
dimensions:
product_category, -- 商品类目
region, -- 地区
order_date -- 订单日期
-- 指标定义
metrics:
total_amount: SUM(order_items.amount), -- 原始销售额
order_count: COUNT(orders.id), -- 订单数量
avg_order_value: total_amount / order_count -- 客单价
-- 筛选条件
filter: order.status = 'completed'
)
示例2:复合指标:同比增长率
METRIC sales_yoy_growth (
dimensions: product_category, order_date, region
metrics:
current_sales: SUM(order_items.amount),
-- 通过时间偏移函数获取去年同期值
ly_sales: SAME_PERIOD_LAST_YEAR(current_sales),
yoy_growth_rate: (current_sales - ly_sales) / ly_sales * 100
filter: order.status = 'completed' AND order.order_date >= '2024-01-01'
)
2.3 HQL vs 传统SQL:为什么需要指标语言?

2.4 高级HQL:时间智能与窗口函数
-- 月度累计指标(Month-to-Date, MTD)
METRIC monthly_mtd_sales (
dimensions: product_category, region
metrics:
daily_sales: SUM(order_items.amount),
mtd_sales: WINDOW_SUM(daily_sales,
START_OF_MONTH,
CURRENT_DATE),
mtd_target_progress: mtd_sales / monthly_target * 100
filter: order.order_date >= '2024-01-01'
)
-- 移动平均(7日滚动)
METRIC rolling_7d_avg_sales (
dimensions: product_category
metrics:
daily_sales: SUM(order_items.amount),
rolling_7d_avg: WINDOW_AVG(daily_sales, -7, 0)
)
三、指标语义层的三大核心价值
3.1 价值一:统一口径:消除”数据分歧”
3.1.1 口径不一致的典型场景
在企业中,“DAU(日活跃用户)“可能有多种定义:
- 技术口径:当日有任意操作的UV
- 业务口径A:当日有订单的用户数
- 业务口径B:当日有付款的用户数
如果没有统一的指标定义层,各部门基于自己的理解出数,结论自然”各说各话”。
3.1.2 HQL的统一口径方案
-- 统一的DAU指标定义(技术口径)
METRIC dau (
dimensions: event_date, platform, channel
metrics:
active_users: COUNT_DISTINCT(users.id)
filter: user_actions.event_type IN ('page_view', 'click', 'purchase')
)
-- 统一的DAU指标定义(业务口径B:付款口径)
METRIC dau_paid (
dimensions: event_date, platform, channel
metrics:
paid_users: COUNT_DISTINCT(
CASE WHEN orders.status = 'paid'
THEN users.id END
)
base_metric: dau -- 继承基础指标结构
)
治理效果:
┌────────────────────────────────────────────────────┐
│ 统一口径前 统一口径后 │
├────────────────────────────────────────────────────┤
│ 运营报表:DAU=50万 运营报表:DAU=50万 │
│ 数据团队:DAU=48万 数据团队:DAU=50万 ✓ │
│ 财务系统:DAU=45万 财务系统:DAU=50万 ✓ │
│ 产品分析:DAU=52万 产品分析:DAU=50万 ✓ │
└────────────────────────────────────────────────────┘
3.2 价值二:可追溯治理:从定义到消费的完整链路
3.2.1 指标血缘追踪
指标语义层维护完整的血缘关系:
指标血缘示例:gmv → order_items → orders → order_items.amount
↓
依赖维度:product_category, region, order_date
↓
依赖指标:order_count, avg_order_value
↓
消费下游:销售大屏、老板驾驶舱、财务报表
3.2.2 指标主题(主题域)管理
HENGSHI SENSE支持指标主题功能,将相关指标归类到统一的主题域下,便于组织与管理:
-- 创建"电商交易"主题域
THEME ecommerce_trade (
description: "电商核心交易指标集合",
metrics:
- gmv -- 商品交易总额
- order_count -- 订单数量
- paid_users -- 付费用户数
- conversion_rate -- 转化率
- avg_order_value -- 客单价
owner: "电商事业部数据团队",
approval_workflow: enabled
)
3.2.3 权限与安全治理
-- 基于角色的指标权限控制
PERMISSION sales_metrics (
roles: ["sales_manager", "regional_director"],
allowed_metrics: ["gmv", "order_count", "paid_users"],
denied_metrics: ["cost_margin", "profit_margin"], -- 敏感指标
row_level_filter: region IN user.assigned_regions
)
3.3 价值三:AI-ready:为智能应用提供准确上下文
3.3.1 为什么AI需要指标语义层?
大语言模型(LLM)在数据问答场景中面临的核心挑战是语义理解歧义:
- 用户问:“昨天卖了多少?”
- AI可能理解为:GMV?订单数?商品件数?
- 传统方案:让AI直接理解数据库Schema
- 问题:Schema过于技术化,跨表Join逻辑复杂,AI容易”幻觉”
- 指标语义层方案:让AI理解业务指标语义
- 优势:指标定义即业务语言,语义明确,AI准确率大幅提升
3.3.2 HQL作为AI上下文协议
// AI Agent获取的指标上下文
{
"metrics": [
{
"name": "gmv",
"display_name": "商品交易总额",
"definition": "已完成订单的实付金额之和",
"dimensions": ["product_category", "region", "order_date"],
"filters": ["order.status = 'completed'"],
"data_type": "currency",
"unit": "元"
},
{
"name": "dau",
"display_name": "日活跃用户数",
"definition": "当日有任意行为的去重用户数",
"dimensions": ["event_date", "platform"],
"filters": [],
"data_type": "integer",
"unit": "人"
}
]
}
3.3.3 指标语义层支撑的ChatBI工作流
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户提问 │───▶│ 问数Agent │───▶│ 指标语义层 │
│ "GMV多少?" │ │ (NL→SQL) │ │ 口径匹配 │
└─────────────┘ └─────────────┘ └─────────────┘
│
┌────────────────────────┘
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 自然语言 │───▶│ HQL执行 │───▶│ 结果返回 │
│ 智能回答 │ │ 引擎 │ │ 图表展示 │
└─────────────┘ └─────────────┘ └─────────────┘
四、Data Agent:指标语义层的AI应用实践
4.1 实施路线图
┌─────────────────────────────────────────────────────────────┐
│ 指标语义层建设路线图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Phase 1: 指标梳理 (4-6周) │
│ ├── 业务调研与指标梳理 │
│ ├── 口径确认与标准化 │
│ └── HQL编写与平台录入 │
│ │
│ Phase 2: 平台建设 (6-8周) │
│ ├── 指标语义层平台部署 │
│ ├── 权限与治理体系配置 │
│ └── 数据源对接与验证 │
│ │
│ Phase 3: 应用推广 (4-6周) │
│ ├── 报表迁移与改造 │
│ ├── ChatBI集成与用户培训 │
│ └── Agent能力上线 │
│ │
└─────────────────────────────────────────────────────────────┘
4.2 指标定义规范
# 指标元数据规范示例
metric_schema:
required_fields:
- name # 英文标识(唯一)
- display_name # 中文展示名
- description # 业务定义
- category # 指标分类
- owner # 负责人
optional_fields:
- aliases # 同义词列表
- formula # 计算公式
- tags # 标签
- deprecation_notice # 废弃说明
validation_rules:
name:
- pattern: "^[a-z][a-z0-9_]*$"
- max_length: 64
display_name:
- max_length: 128
4.3 质量保障体系

五、总结与展望
5.1 核心价值回顾
指标语义层与HQL为企业带来的核心价值:
- 统一口径:消除跨团队、跨系统的指标定义分歧,建立数据信任基座
- 可追溯治理:从指标定义到数据消费的完整血缘追踪,提升合规能力
- AI-ready架构:为ChatBI与AI Agent提供准确、稳定的业务语义上下文,大幅提升智能化应用的可用性
5.2 未来演进方向

5.3 行业落地案例参考
指标语义层在不同行业的落地侧重各有不同:

以电商行业为例,指标语义层的典型落地场景是大促期间的实时指标看板。在”双11”等大促活动中,运营团队需要实时监控GMV、订单量、客单价等核心指标,同时还需要与去年同期进行同比分析。没有指标语义层时,数据团队需要提前数周准备SQL脚本和报表,且活动期间的临时分析需求难以快速响应。引入指标语义层后,所有核心指标都已预定义为HQL,运营团队只需通过自然语言提问,即可获得实时数据对比分析。
5.4 给技术决策者的建议
- 从业务价值出发:指标语义层建设不是技术项目,而是数据治理变革。建议先与业务部门对齐核心指标清单,确保技术投入有明确的业务回报
- 从小范围试点:选择高频、高价值指标(如核心营收指标)优先建设,快速验证ROI,再逐步扩展到全量指标
- 重视变更管理:口径统一需要跨部门协作,技术团队需主动推动对齐,建立指标变更的审批流程和通知机制
- AI能力前置:新建平台务必将AI-ready作为架构约束,而非后期叠加。指标定义中应包含同义词、自然语言描述等AI消费所需的元数据
- 持续迭代而非一步到位:指标语义层是”活的”基础设施,需要随着业务发展持续演进。建议建立指标健康度监控机制,定期检查口径一致性和使用覆盖率
资料与核验说明
内部资料用于梳理衡石能力与工程方法;竞品和版本信息按2026年8月26日可访问的官方页面复核。产品功能会受版本、地区、授权和部署模式影响,正式采购与发布前应再做一次现场确认。