@guandata/guancli 1.0.33 → 1.0.35

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## @guandata/guancli 1.0.35 - 2026-06-17
4
+
5
+ - `metric by-dataset` 增强数据集下游指标查询,并补充指标创建/编辑参考说明。
6
+ - `login status` 使用服务端 profile 校验登录状态,减少本地缓存状态误判。
7
+ - 数据集字段输出增加 raw name、alias/displayName 疑似误用提示,便于 ETL 和指标配置前排查字段引用。
8
+
9
+ ## @guandata/guancli 1.0.34 - 2026-06-15
10
+
11
+ - `metric by-dataset` 支持按数据集 ID 反查直接原子指标,并沿指标血缘展开下游复合指标和衍生指标。
12
+
3
13
  ## @guandata/guancli 1.0.33 - 2026-06-09
4
14
 
5
15
  - `ds search` 支持按数据集 ID 精确解析,修复按 ID 搜索时无法稳定命中资源的问题。
package/README.md CHANGED
@@ -30,6 +30,7 @@ guancli ds execute-sql -inputs <ds_id> -sql 'SELECT * FROM `数据集名称` LIM
30
30
  # 旧版 public-api fallback 不支持 disable-cache;--limit 在非 raw 输出渲染前本地截断,--raw 保持后端原始响应
31
31
  guancli metric project
32
32
  guancli metric project 经营 -f json
33
+ guancli metric by-dataset <ds_id> -f json # 查询数据集直接原子指标及下游复合/衍生指标
33
34
  guancli page get <page_id>
34
35
  guancli card preview <card_id>
35
36
  guancli card preview <card_id> --dynamic-param "结束时间={{{today}}}"
@@ -38,6 +39,16 @@ guancli chatbi query --theme-name "经营主题" --message "最近30天营业收
38
39
 
39
40
  ## 版本更新
40
41
 
42
+ ### @guandata/guancli 1.0.35
43
+
44
+ - `metric by-dataset` 增强数据集下游指标查询,并补充指标创建/编辑参考说明。
45
+ - `login status` 使用服务端 profile 校验登录状态,减少本地缓存状态误判。
46
+ - 数据集字段输出增加 raw name、alias/displayName 疑似误用提示,便于 ETL 和指标配置前排查字段引用。
47
+
48
+ ### @guandata/guancli 1.0.34
49
+
50
+ - `metric by-dataset` 优先使用后端批量接口按数据集 ID 反查直接原子指标和下游复合/衍生指标,旧版 BI 会自动回退到本地扫描逻辑。
51
+
41
52
  ### @guandata/guancli 1.0.33
42
53
 
43
54
  - `ds search` 支持按数据集 ID 精确解析,修复按 ID 搜索时无法稳定命中资源的问题。
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guandata/guancli",
3
- "version": "1.0.33",
3
+ "version": "1.0.35",
4
4
  "description": "观远 BI 命令行工具 - 通过 API 操作 ETL、数据集、页面、表单等资源,并提供 ChatBI 问数/洞察能力",
5
5
  "bin": {
6
6
  "guancli": "bin/run.js"
@@ -15,6 +15,7 @@ compatibility: Requires Node.js 14+. Install via npm install -g @guandata/guancl
15
15
  - 用户需要对表单填报(Form)数据进行 CRUD 操作(查询/插入/更新/删除)。
16
16
  - 用户要直接用 ChatBI 主题做 L1 问数或 L2 洞察,而不是打开网页手工操作。
17
17
  - 用户要搜索指标、获取指标详情、查询指标数据、查看指标目录、执行指标树归因,或让你生成/解释指标泛化查询命令。
18
+ - 用户给出数据集 ID,想查看该数据集创建或影响到的所有指标,包括直接原子指标以及下游复合指标、衍生指标。
18
19
  - 用户要创建、新建、编辑或删除指标;当前指标写操作指引先覆盖原子指标、复合指标、衍生指标的创建和编辑前校验。
19
20
  - 用户要查询、新建、编辑、转移责任人或删除指标公共维度。
20
21
 
@@ -116,6 +117,7 @@ guancli 是 BI 资源的**查询分析入口**,并支持少量明确边界的
116
117
  关键规则:
117
118
 
118
119
  - 普通指标数据查询用 `guancli metric query <metric_id>`,可加 `--dim`、`--filter`、排序、列筛选、输出格式等。
120
+ - 按数据集反查指标用 `guancli metric by-dataset <ds_id>`;新版 BI 会走后端批量接口直接返回直接指标和下游指标,旧版 BI 会兼容回退为先定位使用该数据集的原子指标、再沿指标下游血缘展开复合指标和衍生指标。适合回答“这个数据集关联了哪些指标 / 改这个数据集会影响哪些指标”。如果已知指标主题,可加 `-d <metric_topic_id>` 缩小范围;需要结构化结果时用 `-f json`。
119
121
  - 只要传入 `--compare`、`--compare-value`、`--xtd`、`--last`、`--recent`、`--recent-base`、`--percentage`、`--percentage-dim`、`--rank-top`、`--rank-order`、`--rank-dim`、`--adv-calc-json` 任一参数,就进入指标泛化查询模式。
120
122
  - 泛化查询要求 BI 版本 `>= 8.2.1`;如需确认环境版本,先执行 `guancli server-version --profile <profile>`。
121
123
  - 当用户要创建或编辑原子指标、复合指标、衍生指标时,先读取 `references/metric-mutation.md` 判断类型,再读取 `references/metric-common-fields.md`,最后只读取对应类型文件:原子指标读 `references/metric-atomic-mutation.md`,复合指标读 `references/metric-composite-mutation.md`,衍生指标读 `references/metric-derived-mutation.md`。如果涉及原子指标表达式 `formulaField.fdFormula`、复合指标 `formula` 或组合衍生 `deriveSetting.formula`,必须同时读取 `references/metric-expression-rules.md`,按当前前后端支持的表达式形态生成。默认使用当前已登录环境,不询问 profile;按必填项、数据格式 `format` 和启用的指标业务属性配置逐步查询/确认,生成 JSON 文件并先做 dry-run/人工摘要。用户确认后仍需按 Web 同款保存前校验执行:原子指标上线前跑 save-precheck,编辑态跑 validate-update-impact;复合指标和衍生指标编辑态跑 validate-update-impact。校验通过或二次确认后才真实提交。
@@ -63,17 +63,31 @@
63
63
  - `SUM([fd_id])`、`COUNT([fd_id])`
64
64
  - 多个聚合项加减:`SUM([fd_a]) - SUM([fd_b])`
65
65
  - 条件聚合:`SUM(CASE WHEN ... THEN ... ELSE ... END)`
66
- - 一个顶层比值:`SUM([fd_a]) / COUNT([fd_b])` 或 `(SUM([fd_a]) + SUM([fd_b])) / SUM([fd_c])`
67
66
 
68
67
  不要把 `AVG/MAX/MIN/FIRST/LAST/ANY_VALUE` 主动写进 `formulaField.fdFormula`;如果用户要平均值、最大值、最小值,优先走“来源字段 + `aggrType`”。表达式中字段必须写 `[fdId]`,不要提交字段中文名。
69
68
 
69
+ ### 计算表达式确认
70
+
71
+ 遇到计算表达式时,不要直接替用户决定创建原子表达式还是复合指标。先说明两种方案并询问:
72
+
73
+ - 原子表达式:直接在当前数据集字段上生成 `formulaField.fdFormula`。
74
+ - 复合指标:先创建或复用表达式中的基础原子指标,再用 `[metricId]` 公式创建复合指标。
75
+
76
+ 用户选择复合指标后,再拆解基础度量。例如 `SUM([attributed_sales_fd]) / SUM([spend_amount_fd])` 可先创建或复用“归因销售额”“广告花费”两个原子指标,再创建复合指标:
77
+
78
+ ```text
79
+ [metric_attributed_sales] / [metric_ad_spend]
80
+ ```
81
+
82
+ 用户选择原子表达式,或明确要求“数据集字段表达式原子指标”时,才使用 `formulaField.fdFormula`。
83
+
70
84
  ## 信息收集
71
85
 
72
86
  如果用户只说“帮我创建一个原子指标”,先收集:
73
87
 
74
88
  1. 指标主题和保存目录。
75
89
  2. 来源数据集和来源字段。
76
- 3. 计算方式:来源字段 + 聚合方式,还是表达式;如果是表达式,按 `metric-expression-rules.md` 校验支持形态。
90
+ 3. 计算方式:来源字段 + 聚合方式,还是表达式;如果是表达式,先询问用户是否改用复合指标。用户选择原子表达式时,再按 `metric-expression-rules.md` 校验支持形态。
77
91
  4. 指标名称、业务口径、适用维度、时间维度、是否保存并上线。
78
92
  5. 数据格式:默认、数值、货币、百分比;如需指定,确认小数位、千分位、货币符号/前后缀、数量级单位、百分比是否除以 100。
79
93
  6. 责任人是否用当前登录用户。
@@ -140,28 +154,29 @@
140
154
 
141
155
  ## 创建步骤
142
156
 
143
- 1. 生成 `/tmp/atomic_metric.json`。
144
- 2. 先 dry-run:
157
+ 1. 先输出指标创建计划,按 `metric-mutation.md` 的“指标创建计划”要求展示环境、主题、目录、来源数据集/字段、聚合方式或表达式、适用维度/时间维度、格式、业务属性和保存方式。
158
+ 2. 用户确认计划后,生成 `/tmp/atomic_metric.json`。
159
+ 3. 先 dry-run:
145
160
 
146
161
  ```bash
147
162
  guancli metric create --file /tmp/atomic_metric.json --dry-run
148
163
  ```
149
164
 
150
- 3. 按 `metric-common-fields.md` 向用户摘要并确认。
151
- 4. 如果 `publish=true`,先跑 save-precheck:
165
+ 4. 按 `metric-common-fields.md` 向用户摘要并确认。
166
+ 5. 如果 `publish=true`,先跑 save-precheck:
152
167
 
153
168
  ```bash
154
169
  guancli fetch POST /api/metric-platform/metrics/atomic-metrics/save-precheck --stdin < /tmp/atomic_metric.json
155
170
  ```
156
171
 
157
- 5. 如果返回 `conflicts` 且非空,展示冲突指标、冲突口径、适用维度差异,等待用户二次确认。
158
- 6. 校验通过或二次确认后提交:
172
+ 6. 如果返回 `conflicts` 且非空,展示冲突指标、冲突口径、适用维度差异,等待用户二次确认。
173
+ 7. 校验通过或二次确认后提交:
159
174
 
160
175
  ```bash
161
176
  guancli metric create --file /tmp/atomic_metric.json -f json
162
177
  ```
163
178
 
164
- 7. 响应返回指标 ID 后回读:
179
+ 8. 响应返回指标 ID 后回读:
165
180
 
166
181
  ```bash
167
182
  guancli metric get <metric_id> --brief
@@ -32,6 +32,7 @@ guancli metric [command]
32
32
  | `project` | 获取指标主题列表 |
33
33
  | `search` | 搜索指标 |
34
34
  | `get` | 获取指标详情 |
35
+ | `by-dataset` | 按数据集 ID 获取直接和下游关联指标 |
35
36
  | `query` | 查询指标数据 |
36
37
  | `tree` | 获取指标目录树 |
37
38
  | `create` | 新建原子指标(JSON 文件驱动) |
@@ -97,6 +98,29 @@ guancli metric get <metric_id> --profile default -f json
97
98
  guancli metric get <metric_id> --profile default --raw
98
99
  ```
99
100
 
101
+ ### metric by-dataset
102
+
103
+ 按数据集 ID 获取关联指标。命令会跨指标主题扫描指标,并结合指标详情和指标血缘判断该数据集关联的指标;结果包含直接使用该数据集的原子指标,也包含继续引用这些指标的复合指标和衍生指标。
104
+
105
+ ```bash
106
+ guancli metric by-dataset <ds_id> [flags]
107
+ ```
108
+
109
+ 专属参数:
110
+
111
+ | 参数 | 说明 |
112
+ | --- | --- |
113
+ | `-d, --dir-id string` | 限定搜索主题 ID |
114
+
115
+ 示例:
116
+
117
+ ```bash
118
+ guancli metric by-dataset <ds_id> --profile default
119
+ guancli metric by-dataset <ds_id> --profile default -f json
120
+ guancli metric by-dataset <ds_id> --profile default -d <metric_topic_id>
121
+ guancli metric by-dataset <ds_id> --profile default --raw
122
+ ```
123
+
100
124
  ### metric query
101
125
 
102
126
  查询指标数据,支持维度、筛选、排序、列筛选和行数限制。泛化查询参数见 `metric-generic-query.md`。
@@ -153,8 +153,10 @@ guancli fetch GET /api/metric-attr-config
153
153
 
154
154
  ## 保存与确认
155
155
 
156
- - 先生成 JSON 文件并做 dry-run 或人工摘要,不直接提交。
157
- - 摘要至少包含:当前环境、主题、目录、指标类型、名称、核心计算方式、适用维度/时间维度、数据格式、业务属性、保存方式。
156
+ - 先输出“指标创建计划”让用户 review;计划确认前不生成最终提交 JSON,不执行真实创建。
157
+ - 用户确认计划后,再生成 JSON 文件并做 dry-run 或人工摘要,不直接提交。
158
+ - 计划/摘要至少包含:当前环境、主题、目录、指标类型、名称、核心计算方式、依赖顺序、复用/新建指标、适用维度/时间维度、数据格式、业务属性、保存方式。
159
+ - 如果适用维度中存在时间字段但时间维度为空,计划必须标记为待确认,不能继续提交。
158
160
  - 用户确认后按类型执行 save-precheck 或 validate-update-impact。
159
161
  - 如果校验返回冲突或影响下游资源,展示冲突指标、受影响指标、受影响卡片,并等待二次确认。
160
162
  - 写入成功后回读 `guancli metric get <metric_id> --brief`。
@@ -6,6 +6,7 @@
6
6
 
7
7
  - 用户说“创建复合指标”“基于多个指标算一个指标”。
8
8
  - 用户描述的口径是已有指标之间的四则运算。
9
+ - 用户给出数据集字段计算表达式后,确认希望先创建/复用基础原子指标,再创建复合指标。
9
10
  - 用户要编辑一个 `subType=COMPOSITE` 的指标。
10
11
 
11
12
  ## 创建必填信息
@@ -43,11 +44,21 @@
43
44
 
44
45
  - 涉及复合指标 `formula` 时,先读取 `metric-expression-rules.md`。
45
46
  - 先用 `guancli metric search <关键词> -d <projectId> -f json` 查询公式中的指标,再用 `guancli metric get <metric_id> --brief` 核对名称、类型、状态和适用维度。
47
+ - 如果用户只提供数据集字段级公式,先询问是否要创建复合指标。用户确认后,再识别公式里的基础度量,创建或复用基础原子指标,并把公式改写为 `[metricId]`。
46
48
  - 公式只能引用数值型指标;不要引用当前正在编辑的指标本身。
47
49
  - 公式支持 `+`、`-`、`*`、`/`、括号、数字和 `[指标ID]`;不要主动生成函数、窗口函数或 SQL 片段。
48
50
  - 公式中的 `[xxx]` 会被后端解析为上游指标 ID,并参与循环引用校验。
49
51
  - 如果用户用中文名描述公式,先转换成 ID 公式,再把“中文公式”和“ID 公式”都展示给用户确认。
50
52
 
53
+ 用户确认创建复合指标后的字段公式改写示例:
54
+
55
+ | 用户口径 | 建模方式 |
56
+ | --- | --- |
57
+ | `SUM([销售额字段]) / COUNT([订单ID字段])` | 先建“销售额”“订单数”原子指标,再建复合指标 `[metric_sales] / [metric_order_count]` |
58
+ | `SUM([归因销售额字段]) / SUM([广告花费字段])` | 先建“归因销售额”“广告花费”原子指标,再建复合指标 ROAS |
59
+ | `SUM([点击量字段]) / SUM([曝光量字段])` | 先建“点击量”“曝光量”原子指标,再建复合指标 CTR |
60
+ | `COUNT(CASE WHEN ... THEN 1 ELSE NULL END) / COUNT([ID字段])` | 先判断分子是否应建为条件计数原子指标或业务限定衍生指标,再创建复合比率指标 |
61
+
51
62
  ## 适用维度
52
63
 
53
64
  复合指标的适用维度来自公式中引用指标的共有维度:
@@ -103,17 +114,18 @@
103
114
 
104
115
  `guancli metric create` 当前是原子指标专用 endpoint;复合指标创建使用 `guancli fetch`。
105
116
 
106
- 1. 生成 `/tmp/composite_metric.json`。
107
- 2. 本地/人工检查 JSON、公式引用指标、共有适用维度、必填业务属性。
108
- 3. 按 `metric-common-fields.md` 向用户摘要并确认。
109
- 4. 用户确认后,不调用原子指标 `save-precheck`;复合指标 Web 创建没有 save-precheck。
110
- 5. 提交真实创建:
117
+ 1. 先输出指标创建计划,按 `metric-mutation.md` 的“指标创建计划”要求展示环境、主题、目录、将复用或新建的基础指标、复合公式、共有适用维度/时间维度、格式、业务属性和保存方式。
118
+ 2. 用户确认计划后,生成 `/tmp/composite_metric.json`。
119
+ 3. 本地/人工检查 JSON、公式引用指标、共有适用维度、必填业务属性。
120
+ 4. 按 `metric-common-fields.md` 向用户摘要并确认。
121
+ 5. 用户确认后,不调用原子指标 `save-precheck`;复合指标 Web 创建没有 save-precheck。
122
+ 6. 提交真实创建:
111
123
 
112
124
  ```bash
113
125
  guancli fetch POST /api/metric-platform/metrics/composite-metrics --stdin < /tmp/composite_metric.json
114
126
  ```
115
127
 
116
- 6. 响应返回指标 ID 后回读:
128
+ 7. 响应返回指标 ID 后回读:
117
129
 
118
130
  ```bash
119
131
  guancli metric get <metric_id> --brief
@@ -345,17 +345,18 @@
345
345
 
346
346
  `guancli metric create` 当前是原子指标专用 endpoint;衍生指标创建使用 `guancli fetch`。
347
347
 
348
- 1. 生成 `/tmp/derived_metric.json`。
349
- 2. 本地/人工检查 JSON、基础指标或公式引用指标、时间维度、衍生配置、必填业务属性。
350
- 3. 按 `metric-common-fields.md` 向用户摘要并确认。
351
- 4. 用户确认后,不调用原子指标 `save-precheck`;衍生指标 Web 创建没有 save-precheck。
352
- 5. 提交真实创建:
348
+ 1. 先输出指标创建计划,按 `metric-mutation.md` 的“指标创建计划”要求展示环境、主题、目录、基础指标或组合衍生引用指标、衍生配置、时间维度、格式、业务属性和保存方式。
349
+ 2. 用户确认计划后,生成 `/tmp/derived_metric.json`。
350
+ 3. 本地/人工检查 JSON、基础指标或公式引用指标、时间维度、衍生配置、必填业务属性。
351
+ 4. 按 `metric-common-fields.md` 向用户摘要并确认。
352
+ 5. 用户确认后,不调用原子指标 `save-precheck`;衍生指标 Web 创建没有 save-precheck。
353
+ 6. 提交真实创建:
353
354
 
354
355
  ```bash
355
356
  guancli fetch POST /api/metric-platform/metrics/derived-metrics --stdin < /tmp/derived_metric.json
356
357
  ```
357
358
 
358
- 6. 响应返回指标 ID 后回读确认。
359
+ 7. 响应返回指标 ID 后回读确认。
359
360
 
360
361
  ## 编辑步骤
361
362
 
@@ -19,6 +19,8 @@
19
19
 
20
20
  原子指标选择“使用表达式”时,表达式走数据集公式编辑器和后端数据集派生字段校验。后端会把公式当成数据集计算字段检查,并要求最终字段是聚合表达式;没有聚合函数会报“原子指标表达式必须包含聚合函数”。
21
21
 
22
+ 遇到计算表达式时,先询问用户是否希望创建复合指标。用户确认创建复合指标后,再创建或复用表达式中的基础原子指标,并用 `[metricId]` 生成复合指标公式。用户选择原子表达式或明确要求数据集字段表达式时,才在 `formulaField.fdFormula` 中使用 `[fdId]`。
23
+
22
24
  ### 推荐支持形态
23
25
 
24
26
  | 形态 | 示例 | 说明 |
@@ -29,14 +31,13 @@
29
31
  | 聚合内部加减 | `SUM([fd_price] + [fd_tax] - [fd_discount])` | 字段先加减再聚合 |
30
32
  | 条件聚合 | `SUM(CASE WHEN [fd_status] = 'paid' THEN [fd_amount] ELSE 0 END)` | 支持 `CASE WHEN`、比较、`AND/OR/NOT` |
31
33
  | 条件计数 | `COUNT(CASE WHEN [fd_status] = 'paid' THEN 1 ELSE 0 END)` | 条件计数 |
32
- | 顶层比值 | `SUM([fd_amount]) / COUNT([fd_order_id])` | 只建议一个顶层 `/` |
33
- | 分子/分母加减后相除 | `(SUM([fd_a]) + SUM([fd_b])) / (SUM([fd_c]) + COUNT([fd_d]))` | 分子、分母内部仅用加减和推荐聚合 |
34
34
  | 动态参数 | `SUM(CASE WHEN [fd_amount] > [DYNAMIC_PARAMS.N] THEN [fd_amount] ELSE 0 END)` | 同时在顶层 `dynamicParameters` 写默认值 |
35
35
 
36
36
  ### 避免生成
37
37
 
38
38
  - 无聚合表达式:`[fd_amount] + [fd_tax]`。
39
39
  - 乘法:`SUM([fd_price] * [fd_qty])`、`SUM([fd_a]) * SUM([fd_b])`。
40
+ - 在未询问用户前,直接把可拆分的最终计算指标写成原子表达式。应先确认是否改用基础原子指标 + 复合指标。
40
41
  - 非顶层除法:`SUM([fd_a]) + SUM([fd_b]) / SUM([fd_c])`。
41
42
  - 多重除法:`SUM([fd_a]) / SUM([fd_b]) / SUM([fd_c])`。
42
43
  - `AVG/MAX/MIN/FIRST/LAST/ANY_VALUE` 等聚合函数表达式;如果用户要平均值、最大值、最小值,优先走“来源字段 + `aggrType=AVG/MAX/MIN`”。
@@ -28,8 +28,27 @@
28
28
 
29
29
  - “新建一个指标,基于某数据集/某字段”:通常是原子指标。
30
30
  - “客单价 = 销售额 / 订单数”:通常是复合指标。
31
+ - “用数据集字段计算一个表达式指标”:先按下方“表达式建模确认”询问用户是否改为复合指标。
31
32
  - “给销售额做月环比/最近 7 天/本月累计/华东限定”:通常是衍生指标。
32
33
 
34
+ ## 表达式建模确认
35
+
36
+ 只要用户要创建的是计算表达式指标,不要直接替用户决定用原子表达式还是复合指标。先向用户确认:
37
+
38
+ ```text
39
+ 这个指标需要计算表达式。是否希望我先创建/复用表达式中的基础原子指标,再创建一个复合指标?
40
+ 如果选择否,我会按数据集字段表达式创建原子指标。
41
+ ```
42
+
43
+ 用户选择“是”时:
44
+
45
+ 1. 拆出表达式中的基础度量。
46
+ 2. 先搜索是否已有对应基础原子指标;已有则复用。
47
+ 3. 缺失基础指标时,先按 `metric-atomic-mutation.md` 创建基础原子指标。
48
+ 4. 再按 `metric-composite-mutation.md` 创建复合指标,公式使用 `[metricId]`,不要使用 `[fdId]`。
49
+
50
+ 用户选择“否”或明确要求数据集字段表达式时,才走原子指标 `formulaField.fdFormula`。
51
+
33
52
  ## 总体流程
34
53
 
35
54
  1. 使用当前已登录环境,不主动询问 profile;写操作前可执行 `guancli auth status`。
@@ -39,13 +58,47 @@
39
58
  - 指标详情:`guancli metric search <keyword> -f json`、`guancli metric get <metric_id> --brief`
40
59
  - 数据集字段:`guancli ds search <keyword>`、`guancli ds get <dsId> --brief`
41
60
  3. 读取启用的指标业务属性配置,补齐必填 `bizAttrs`。
42
- 4. 生成 JSON 文件,先做 dry-run 或人工摘要,向用户确认当前环境、目标目录、指标口径、计算配置、业务属性和保存方式。
43
- 5. 用户确认后,仍需按 Web 同款交互执行保存前校验或影响校验。
44
- 6. 校验通过、无对应校验,或用户对冲突/影响完成二次确认后,才提交真实创建或编辑。
45
- 7. 写入成功后用 `guancli metric get <metric_id> --brief` 回读确认。
61
+ 4. 生成“指标创建计划”,让用户 review;用户确认计划前,不生成最终提交 JSON,不执行 dry-run/precheck/真实创建。
62
+ 5. 用户确认计划后,生成 JSON 文件,先做 dry-run 或人工摘要,向用户确认当前环境、目标目录、指标口径、计算配置、业务属性和保存方式。
63
+ 6. 用户确认后,仍需按 Web 同款交互执行保存前校验或影响校验。
64
+ 7. 校验通过、无对应校验,或用户对冲突/影响完成二次确认后,才提交真实创建或编辑。
65
+ 8. 写入成功后用 `guancli metric get <metric_id> --brief` 回读确认。
46
66
 
47
67
  不要把“dry-run 成功”“precheck 通过”或“影响校验无阻塞”描述成指标已经创建/编辑成功。
48
68
 
69
+ ## 指标创建计划
70
+
71
+ 创建指标前必须先输出一个计划供用户 review,尤其是一个需求会创建多个基础原子指标和复合指标时。计划确认前不得提交真实创建请求。
72
+
73
+ 计划至少包含:
74
+
75
+ - 当前环境和目标主题。
76
+ - 目标目录路径和目录 ID。
77
+ - 将创建的指标清单,按依赖顺序排序;每个指标标明临时序号、名称、类型、保存方式。
78
+ - 每个指标的核心口径:原子指标写数据集、字段、聚合方式或表达式;复合指标写中文公式和 `[metricId]` 公式草案;衍生指标写基础指标和衍生配置。
79
+ - 适用维度和时间维度;如果存在时间字段但时间维度为空,计划必须标记为待确认,不能进入提交步骤。
80
+ - 数据格式、业务负责人、必填业务属性。
81
+ - 将复用的已有指标和将新建的基础指标。
82
+ - 后续会执行的校验:dry-run、save-precheck、validate-update-impact 或本地引用检查。
83
+
84
+ 计划示例:
85
+
86
+ ```markdown
87
+ ### 指标创建计划
88
+
89
+ 环境:demo-guandata
90
+ 主题:跨境电商指标体系 (ida4...)
91
+ 目录:广告分析 / 投放效果 (dir_xxx)
92
+
93
+ | 步骤 | 动作 | 指标名称 | 类型 | 核心口径 | 时间维度 | 保存方式 |
94
+ | --- | --- | --- | --- | --- | --- | --- |
95
+ | 1 | 复用 | 归因销售额 | 原子指标 | SUM(attributed_sales) | updated_at | 在线 |
96
+ | 2 | 复用 | 广告花费 | 原子指标 | SUM(spend_amount) | updated_at | 在线 |
97
+ | 3 | 新建 | ROAS | 复合指标 | [归因销售额] / [广告花费] | updated_at | 草稿 |
98
+
99
+ 确认后我会生成 JSON、执行 dry-run/必要校验,再提交创建。
100
+ ```
101
+
49
102
  ## 校验入口速查
50
103
 
51
104
  | 操作 | 校验规则 |