人工智能时代动态表单高阶方案:如何灵活布局
2026-08-17 3452149
2026-08-17 0
处理Headless 指标解析原理这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。
前文介绍了如何进行建模、如何创建指标;本文主要介绍基于度量,已有指标,原始字段三种模式定义新指标后,如何对其进行解析转换成查询引擎可执行的SQL语义。
原子元素和指标
原子元素:在模型已经定义好能够被模型识别的字段和度量。
指标:由原子元素通过SQL表达式定义。
衍生指标: 由指标通过SQL表达式定义。
解析过程
Headless接收到由Chat发来的SQL查询时,主要通过指标识别-定义拆解-指标替换三个步骤进行解析。
识别:通过对SQL进行解析,识别出查询中所用到的指标。拆解:通过指标的元数据定义,将指标拆解成下一层的指标或者原始定义。替换:当拆解到最底层原子的定义,无法继续往下拆解时,使用原子定义对指标进行替换。聚合方法的处理:由于LLM给出的指标聚合方法可能和指标定义的不一致,目前主要分两种情况进行处理
(1) 基于单一度量创建的指标,聚合方法通过以下方式依次决定。a. 通过调用参数AggOption指定,其中NATIVE将忽略语义模型中度量的聚合方法,采用SQL或者请求数据中定义的方法。b. AggOption为DEFAULT将采用语义模型中度量的聚合方法,语义模型中时间维度的聚合粒度为None, 则不采用度量的聚合方法。(2) 基于多个度量,字段,指标创建的指标,其聚合方法以定义的为准,忽略LLM生成的SQL中的聚合方法。以下通过一个例子进行说明
指标 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)表达式引用的字段,度量,指标需要从待选列表中选择,否则解析时无法识别到引用的元素时,指标将无法正常替换。