现象
数据集(dataset)的维度解析只认 lookup 字段:同一次 POST /api/v1/analytics/dataset/query 里,lookup 维度返回目标记录的名称,user 维度返回原始用户 id。于是任何以「人」为轴的图表 / 报表,轴标签是一串 id,不是姓名。
同一个数据集的两次查询(应用对象 kpi_result:unit 是 Field.lookup('sys_business_unit'),person 是 Field.user()):
// dimensions: ["unit"]
{"rows":[{"unit":"客户成功部","avg_score":91.5},{"unit":"华东分公司","avg_score":106.12}, …],
"fields":[{"name":"unit","type":"string","label":"组织单元"}]}
// dimensions: ["person"]
{"rows":[{"person":"7zLYIwpX82If4BvtWGdx2FJeP1S3yyrE","avg_score":124.25},
{"person":"F8Ue761QN8IwpEXDcqjvmElGMrBxbEXs","avg_score":128.6}, …]}
两个字段都带 reference,差别只在 type:
Field.user({ label: '人员' }) // {"type":"user","reference":"sys_user","label":"人员"}
Field.lookup('sys_business_unit', { label: '组织单元' }) // {"type":"lookup","reference":"sys_business_unit","label":"组织单元"}
数据集侧把维度声明成 type: 'lookup' 不改变结果 —— 解析看的是对象字段的类型,不是维度声明。
最小复现
- 建一个对象,含一个
Field.user() 字段(例:person)与一个 Field.lookup() 字段(例:unit),各写入若干行;
defineDataset 声明两个维度分别指向这两个字段(type: 'lookup'),一个 avg measure;
POST /api/v1/analytics/dataset/query,dimensions: ["unit"] → 返回名称;dimensions: ["person"] → 返回用户 id;
- 把该数据集挂到 dashboard widget / report 上,人员轴显示的就是 id。
期望能力
user 字段作为数据集维度时,与 lookup 同样按 reference(sys_user)解析出显示名(sys_user 的 nameField),或提供一个显式的维度选项(如 displayField)让作者指定用哪一列显示 —— 现在 DatasetDimensionSchema 是 strict 的,只有 name / label / field / type / dateGranularity,应用侧没有任何声明式出口;能绕开它的只有「换一个本身存着姓名的列」,那要求应用把姓名反规范化进结果表。
平台版本
@objectstack/runtime / @objectstack/spec / @objectstack/cli 17.2.0(SQLite 驱动,单租户 dev 实例)。
上报来源:objectstack-ai/kpi 的看板「人员得分」与「到人得分」报表;应用侧按纪律不绕平台、不打补丁,当前用「结果记录名称(含姓名)」作展示维度顶着,平台补上后换回 person 维度。
现象
数据集(dataset)的维度解析只认
lookup字段:同一次POST /api/v1/analytics/dataset/query里,lookup维度返回目标记录的名称,user维度返回原始用户 id。于是任何以「人」为轴的图表 / 报表,轴标签是一串 id,不是姓名。同一个数据集的两次查询(应用对象
kpi_result:unit是Field.lookup('sys_business_unit'),person是Field.user()):两个字段都带
reference,差别只在type:数据集侧把维度声明成
type: 'lookup'不改变结果 —— 解析看的是对象字段的类型,不是维度声明。最小复现
Field.user()字段(例:person)与一个Field.lookup()字段(例:unit),各写入若干行;defineDataset声明两个维度分别指向这两个字段(type: 'lookup'),一个avgmeasure;POST /api/v1/analytics/dataset/query,dimensions: ["unit"]→ 返回名称;dimensions: ["person"]→ 返回用户 id;期望能力
user字段作为数据集维度时,与lookup同样按reference(sys_user)解析出显示名(sys_user的 nameField),或提供一个显式的维度选项(如displayField)让作者指定用哪一列显示 —— 现在DatasetDimensionSchema是 strict 的,只有name / label / field / type / dateGranularity,应用侧没有任何声明式出口;能绕开它的只有「换一个本身存着姓名的列」,那要求应用把姓名反规范化进结果表。平台版本
@objectstack/runtime/@objectstack/spec/@objectstack/cli17.2.0(SQLite 驱动,单租户 dev 实例)。上报来源:objectstack-ai/kpi 的看板「人员得分」与「到人得分」报表;应用侧按纪律不绕平台、不打补丁,当前用「结果记录名称(含姓名)」作展示维度顶着,平台补上后换回
person维度。