Skip to content

docs: /analytics/query 的响应示例给 data.fields[] 标了 label / format —— 运行时只发 { name, type } #6369

Description

@hotlong

在实现 #6291(同一示例的 measure 拼写)时顺带查到,先于该 PR 存在,不由它引入。按 Prime Directive #10 独立立单,不在 #6291 的 PR 里顺手改(#6291 的评审面是 measure 拼写,本条是响应描述符的键集,两件事)。

位置

content/docs/api/data-api.mdx —— POST /analytics/query响应示例,data.fields[] 三个条目:

{ "name": "industry", "type": "string", "label": "Industry" },
{ "name": "revenue_sum", "type": "number", "label": "Revenue Sum", "format": "$0,0" },
{ "name": "count", "type": "number", "label": "Count" }

(revenue_sum#6291 的 PR 刚改正的拼写;label / format 这一条与那次改动无关,改前改后都在。)

事实面(实测)

查询结果的 fields[] 由五处产出,全部只发 { name, type },没有 label,也没有 format:

file:line 产出
packages/services/service-analytics/src/strategies/native-sql-strategy.ts:794 fields.push({ name: dim, type: d?.type || 'string' })
packages/services/service-analytics/src/strategies/native-sql-strategy.ts:799 fields.push({ name: m, type: 'number' })
packages/services/service-analytics/src/strategies/objectql-strategy.ts:1179 同上(维度)
packages/services/service-analytics/src/strategies/objectql-strategy.ts:1183 同上(度量)
packages/services/service-analytics/src/dataset-executor.ts:893 / 932 / 1055 { name, type: 'number' }
packages/services/service-analytics/src/preview-evaluator.ts:251-254 { name, type }

实跑取证(worktree 内 pnpm --filter "@objectstack/service-analytics..." build 后,直接驱动 built dist 的 AnalyticsService,喂文档里那条 query):

FULL fields = [
  { "name": "industry",    "type": "string" },
  { "name": "revenue_sum", "type": "number" },
  { "name": "count",       "type": "number" }
]

即文档承诺的 label / format 两个键运行时一个都不发。

影响

照文档写客户端的人会去读 data.fields[i].label 渲染表头、读 format 做金额格式化,拿到的是 undefined。不像 #6291 那样当场 400,而是安静地渲染出空表头 —— 属于「文档承诺了不存在的字段」。

注意 label / format 确实存在于 Cube/Metric 的定义面(packages/spec/src/data/analytics.zod.ts:72format),GET /analytics/meta 发的就是那一层;两者被文档混成了一层。

两个修法方向(需要裁定,故不自行选)

  • (a) 文档面:把响应示例里的 label / format 删掉,并写明「显示名/格式在 GET /analytics/meta 的 cube 定义里取,不在查询结果里」。零运行时改动,契约照实描述。
  • (b) 运行时面:让查询结果的 fields[] 带上 cube 已声明的 label / format。这是新增能力,要按启动期聚焦原则先问有没有真实业务拉动(谁在读这个键),不能因为文档写了就补。

倾向 (a):文档描述现状是无条件正确的;(b) 是能力扩张,应由真实消费方拉动而不是由一处文档笔误反向定义。

查重

搜过本仓 open issue / PR:analytics fields label format / data-api.mdx analytics response / AnalyticsResult field descriptor / analytics query 文档 示例 响应 —— 无同题单。#6291 是同一示例的 measure 拼写面,不同事实。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions