Logicform 基础结构
Logicform 采用 JSON 结构描述一条查询请求。接口定义可在 semanticdb-core/src/logicform/logicform.ts 中找到,核心内容如下:
其中 PredItemType、GroupbyItemType、QueryType 等结构都会在后续章节单独说明。
字段与 SQL 的对应
扩展字段
having:对聚合结果进行二次过滤,语法与query相同,但字段名基于preds/groupby的别名,对应 SQL 的HAVING。详见下文"Having 子句"部分。limitBy:按维度限制每组返回条数,可与 ClickHouse 等数据库的LIMIT N BY field映射。representation:指定结果渲染方式(表格、图表、指标卡),用于前端展示策略,而非 SQL 语义。详见 Representation。entity_id:实体详情页的上下文,只有在查看某个实体记录时才会附带。
Having 子句
having 用于对聚合后的结果进行过滤,与 SQL 的 HAVING 子句对应。它与 query 的主要区别在于:
基本示例
筛选销售额超过 100 万的地区:
对应的 SQL:
复杂条件
having 支持与 query 相同的操作符:
与 query 的组合
执行顺序:
query过滤 2024 年的数据- 按
地区分组并计算销售额 having过滤销售额 > 100 万的地区
书写约定
- Logicform 必须是一个合法的 JSON 对象,键名使用英文。
- 在业务建模阶段为字段配置的别名/翻译会直接出现在 Logicform 中,便于跨团队协作。
- 所有字段都支持 嵌套写法(例如
query中可嵌套子 Logicform),确保复杂算子也能表达。
了解了整体框架后,可以继续阅读:
- 指标(Pred):如何编写指标及常见算子。
- 筛选(Query):MongoDB 风格的条件表达。
- 分组(Groupby):维度分组与层级。
- 排序与分页:返回顺序控制。

