@guandata/guanmetric 0.1.12 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## @guandata/guanmetric 0.1.13 - 2026-09-03
4
+
5
+ - 复合指标创建和编辑会校验公式上游类型,只允许原子指标或复合指标,阻止衍生指标、快捷引用指标和自身引用进入公式。
6
+ - 标准模板会按引用对象的真实类型补充原子或复合指标,不再把缺失引用一律补成原子指标;涉及衍生语义时提示改模并要求确认。
7
+ - 改进 Windows npm 全局安装环境下的 CLI 执行器定位。
8
+
3
9
  ## @guandata/guanmetric 0.1.12 - 2026-09-01
4
10
 
5
11
  - 新增业务字典目录树、查询、新建、原地编辑和删除能力,支持业务属性筛选、dry-run 和关联指标影响确认。
package/README.md CHANGED
@@ -38,6 +38,12 @@ guanmetric metric-tree update-config <metric_tree_id> --file metric_tree_config.
38
38
 
39
39
  ## 版本更新
40
40
 
41
+ ### @guandata/guanmetric 0.1.13
42
+
43
+ - 复合指标公式会校验上游类型,阻止衍生指标、快捷引用指标和自身引用。
44
+ - 标准模板按真实类型补充原子或复合指标;涉及衍生结果时会提示改模并要求确认。
45
+ - 改善 Windows npm 全局安装场景下的 CLI 执行器定位。
46
+
41
47
  ### @guandata/guanmetric 0.1.12
42
48
 
43
49
  - 新增业务字典目录树及增删改查,支持业务属性筛选、dry-run 和删除影响确认。
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guandata/guanmetric",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "观远 BI 指标写操作工具 - 指标创建编辑删除、指标目录、公共维度、Excel 标准化",
5
5
  "bin": {
6
6
  "guanmetric": "bin/run.js"
@@ -37,6 +37,7 @@
37
37
  "node": ">=14"
38
38
  },
39
39
  "publishConfig": {
40
- "registry": "https://registry.npmjs.org/"
40
+ "registry": "https://registry.npmjs.org/",
41
+ "access": "public"
41
42
  }
42
43
  }
@@ -57,7 +57,7 @@ guanmetric fetch POST /api/metric-platform/metrics/composite-metrics --file comp
57
57
 
58
58
  标准 Excel 第一张固定为 `汇总` sheet,用于给用户总览本次待创建指标总数、按类型计数、指标名称、指标类型、所在模板、关键来源、行状态和问题说明;创建 payload 仍以各指标类型模板 sheet 为事实源,不从 `汇总` sheet 创建。
59
59
 
60
- 生成复合指标模板时,如果 `计算公式` 引用的 `[指标名]` 不在原子指标模板中,agent 必须补充同名原子指标行,保证创建时先有基础原子指标,再创建复合指标。
60
+ 生成复合指标模板时,`计算公式` 的每个引用都必须解析为已上线或本批先创建的原子指标/复合指标。复合指标不能引用衍生指标或快捷引用指标;如果引用对象不在模板中,先判断它应建为原子指标还是复合指标并补充对应行,不要一律补成原子指标。若业务公式确实要组合最近 N、累计、期末值等衍生结果,按 `metric-derived-mutation.md` 评估组合衍生,并向用户说明改模后的业务语义。
61
61
 
62
62
  生成衍生指标模板时,如果 `衍生自` 指标不是已明确存在的线上指标,而是本批也要创建的指标,必须在标准模板中补充对应的原子指标或复合指标行;信息不足时先补行并在该基础指标行的 `问题说明` 中列出缺失的数据集、来源字段、聚合方式、计算公式、适用维度等。不要等到创建计划阶段才临时新增基础指标。
63
63
 
@@ -46,7 +46,7 @@
46
46
  - 先用 `guancli metric search <关键词> -d <projectId> -f json` 查询公式中的指标,再用 `guancli metric get <metric_id> --brief` 核对名称、类型、状态和适用维度。
47
47
  - 如果用户只提供数据集字段级公式,先询问是否要创建复合指标。用户确认后,再识别公式里的基础度量,创建或复用基础原子指标,并把公式改写为 `[metricId]`。
48
48
  - 如果输入来自标准 Excel,字段级公式需要读取 `公式来源数据集ID` / `公式来源数据集名称` 和 `公式字段映射`。没有这些映射时,不要根据 `repr / total_buyer` 这类裸 token 猜测字段或指标;应要求用户补齐或确认。
49
- - 公式只能引用数值型指标;不要引用当前正在编辑的指标本身。
49
+ - 公式只能引用数值型原子指标或复合指标;不要引用衍生指标、快捷引用指标或当前正在编辑的指标本身。创建计划和提交前都要读取引用指标详情并核对 `subType`。
50
50
  - 公式支持 `+`、`-`、`*`、`/`、括号、数字和 `[指标ID]`;不要主动生成函数、窗口函数或 SQL 片段。
51
51
  - 公式中的 `[xxx]` 会被后端解析为上游指标 ID,并参与循环引用校验。
52
52
  - 如果用户用中文名描述公式,先转换成 ID 公式,再把“中文公式”和“ID 公式”都展示给用户确认。
@@ -58,7 +58,13 @@
58
58
  | `SUM([销售额字段]) / COUNT([订单ID字段])` | 先建“销售额”“订单数”原子指标,再建复合指标 `[metric_sales] / [metric_order_count]` |
59
59
  | `SUM([归因销售额字段]) / SUM([广告花费字段])` | 先建“归因销售额”“广告花费”原子指标,再建复合指标 ROAS |
60
60
  | `SUM([点击量字段]) / SUM([曝光量字段])` | 先建“点击量”“曝光量”原子指标,再建复合指标 CTR |
61
- | `COUNT(CASE WHEN ... THEN 1 ELSE NULL END) / COUNT([ID字段])` | 先判断分子是否应建为条件计数原子指标或业务限定衍生指标,再创建复合比率指标 |
61
+ | `COUNT(CASE WHEN ... THEN 1 ELSE NULL END) / COUNT([ID字段])` | 优先把分子建为条件计数原子指标,再创建复合比率指标;业务限定衍生指标不能作为复合指标上游 |
62
+
63
+ 如果用户给出的公式依赖衍生指标,不要把它直接提交为复合指标:
64
+
65
+ - 组合“最近 N、累计、期末值”等受支持衍生结果时,评估改建为组合衍生指标。
66
+ - 表达“某个复合口径的同比/环比”时,通常先创建原子/复合基础口径,再基于该复合指标创建普通衍生指标。
67
+ - 两种改写可能改变业务语义,例如“比率的同比”不等于“两个同比增长率相除”;创建计划必须展示改模方案并让用户确认。
62
68
 
63
69
  ## 适用维度
64
70
 
@@ -117,7 +123,7 @@
117
123
 
118
124
  1. 先输出指标创建计划,按 `metric-mutation.md` 的“指标创建计划”要求展示环境、主题、目录、将复用或新建的基础指标、复合公式、共有适用维度/时间维度、格式、业务属性和保存方式。
119
125
  2. 用户确认计划后,生成 `/tmp/composite_metric.json`。
120
- 3. 本地/人工检查 JSON、公式引用指标、共有适用维度、必填业务属性。
126
+ 3. 本地/人工检查 JSON、公式引用指标、共有适用维度、必填业务属性;逐个读取引用指标详情,确认 `subType` 仅为 `ATOMIC` 或 `COMPOSITE`。`guanmetric fetch` 也会在提交前执行同一类型检查。
121
127
  4. 按 `metric-common-fields.md` 向用户摘要并确认。
122
128
  5. 用户确认后,不调用原子指标 `save-precheck`;复合指标 Web 创建没有 save-precheck。
123
129
  6. 提交真实创建:
@@ -280,7 +280,7 @@ agent 根据标准模板生成创建 payload 时,必须识别这些成组字
280
280
  - `原子指标模板` 行必须明确 `指标类型=原子指标`,并尽量填写数据集、计算方式、适用维度等原子指标字段。计算方式可以是 `来源字段` + `聚合方式`,也可以是 `字段表达式`,但不能同时填写两种。
281
281
  - 各衍生指标模板行必须明确 `指标类型=衍生指标`,并根据用户语义放入对应衍生 sheet;例如同比/环比放入 `同比环比衍生模板`,最近 N 天/周/月放入 `最近N衍生模板`,累计放入 `累计衍生模板`,期末值放入 `期末值衍生模板`,业务筛选限定放入 `业务限定衍生模板`,组合衍生放入 `组合衍生模板`。
282
282
  - `复合指标模板` 行必须明确 `指标类型=复合指标`,并尽量填写计算公式、引用指标、公式来源数据集和公式字段映射等复合指标字段。
283
- - 复合指标计算公式中的 `[指标名]` 必须能对应到已有指标或本次将创建的基础指标。若公式引用的指标名不在 `原子指标模板` 中,agent 应在 `原子指标模板` 中补充同名原子指标行,保证后续创建顺序为先创建基础原子指标,再创建复合指标。无法确定数据集、来源字段、聚合方式时先留空或写入最保守默认值,并让 CLI 在 `问题说明` 中暴露需要用户补齐的字段。
283
+ - 复合指标计算公式中的 `[指标名]` 必须能对应到已有或本批先创建的原子指标/复合指标,不能对应衍生指标或快捷引用指标。同批模板发现复合公式引用衍生指标时会把该行标为 `错误`;线上已有指标则在创建计划和 `guanmetric fetch` 提交前读取详情核对 `subType`。缺失依赖应按真实语义补到原子指标模板或复合指标模板,不要一律补成原子指标;无法确定建模方式或必要字段时,在 `问题说明` 中列出待确认项。
284
284
  - 衍生指标的 `衍生自` 也必须能对应到已有指标或本次将创建的指标。如果 `衍生自` 是本批也要创建的指标,必须在标准模板阶段就把它列入 `原子指标模板` 或 `复合指标模板`;创建计划阶段只核对和排序,不临时新增模板外基础指标。若该基础指标线上不存在且模板中也没有对应行,agent 必须回到模板补充基础指标行;补充所需信息不足时,在基础指标行或衍生指标行的 `问题说明` 中列出缺失的数据集、来源字段、聚合方式、复合公式、引用指标映射、适用维度或时间维度。
285
285
  - 客户表中的“表达式”“统计口径”“分子/分母”“达成率”“同比/环比”“最近 N”“累计”“期末值”“业务限定”“维度勾选”等语义,不应靠 CLI 写死列名猜测;agent 应结合整张表和上下文理解后写入标准字段。
286
286
  - 标准模板生成后必须检查 `汇总` sheet 的指标总数和衍生指标数,并结合 report.notes 检查是否存在衍生类型缺类。如果业务口径或用户输入中出现明显衍生语义,而对应衍生 sheet 为空,需要回到 `ai_mapped.xlsx` 重做或在交付摘要中明确说明这些语义为什么不创建衍生指标。
@@ -93,10 +93,12 @@ END
93
93
  ### 引用限制
94
94
 
95
95
  - 可引用已上线且当前用户可使用的原子指标、复合指标。
96
+ - 不要引用任何衍生指标;这类依赖需要按业务语义改建为组合衍生,或先创建复合基础口径再做普通衍生。
96
97
  - 不要引用当前正在编辑的指标本身。
97
98
  - 不要引用快捷引用指标(有 `linkMetricId` 的指标)。
98
99
  - 公式中的 `[xxx]` 会被后端识别为上游指标 ID,并参与循环引用校验。
99
100
  - 复合指标适用维度必须来自公式中引用指标的共有维度;没有共有维度时会报错。
101
+ - `guanmetric fetch` 会在创建/编辑复合指标前读取每个引用指标详情,只放行 `ATOMIC`/`COMPOSITE`;无法确认类型时停止提交。
100
102
 
101
103
  ### 避免生成
102
104
 
@@ -73,6 +73,7 @@ guanmetric template normalize <input.xlsx> --out <standard.xlsx> --report <repor
73
73
  - 原子指标如果填写 `字段表达式`,生成 `formulaField.fdFormula`,且不要同时传 `fdId/aggrType`。
74
74
  - 原子指标如果填写 `来源字段` + `聚合方式`,解析为 `fdId` + `aggrType`。
75
75
  - 复合指标必须把 `复合公式` 结合 `公式引用指标` 或前置创建结果改写成 `[metricId]` 形式。
76
+ - 复合指标的每个引用必须解析并核对为 `ATOMIC`/`COMPOSITE`;发现 `DERIVED`/快捷引用指标时停止计划,按业务语义改建为组合衍生或“先复合、后衍生”。
76
77
  - `适用维度`、`时间维度`、业务属性列都需要解析成接口字段,不要把中文名原样提交给后端。
77
78
  5. 读取启用的指标业务属性配置,补齐必填 `bizAttrs`。
78
79
  6. 生成“指标创建计划”,让用户 review;用户确认计划前,不生成最终提交 JSON,不执行 dry-run/precheck/真实创建。
@@ -93,6 +94,7 @@ guanmetric template normalize <input.xlsx> --out <standard.xlsx> --report <repor
93
94
  - 目标目录路径和目录 ID。
94
95
  - 将创建的指标清单,按依赖顺序排序;每个指标标明临时序号、名称、类型、保存方式。
95
96
  - 每个指标的核心口径:原子指标写数据集、字段、聚合方式或表达式;复合指标写中文公式和 `[metricId]` 公式草案;衍生指标写基础指标和衍生配置。
97
+ - 复合指标依赖核对结果:逐个列出引用指标的 ID、名称和 `subType`,只允许原子/复合指标。若原口径依赖衍生指标,必须展示替代建模及语义差异,确认前不生成提交 payload。
96
98
  - 衍生指标的 `衍生自` 解析结果:必须先检查标准模板中是否已有同名原子/复合指标行,再查询现有指标。若该 `衍生自` 是本批也要创建的指标,标准模板阶段就必须已经列出对应基础指标行;创建计划阶段只负责核对、排序和暴露缺失信息,不临时新增模板外指标。
97
99
  - 适用维度和时间维度;如果存在时间字段但时间维度为空,计划必须标记为待确认,不能进入提交步骤。
98
100
  - 数据格式、业务负责人、必填业务属性。