Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions skills/lark-base/references/lark-base-data-query.md
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,8 @@ value 使用预定义关键字机制,第一个元素为字符串常量名称
> - **ExactDate 时区行为**:毫秒时间戳在实际筛选时会被转为**文档时区当天零点**,跨时区场景需注意日期可能偏移一天。
> - **范围型关键字**(`CurrentWeek`、`LastWeek`、`CurrentMonth`、`LastMonth`、`TheLastWeek`、`TheNextWeek`、`TheLastMonth`、`TheNextMonth`)仅支持 `is` 运算符。
> - **关键字大小写敏感**:`ExactDate`、`Today`、`CurrentWeek` 等首字母大写,写错大小写会导致校验失败。
>
> **本地日历范围边界**:`+data-query` 的 datetime 范围只有严格的 `isGreater` / `isLess`,不得把下界向前移动一天来模拟“包含起始日”,否则会把前一天的记录带入总体。对于可按日期重组的指标,可以移除有歧义的范围 filter,改为按日期字段作为 dimension、返回组成该指标且可合并的 measures,并显式设置 `pagination.limit=5000`;只有结果少于 5000 行时,才在本地按返回的日期值筛选并汇总到 `[start, next_start)`。结果达到上限或指标不能从日期维度结果准确重组时,返回统一 SOP 改走可完整导出的 NDJSON 路径,否则报告证据缺口。

*`attachment`*

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ lark-cli base +record-list \
["关联项目", "intersects", [{"id": "rec_xxx"}]], // 关联项目包含某个 record_id;intersects 表示包含数组中任意一条关联
["备注", "non_empty"], // 格子非空;判断格子为空改用 ["备注", "empty"]
["业务日期", "==", "ExactDate(2026-08-07)"], // 具体一天:按 Base 时区匹配 2026-08-07 当天
["发生时间", ">", "ExactDate(2024-01-31 23:59:59.999)"], // 日期不支持 >=;用 > 前一天最后一毫秒表达含当天的下界
["发生时间", "<", "ExactDate(2024-03-01 00:00:00)"] // 2024 年 2 月范围上界:小于 3 月 1 日零点
["发生时间", ">=", "ExactDate(2026-08-01)"], // +record-list 支持 >=;半开区间直接使用目标周期首日
["发生时间", "<", "ExactDate(2026-09-01)"] // 半开区间上界使用下一周期首日
]
}
```
Expand All @@ -64,8 +64,10 @@ lark-cli base +record-list \
1. 每次读取使用任务所需的最小投影,并包含 JOIN、解释、回查或写入需要的业务 key。
2. 全局结论以 `has_more=false` 的完整导出或 Cloud 聚合结果为依据;`has_more=true` 时继续收敛单表谓词或选择 Cloud 路径。
3. 确定性分析选定一个分析引擎直接读取 NDJSON;模型上下文仅接收预览或最终小结果。
4. Base 标量空值很常见;聚合前按用户口径确定空值是排除、按零计入还是进入分母。用户未指定且不同处理会实质改变结论时,说明空值数量、采用的口径及其影响;任务涉及业务键、展开、JOIN 或金额分摊时,同样明确目标粒度及与口径直接相关的重复或总量守恒。
5. 最终结果保留真实表、查询范围和计算口径,展示用户可读字段;内部 ID 用于连接或定位。
4. 聚合或派生分析允许先读取 schema 和有限样本探索;在第一次用于支撑结论的计算前,按每个输出序列锁定数据源、统计总体、度量与聚合、分组,以及仅在适用时锁定时间口径和公式。用户明确指定的口径优先;多个合理候选会影响结果时先说明差异并消歧,不得依据字段名称建立通用业务优先级。
5. 主计算、校验和最终答案复用同一口径;口径变更后重新计算受影响结果。用户明确要求多个口径或指标时,分别作为独立输出序列呈现和比较;只有分析过程另行提出的替代口径才作为明确标注的补充或诊断,不得静默替换数据源、字段、过滤条件、日期或公式,也不能混入任一主序列的趋势和结论。
6. Base 标量空值很常见;聚合前按用户口径确定空值是排除、按零计入还是进入分母。用户未指定且不同处理会实质改变结论时,说明空值数量、采用的口径及其影响;任务涉及业务键、展开、JOIN 或金额分摊时,同样明确目标粒度及与口径直接相关的重复或总量守恒。
7. 最终结果保留真实表、查询范围和计算口径,展示用户可读字段;内部 ID 用于连接或定位。

## 复用本轮 NDJSON

Expand Down Expand Up @@ -164,6 +166,10 @@ Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否

例如,`2026-03-20T23:30:00.000-05:00` 与 `2026-03-21T12:30:00.000+08:00` 表示同一时刻;前者若是来源 Base 的值,本地日报归入 3 月 20 日,而时长或排序计算应把它解析为绝对时刻。只构造任务实际需要的日期表示,并在分析引擎中使用具备 datetime 功能的列。

连续日历区间分桶时,从用户请求的范围和粒度生成相邻、不重叠的半开区间 `[start, next_start)` 并保留空桶;上界使用下一周期首日,不能把本周期最后一天复用为下一周期起点。空桶输出 0、无数据或约定填充值,由已锁定的度量和公式决定。

使用 `+data-query` 时,日期 operator、`ExactDate` 以及无法直接表达本地日历边界时的精确恢复路径以 [lark-base-data-query.md](lark-base-data-query.md) 为准;恢复路径不适用时,按上文的谓词探测与 NDJSON 路由完整导出,再用序列化值中的本地日期分桶。无法完整返回或精确表达时,标记证据缺口,不得通过猜测时区或边界补出结果。

## 读取与关系建模

仅在 SOP 已选择 Python 路径后,按实际实现方式只读一份示例:
Expand All @@ -179,6 +185,13 @@ Agent 上下文曾下载过当前表的 NDJSON 时,按以下规则判断是否

## 常见分析模式

### 聚合、比率与校验

- 比率或比值分别定义分子和分母的数据源、统计总体、过滤条件及对齐维度;若指标定义为某总体中的命中率,分子总体应是分母总体的子集。分母为 0 时按用户或指标的明确约定处理;未定义时输出“无数据/不适用”,不自行补成 0% 或 100%。存在多个合理分母时先消歧,不得自行补全业务定义。
- 在把结果视为完整前先校验输入覆盖:确认每个导出范围的 `records_count` / `has_more` 符合已锁定总体;多表 JOIN 记录各输入的业务 key 覆盖以及匹配与未匹配业务 key 数量;日历分桶抽查范围边界记录,并在聚合函数允许时将分桶结果与同口径全区间结果对账。未匹配项或差异可能影响目标指标时,先修正范围、关联或计算;未修正的结果不能支撑完整结论。
- 校验方式服从已锁定的聚合函数和公式:互斥且覆盖完整范围的 `sum` / `count` / `count_all` 可将分桶值求和;全区间 `avg` 使用 `sum + count` 加权或独立聚合;全区间 `min` / `max` 分别取各桶极值的最小值 / 最大值;全区间 `distinct_count` 独立计算,不能用分桶值之和校验;只有总体人口率用汇总后的分子与分母重算,宏平均、加权平均等按已锁定公式校验。所有比较使用未舍入值。
- 只有用户要求解释、结果异常或同口径校验失败时才做 drill-down;选择能直接分解当前指标的维度,并确认子项与父级口径一致。drill-down 不作为常规交付门禁;无法完成必要校验时输出已确认事实和证据缺口,不给出无依据的完整趋势或全局结论。

### 单表简单筛选与统计:jq

NDJSON 每行是一条 record。单表短筛选、计数和简单聚合可直接用 jq;下面筛选“状态”包含“进行中”的记录,并统计记录数和金额合计:
Expand Down
Loading