首页
看点啥
插画图片
首页 看点啥 Headless 指标解析原理

Headless 指标解析原理

2026-08-17 0

处理Headless 指标解析原理这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。

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

Headless 指标解析原理

原子元素和指标

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

指标:由原子元素通过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)表达式引用的字段,度量,指标需要从待选列表中选择,否则解析时无法识别到引用的元素时,指标将无法正常替换。

    喜欢(0)
    猜你喜欢