返回正文目录

第十七章实操记录:时间分析与窗口边界

本文为 0.1.30 历史实操记录。#152—#154 的最新修复验收见0.1.35 复测记录,旧异常预期不用于验证新发行版。

2026-10-21。进入高级篇时间分析,复用第十一章模型。本轮实际调用公开 CLI,未新增或修改模型、字典、数据源、Bundle 或数据库;没有升级、重启服务。正文为含待修复部分的初稿,滚动窗口尚未完成可用性验收。

环境

http://127.0.0.1:18067,Namespace chinook,命名数据源 chinook-sqlite,Chinook v1.4.5 SQLite。Launcher 0.1.30 / CLI 0.1.25;进程及 JAR SHA256、实际 SQLite 路径见 environment.json。capabilities 为 Java / foggy-runtime-api/v1 / schemaVersion 2026-06-06 / none-dev-test-only,匿名查询,Console/FAP 未开启。

先获取 capabilities、实时描述 ChinookInvoiceTimeQueryModel,确认字段、默认 SUM 与日期类型;请求均从已公开字段构造。timeWindow 用公开 CLI payload,先 validate 再 execute。校验失败的请求不执行,SQL/源码仅用于诊断与独立核对,不作为绕过语义层的问数结果。

22 项检查的分类

分类 用例 结果
11 项教学查询正确 01 mom、02 yoy、10 LAG、12 日 YTD、13 日 MTD、14 LAG 缺口、15 跨年 mom、16 缺上期、17 空期间、19 跨年 YTD、20 跨月 MTD 逐期/逐日独立核对
2 项旧查询回归 21 账单汇总、22 明细汇总 477.53 / 83 / 47;477.53 / 447 条 / 数量 447
2 项预期校验拒绝 11 LAG 嵌套 SUM、18 rolling_7d + month WINDOW_NESTED_AGGREGATE_UNSUPPORTED;TIMEWINDOW_GRAIN_INCOMPATIBLE(外层 QUERY_VALIDATE_FAILED)
2 项查询结构受限 03 月度 YTD、04 只选日期的日 MTD 缺少内部引用字段,校验拒绝,不执行
5 项执行口径异常 05 rolling7、06 rolling30、07 日 YTD 带 value、08 日 MTD 带 value、09 有 padding slice 的 rolling7 执行成功但不满足展示范围或自然日口径,未计为通过

独立基线从只读 SQLite Invoice 原行按日期、月份累加 Decimal,不使用引擎生成的窗口值推导预期。全部模型资源与数据摘要前后相同,原始 before 哈希保留。

可用写法与验收值

当前发现的问题

累计查询内部字段引用

03:grain=month, comparison=ytd,columns/groupBy 为 year/month,返回 QUERY_VALIDATE_FAILED:

derived query references unknown field 'invoiceDate$id' not present in source output schema

04:grain=day, comparison=mtd,仅选择日期/指标,返回同一外层错误码:

derived query references unknown field 'invoiceDate$year' not present in source output schema

补选日期、年、月且以完整期间 slice 取数,日粒度 YTD/MTD 可以执行并正确累计。月度 YTD 不能直接把分组换成日后称为同一个请求已修复;教材只教已验证结构。

累计/滚动的 value 未约束展示范围

05—08 均指定 timeWindow.value=[2012-11-15,2012-12-01),实际返回 354 个交易日期,从 2009-01-01 开始;按请求展示期间只有 3 个交易日期,351 行在期间外。同一 value 在 mom/yoy 已验证正常,不能将比较模式的结论套给全部窗口。

rolling_7d 按结果行取窗口

09 用额外 slice [2012-11-09,2012-12-01) 保留必要前置日期,仍复现:2012-11-27 近七个自然日 [11-21,11-27] 应为 3.96,实际为 4.95,包含 11-14 的 0.99。不是缺少前置六天数据造成的少算。

本地源码 TimeWindowExpander 的滚动路径采用 rollingRows,能解释观察到的结果,但源码 HEAD 不代替发行包内部版本。query explain 的 basis 为 RECOMPILED,不能把重新编译的描述当作该次实际执行 SQL 日志。判断以发行包公开查询响应与独立计算为准。

已按用户要求分别提交 #152、#153、#154,依次对应累计内部字段、窗口展示范围、自然日滚动算法;#153 关联原比较范围问题 #141。三份 issue 均附 0.1.30 环境、manifest/JAR 身份、自包含 TM/QM、完整 DSL、CLI 命令、预期/实际及关键结构化响应,已从 GitHub 读回核对。未修改引擎源码。

证据与复跑

注意:当前核对器同时确认已知错误仍能复现,不是“所有功能已通过”的验收。发行版修复后应更新异常用例预期,把自然日范围和累计展示范围改为正常断言;不能将修复后的不同结果误判为新故障。

提交正文、远端读回与编号见 提交记录。本批只提交三个明确问题,没有重开旧 issue 或进行源码修复。