Skip to content

【Bug】前端聚合分析 API 调用 measures 参数格式错误,导致后端 t.split 报错 #1160

@hotlong

Description

@hotlong

问题描述

当前 ObjectUI 前端调用 /api/v1/analytics/query 时,聚合参数 measures 传递的是对象数组(如:[{ field: 'amount', function: 'sum' }]),而后端 memory-analytics 服务期望为字符串数组(如:['amount_sum']'count')。目前格式不对,会导致后端 resolveMeasure 方法执行 t.split('.') 时 TypeError("t.split is not a function")。

影响范围

  • 所有仪表盘、报表、对象视图等涉及分组/聚合数值分析的前端功能
  • MSW/mock/本地开发环境下也会出现

复现方法

  1. 本地或 vercel 运行 ObjectUI 并打开任意含统计图表/仪表盘的页面
  2. 查询接口 /api/v1/analytics/query 返回 500,后端日志报错 t.split is not a function

分析

  • objectstack-ai/objectui 的 data-objectstack/src/index.ts 中 aggregate() 方法构造 payload 时:

    measures: [{ field: params.field, function: params.function }],

    应修改为后端 cube 的 measure key(如 amount_sum、count 等)。

  • buildCubesFromConfig 生成的 measure 命名规范为 ${field}_${function},计数为 count。

修复建议

  • 在 aggregate() 里构造 measures 时,转换为字符串格式:

    • 计数:'count'
    • 其它聚合:${field}_${function}
  • 例:

    const measureName = params.function === 'count' ? 'count' : `${params.field}_${params.function}`;
    payload.measures = [measureName];
  • dimensions 也应适配为字符串(如 groupBy 字段非 "_all" 时 ${resource}.${groupBy})。

受影响文件

  • packages/data-objectstack/src/index.ts

参考后端实现

附件

  • 典型报错:
    {
      "name": "TypeError",
      "message": "t.split is not a function",
      "stack": "TypeError: t.split is not a function\n    at tX.resolveMeasure ... "
    }

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions