Headless 指标解析原理


前文介绍了如何进行建模、如何创建指标;本文主要介绍基于度量,已有指标,原始字段三种模式定义新指标后,如何对其进行解析转换成查询引擎可执行的SQL语义。

原子元素和指标

原子元素:在模型已经定义好能够被模型识别的字段和度量。

指标:由原子元素通过SQL表达式定义。

衍生指标:  由指标通过SQL表达式定义。


解析过程

Headless接收到由Chat发来的SQL查询时,主要通过指标识别-定义拆解-指标替换三个步骤进行解析。

Headless 指标解析原理

识别:通过对SQL进行解析,识别出查询中所用到的指标。
拆解:通过指标的元数据定义,将指标拆解成下一层的指标或者原始定义。
替换:当拆解到最底层原子的定义,无法继续往下拆解时,使用原子定义对指标进行替换。
聚合方法的处理:由于LLM给出的指标聚合方法可能和指标定义的不一致,目前主要分两种情况进行处理

(1)  基于单一度量创建的指标,聚合方法通过以下方式依次决定。

a.  通过调用参数AggOption指定,其中NATIVE将忽略语义模型中度量的聚合方法,采用SQL或者请求数据中定义的方法。
b.  AggOption为DEFAULT将采用语义模型中度量的聚合方法,语义模型中时间维度的聚合粒度为None, 则不采用度量的聚合方法。

(2)  基于多个度量,字段,指标创建的指标,其聚合方法以定义的为准,忽略LLM生成的SQL中的聚合方法。

以下通过一个例子进行说明

Headless 指标解析原理

指标 PV=PV0+PV1  

       PV0=SUM(case when f0='a' then f1 else 0 end) 

       PV1=m0+m1  

其中PV  PV0 PV1  为指标,f0,f1 为字段,m0,m1为度量

select sum(PV) from tb --PV是一个指标定义,原始模型中并不存在,直接交由引擎无法查询--解析后变成select ( SUM(case when f0='a' then f1 else 0 end) )+(SUM(m0)+SUM(m1)) from tb --f0,f1,m0,m1都是模型中存在的原始字段,查询可以直接识别

注意事项

1.  指标不可引用自身指标

指标的拆解存在一个循环递归的过程,引用自身指标进行定义会导致无法跳出拆解过程,目前后台界面对此做了限制,不允许引用一个非字段非度量定义的指标。

2.  表达式要符合规范

(1)表达式采用SQL进行定义,因此需要符合通用的SQL表达式语法,否则SQL解析失败,指标将无法正常替换。

(2)表达式引用的字段,度量,指标需要从待选列表中选择,否则解析时无法识别到引用的元素时,指标将无法正常替换。

Agent智能体langchain新闻资讯

Agent实战:构建一个天气查询Agent

2026-4-23 8:13:31

企业落地新闻资讯智能客服

Salesforce Einstein Copilot:企业生成式人工智能的最佳案例

2026-4-23 8:16:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
搜索