返回正文目录

0.1.38:Pivot 在公开校验入口被普通 columns 检查拦截

2026-10-24 更新:已在 Launcher 0.1.39 复测修复。 原始请求通过 CLI 与公开 HTTP 校验和执行,逐格、合计和派生指标通过独立核对;当前实操。下文保留 0.1.38 的原始失败记录。

2026-10-23。本地复现与诊断,已提交 引擎 issue #162,标签 bug。提交后已回读核对,正文包含实际请求/响应、CLI 退出码、Runtime 日志、模型与闭包数据、同版源码定位及修复验收要求。提交记录。

环境

最小复现

先 describe 确认 support$id、yearMonth 和 invoiceAmount 已公开。保存以下 payload:

{
  "pivot": {
    "rows": ["support$id"],
    "columns": ["yearMonth"],
    "metrics": ["invoiceAmount"],
    "outputFormat": "flat"
  },
  "slice": [
    {"field": "invoiceDate", "op": "[)", "value": ["2012-10-01", "2012-12-01"]}
  ]
}

在项目根目录执行:

lab/tools/cli/Scripts/foggy-runtime.exe --output json --base-url http://127.0.0.1:18067 --namespace chinook-multidim query validate ChinookSupportPivotQueryModel --payload lab/multidim/queries/series-24-minimal.json

预期: 按 Pivot 合同校验行轴、列轴、指标与过滤,不要求普通查询的 columns。非法组合应返回具体 Pivot 诊断。

实际: CLI 退出码 2,success=false、QUERY_VALIDATE_FAILED、phase=query.validate、safeToAutoRepair=false,原始错误为“请指定查询字段”。提交 issue 前重新核对原始 HTTP 字节与 JSON Unicode,确认响应中文正常;此前看到的乱码来自终端输出编码,并非服务端错误响应损坏。

同一 payload 直接 POST 到公开 /api/v1/query/ChinookSupportPivotQueryModel/validate,带 X-NS: chinook-multidim,HTTP 200、信封 success=false,同样报错。由此排除 CLI 丢弃 Pivot 字段造成的差异。

9 个文档内形状均在相同位置阻塞:最小矩阵、双行轴、grid、小计/总计、轴 TopN、行树、parentShare、baselineRatio first/last。它们没有进入 execute,不能据此判断 Pivot 计算本身正确或错误,也不能把这 9 项都计作独立引擎 BUG。

失败位置

核对与发行包提交完全相同的本地源码,未修改或重新编译引擎:

因此这是校验入口没有覆盖 Pivot 请求模式;给请求补顶层 columns 会违反已公开的互斥合同,不作为修复方案。没有跳过校验强行执行,也没有改用私有入口。

请求、响应与日志

修复后验收

先跑最小校验,再验证每格、换轴总额、缺组合、总计范围、TopN 与树形输出。派生指标另核对父级分母、筛选影响、首末基准、空分母与缺失基准;不以 validate 变绿替代执行验收。

verify-chapters-23-25.py 在未来校验通过时会报告 acceptance-pending,要求补齐真实响应形状的逐格断言;不会自动把尚未核对的 Pivot 执行计为通过。