← 返回 技术博客

技术文章

AI 问数为什么必须先治理指标:HQL 与 Headless 语义层

说明指标语义层如何用 HQL 统一口径、权限和血缘,并通过 Headless 接口为 ChatBI、Data Agent 与业务系统提供可信上下文。

2026/08/26技术博客HENGSHI10 分钟阅读
HQL指标语义层Headless BIChatBIData Agent
AI 问数为什么必须先治理指标:HQL 与 Headless 语义层

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:为什么需要指标语言?

HQL与传统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为企业带来的核心价值:

  1. 统一口径:消除跨团队、跨系统的指标定义分歧,建立数据信任基座
  2. 可追溯治理:从指标定义到数据消费的完整血缘追踪,提升合规能力
  3. AI-ready架构:为ChatBI与AI Agent提供准确、稳定的业务语义上下文,大幅提升智能化应用的可用性

5.2 未来演进方向

指标语义层未来演进方向

5.3 行业落地案例参考

指标语义层在不同行业的落地侧重各有不同:

指标语义层行业落地案例

以电商行业为例,指标语义层的典型落地场景是大促期间的实时指标看板。在”双11”等大促活动中,运营团队需要实时监控GMV、订单量、客单价等核心指标,同时还需要与去年同期进行同比分析。没有指标语义层时,数据团队需要提前数周准备SQL脚本和报表,且活动期间的临时分析需求难以快速响应。引入指标语义层后,所有核心指标都已预定义为HQL,运营团队只需通过自然语言提问,即可获得实时数据对比分析。

5.4 给技术决策者的建议

  • 从业务价值出发:指标语义层建设不是技术项目,而是数据治理变革。建议先与业务部门对齐核心指标清单,确保技术投入有明确的业务回报
  • 从小范围试点:选择高频、高价值指标(如核心营收指标)优先建设,快速验证ROI,再逐步扩展到全量指标
  • 重视变更管理:口径统一需要跨部门协作,技术团队需主动推动对齐,建立指标变更的审批流程和通知机制
  • AI能力前置:新建平台务必将AI-ready作为架构约束,而非后期叠加。指标定义中应包含同义词、自然语言描述等AI消费所需的元数据
  • 持续迭代而非一步到位:指标语义层是”活的”基础设施,需要随着业务发展持续演进。建议建立指标健康度监控机制,定期检查口径一致性和使用覆盖率

资料与核验说明

内部资料用于梳理衡石能力与工程方法;竞品和版本信息按2026年8月26日可访问的官方页面复核。产品功能会受版本、地区、授权和部署模式影响,正式采购与发布前应再做一次现场确认。

HENGSHI SENSE产品与技术白皮书

HENGSHI SENSE

丰富的资源 完整的生态

邀您成为衡石伙伴

立即加入

企业级部署、产品集成与试用咨询均可快速响应