{"id":"d92b9735-302c-4644-bd02-8432789f15a3","shortId":"Q2PLVc","kind":"skill","title":"majia-guanyuan","tagline":"观远 BI（Guandata）全链路操作 — 数据查询/建卡/取数（Part A）、ETL 治理/写入/删除（Part B，含 SmartETL 全链路重写 + 字段使用度审计 + ExecPlan 工程化）、自定义图表 HTML/CSS/JS 注入与排障（Part C，含 V2.1.1 新增的 HTML 应用化看板生成 + selector 联动 descriptor patch）。当用户提到 营业额/门店/会员/订单/建卡/取数/报表/ETL/direct-save/payload_json/自定义图表/HTML 看板/应用化/更高级/不限标准看板/","description":"# 观远 BI · 马甲专版（V2.1.5）\n\n> **结构说明（V1.5.0 引入 progressive disclosure）**：本文档是**路由层 + 关键规则**，详细操作手册下沉到 `references/`。每个 Part 的入口章节会指出\"何时回到 references/ 查全表\"。完整章节索引见末尾的 [📚 References 目录](#-references-目录)。\n\n## 🧭 Part 选择\n\n| 你想做 | 走 |\n|---|---|\n| 查数据、建卡、生成报表、做分析 | **Part A：数据查询与卡片创建** |\n| 扫整库 ETL 治理 / 新建/修改/删除 ETL / 字段使用度审计 / 修复 ETL 报错 | **Part B：ETL 治理与写入** |\n| 把整条 SmartETL 链改写成 SQL 版 + 页面副本验收 + 差异定位 + 空快照阻塞 | **Part B-17：全链路重写方法论**（拆到 [references/part-b17-fullchain-rewrite.md](references/part-b17-fullchain-rewrite.md)） |\n| 30+ 张表批量迁移 / 跨多日工程 / 复杂重构需要项目化追踪 | **B-17.11 ExecPlan 工作法**（同上文件 §11） |\n| 自定义图表 HTML/CSS/JS 注入、固定卡片/overlay、payload_json 取数、路由清理 | **Part C：自定义图表开发与排障** |\n| 从零生成 HTML 化经营分析应用（用户说\"更高级 / 应用化 / 自定义模块 / 最完美 / 不限标准看板\"）| **Part C-12：HTML 应用化看板生成**（拆到 [references/part-c-html-dashboard.md](references/part-c-html-dashboard.md)） |\n| 写餐饮业务公式（AC / ADS / 复购率 / 新老客 / 用餐时段 / 留存流失 / RFM / Comp 老店）/ 查字段口径 / 排数据质量坑 / **ETL 工程范式（DWD 宽表 / 双源对账 / 评价 pipeline）** | **餐饮 BI 公式实战库**（[references/restaurant-bi-formulas/README.md](references/restaurant-bi-formulas/README.md)，V2.1.5 蒸馏自两段餐饮连锁 BI 履职 + 39 个生产 ETL，全脱敏） |\n| 不知道用哪个 | 看 Part B \"推荐工作流\" 章节，或直接读各 Part 章节末尾的\"实战 ID 速查\" |\n\n> **作者**：马甲（Part A/B 实证）+ 观远 CTO 张进（Part B-17 SmartETL 改写方法论 + Part C 自定义图表经验）+ OpenAI Codex（V1.2 ExecPlan 规范）\n> **版本**：V2.1.5（2026-05-18）· **环境**：Node ≥20 · **依赖**：`@guandata/guancli@^1.0.21` · **可选**：`@guandata/guanvis-skill@^0.1.13`（内网 Nexus 私服分发，见 [references/internal-nexus-install.md](references/internal-nexus-install.md)） · **作用域**：本地私有 BI 实例\n> **安装**：`git clone https://github.com/maojiebc/majia-guanyuan.git` + `node bin/install.js install`，或 `npx github:maojiebc/majia-guanyuan install`\n> **兼容工具**：Claude Code · OpenClaw · Codex · Hermes (gbrain) · 任何支持 `SKILL.md` frontmatter 的 agent。详见 [README · 兼容性](README.md#-兼容性--compatibility) 与 [AGENTS.md](AGENTS.md)。\n>\n> 🆕 **V2.0 升级提示**：原名 `guanyuan-majia` 已重命名为 `majia-guanyuan`，对齐马甲家族风格。GitHub repo URL 同步迁至 `maojiebc/majia-guanyuan`（旧地址自动 redirect，老 clone 不影响）。新增命令面与 `@guandata/guancli@1.0.19` 对齐 —— ChatBI 主题问数 (`guancli chatbi`) / SuperApp (`guancli app`) / 多环境 auth (`auth list/use/whoami`) / 连接探测 (`guancli status`)。详见 [CHANGELOG.md](CHANGELOG.md)。\n>\n> 🆕 **V2.1 升级提示**（2026-05-13）：官方 `@guandata/guanvis-skill@0.1.13` 已通过观远**内网 Nexus 私服**（`https://app.mayidata.com/nexus/repository/guandata-web/`）分发，公网 npm 仍 404；内网员工可让同事下 tarball 走 [references/internal-nexus-install.md](references/internal-nexus-install.md) 的\"四步法\"装上。本 skill **Part A 的标准 30+ 图表建卡需求优先路由到 `guanvis-skill` 的 JS DSL**（`card_*.js` / `page.js`），本 skill 的 `guandata.py` / `create-card` 保留为 fallback + payload 底层参考，便于无 `guanvis-skill` 的环境继续工作。其他四个兄弟 skill（`guanetl-skill` / `guands-skill` / `guanexport-skill` / `guanadmin-skill`）公网 + 内网均未确认发包，仍走 `guancli fetch` + 本 skill Part B。\n\n---\n\n# 🅰️ Part A：数据查询与卡片创建\n\n## ⚠️ 关键规则\n\n**所有数值计算必须跑代码** — 禁止在思考中直接口算百分比、环比、除法等。\n\n1. **必须提供 pg_id** — 不保存的卡片无法取数据\n2. **先查页面权限** — 用 `list-pages --manageable` 找有权限的页面，不用翻 JSON\n3. **筛选值按需查** — 只有用了分类筛选（`IN`/`EQ`/`CONTAINS`）才需要 `search-values`；纯日期范围（`BT`）不需要\n4. **图表类型限制** — 超出 metric/row/column 上限会返回空数据\n5. **必须确认数据范围** — 用户没有明确指定日期范围时，**必须追问**，不要自己假设。例如：\"你想看哪段时间的数据？\" 或提供选项：\"要看今天、本周还是上月？\"\n\n**遇到意外的错误以及得到新的教训立即更新：** 遇到意外的错误立即把它落到 SKILL.md 对应的章节（Part B 报错走 `references/part-b-errors.md`，Part C 走 `references/part-c-payload-json.md` 等）或 ExecPlan 的 `Surprises & Discoveries` 章节（B-17.11）。格式：\n\n```markdown\n### [YYYY-MM-DD] 简要标题\n- **场景**: 什么情况下遇到的\n- **问题**: 发生了什么（含 task error 原文、payload 片段）\n- **判断**: 应该怎么做\n```\n\n## 基本信息\n\n> 路径约定：以下命令假定 cwd 是 skill 安装目录。Skill 路径因 agent 工具不同而异（见 [README](README.md) 的兼容性表）：Claude Code 在 `~/.claude/skills/majia-guanyuan/`，OpenClaw 在 `~/.openclaw/skills/majia-guanyuan/`，Codex 在 `~/.codex/skills/majia-guanyuan/`，Hermes 在 `<workspace>/skills/majia-guanyuan/`。所有 Part A 命令都用相对路径 `scripts/guandata.py`，无需修改。\n\n- 配置文件: `config.json`（**含明文凭据，已被 .gitignore 排除**）\n- 脚本: `scripts/guandata.py`\n- 运行环境：Python 3.8+，依赖 `httpx`（`pip install httpx`）\n\n## 配置说明\n\n编辑 `config.json`：\n\n```json\n{\n  \"version\": \"6\",\n  \"base_url\": \"https://your-guandata-instance.com:port\",\n  \"domain\": \"your_domain\",\n  \"login_id\": \"your_username\",\n  \"password\": \"<BI_LOGIN_PASSWORD>\",\n  \"default_pg_id\": \"your_default_page_id\",\n  \"default_folder_id\": \"your_default_folder_id\"\n}\n```\n\n| 字段 | 必填 | 说明 |\n|------|------|------|\n| `version` | ✅ | 观远BI版本：`\"6\"`（直接保存卡片）或 `\"7\"`（7.0+ draft/release 机制，自动发布） |\n| `base_url` | ✅ | 观远BI服务器地址，如 `https://bi.company.com:8080` |\n| `domain` | ✅ | 登录域，通常为 `guanbi`，具体咨询你们的BI管理员 |\n| `login_id` / `password` | ✅ | 观远BI登录账号/密码 |\n| `default_pg_id` | | 默认页面ID。不传时，`create-and-get` 需手动指定 `pg_id` |\n| `default_folder_id` | | 默认文件夹ID。创建新页面时的存放位置 |\n\n**如何获取 pg_id / folder_id**：在观远BI网页打开目标页面，URL 中的 `pgId=xxx` 即为页面ID；文件夹ID在「数据管理」→「目录」中查看。\n\n## 命令骨架（最常用 10 条）\n\n```bash\nSCRIPT=\"python3 scripts/guandata.py\"\n\n# 探索\n$SCRIPT list-datasets [--columns] [--refresh]    # 数据集（默认走缓存）\n$SCRIPT get-columns <ds_id> [--with-calc]        # 字段（含计算字段）\n$SCRIPT search-values <ds_id> --name \"字段名\" --search \"关键词\"   # 枚举值\n\n# 建卡 / 取数\n$SCRIPT create-and-get '<json>'   # 建卡 + 取数（一步到位）\n$SCRIPT create-card '<json>'      # 仅建卡\n$SCRIPT get-card-data <card_id>   # 取已存在卡片的数据\n\n# 页面 / 卡片管理\n$SCRIPT list-pages --manageable   # 有编辑权限的页面（日常用这个）\n$SCRIPT delete-cards <pg_id> <card_id1> <card_id2> ...\n\n# 诊断 / 认证\n$SCRIPT status                    # 查看配置、token、缓存状态\n$SCRIPT set-token <jwt> [--expires 7200]   # 手动设置 JWT（从浏览器复制时用）\n```\n\n> **完整命令清单**（含 `--task` 缓存隔离、`create-page` / `release-page` / `get-page-cards`、缓存清理、CSV 缓存使用规范）见 **[references/part-a-commands.md](references/part-a-commands.md)**。\n\n## 写卡片前必读\n\n> 🚦 **V2.1 路由提示**：如果用户的需求是\"做销售仪表板 / 加 KPI 卡片 / 柱状图展示门店排名 / 新建区域筛选器联动\"等**标准图表/Page 装配** —— **优先用 `guanvis-skill` 的 JS DSL**（`card_*.js` / `selector_*.js` / `page.js` → `pack/publish`），它的 30+ 图表类型覆盖、selector 联动、主题切换、批量发布都比手拼 JSON 顺手。本节的 `create-and-get` / `create-card` 保留作为 **fallback**（无 `guanvis-skill` 的环境）+ **payload 底层参考**（理解 `chart_type` / `metric` / `filters` 字段语义）。`guanvis-skill` 安装见 [references/internal-nexus-install.md](references/internal-nexus-install.md)，触发关键词见其 SKILL 描述。\n>\n> 反过来，**超出官方组件能力的视觉定制**（双 Y 轴叠加、ECharts 自定义渲染、图例改圆点、tooltip HTML 重写、固定卡片/overlay）走 **Part C**，`guanvis-skill` 不覆盖这些。\n\n`create-and-get` / `create-card` 的 JSON 参数有 13 个字段，2 种格式（metric/filters/sorting/字段名/filterType），26 种 `chart_type`，6 种日期粒度。**写卡前先回到参考表**：\n\n📖 **[references/part-a-cards.md](references/part-a-cards.md)** — 完整参数表 + 26 种图表类型 + metric/filters/sorting/字段名/filterType 全格式 + 6 个建卡示例（指标卡 / 柱状图 / 交叉表 / 多线图 / 组合图 / 气泡图）+ 完整工作流示例 + 自定义公式字段 `custom_fields`。\n\n## guancli 补充：只读探索 + 表单 CRUD\n\n**guandata.py vs guancli 分工**：\n- **guandata.py** → 建卡、取数、删卡、发布页面（**写**操作）\n- **guancli** → 搜索、探索、ETL/指标/任务/表单（**读**操作 + 表单 CRUD）\n\n**何时用 guancli 替代 list-datasets / list-pages**：\n- 库里数据集/页面很多 → `guancli ds search \"关键词\" --brief` 比全量拉取省 50%+ token\n- 想看某 ETL 的 SQL/血缘/节点列表 → `guancli etl get <id> --brief`（`guandata.py` 没有此能力）\n- 任务排查 → `guancli task running` / `guancli task get <task_id>`\n- 表单 CRUD → `guancli form list/schema/query/add/update/delete`\n- 调未封装的 BI API → `guancli fetch <METHOD> <path>`（万能兜底）\n\n📖 **[references/guancli-commands.md](references/guancli-commands.md)** — 9 大类命令完整速查（ds / etl / metric / metric_attribution / task / page / card / form / fetch）+ 工具选择决策表。\n\n## guancli V1.0.21 新能力（V2.0 / V2.1.4 同步）\n\n@guandata/guancli@1.0.21 的命令面比本 skill V1.7 之前覆盖的更广。下列能力是 V2.0 → V2.1.4 陆续对齐的，写到这里只为\"路由\"，详细命令查 [references/guancli-commands.md](references/guancli-commands.md)：\n\n- **`guancli chatbi`** — ChatBI Public API：`list-theme` / `query`（L1 主题问数）/ `insight`（L2 洞察分析）。\n  ⚠️ 2026-05-12 在自有 BI 实例实测后端未部署 `/api/chat/public-api/theme/list-theme`，命令返回 `5001 No static resource`。如果你们 BI 实例升级了 ChatBI 模块就能直接用，命令面查 `guancli chatbi --help`。\n- **`guancli app`** — SuperApp 模板：`create`（基于模板创建项目）/ `publish`（发布到平台）。\n- **`guancli status`** — 顶层连接状态检查（区别于 `guancli auth status` —— 后者看 token，前者探接口连通）。\n- **多环境管理** — 同时管多套 BI 环境（生产 / UAT / 镜像）：\n  - `guancli auth login` 交互式登录，token 落盘 `~/Library/Application Support/guancli/config.json`，401 自动重登（无需再写明文密码到 config.json，下个版本计划把 `scripts/guandata.py` 也切到这套 token）\n  - `guancli auth list` / `auth use <name>` / `auth modify` / `auth remove` / `auth whoami` / `auth detect-domain` —— 完整 CRUD\n  - `guancli --profile <name>` 或 `export GUANCLI_PROFILE=<name>` 临时切\n\n### V2.1.4 新对齐：1.0.20 / 1.0.21 增量（2026-05-15）\n\n- **`guancli metric query` 泛化查询（1.0.20）** —— 一整套\"高级指标分析\"flag 下放到 CLI 端：`--compare yoy|mom|qoq|wow|dod` + `--compare-value value|rate|rawdata`、`--xtd ytd|qtd|mtd|wtd|dtd`、`--recent 7d|4w|3m`（可配 `--recent-base`）、`--percentage --percentage-dim`、`--rank-top N --rank-dim ... --rank-order asc|desc`、`--last`、兜底 `--adv-calc-json`。等价于在 BI 后台点开\"高级计算\"面板，**业务侧问\"同比/年累计/最近 7 天/各城市占比/Top 10\" 现在都能一行命令出数**，不必再去后台建一个新的派生指标实例。命令面与判断表见 [references/guancli-commands.md § metric query 泛化查询](references/guancli-commands.md#v214-起metric-query-泛化查询guancli-1020-新增)。\n- **`guancli card preview -f excel`（1.0.20）** —— 新增 Excel 2003 XML 格式导出（重定向 `> out.xls` 直接 Excel 打开），同时把 `--limit` 默认值从 50 抬到 10000、`--sort-asc/desc` 取数下限固定 10000 行；服务端继续截断时命令会拒绝排序避免输出不可信顺序。**业务侧\"把这张卡的数据导给我看 / 给我做个报表附件\"现在直接 `card preview -f excel` 走通**，不需要再走 guandata.py 的取数 + pandas 落盘组合。\n- **错误输出更干净（1.0.21）** —— 1.0.21 修了 CLI 运行时报错附带 `Usage:` / `Available Commands:` 大段帮助信息的 bug，`guancli ... 2>&1 | head -n 5` 这类 Part B 报错速查脚本现在能拿到干净错误，**Part B 报错速查表所有 head 样式提示都更可靠了**。\n\n## 与官方 `guancli` skill 的共存\n\n官方在 2026-05-11 通过 `guancli install-skill` 也分发了一个名为 `guancli` 的 skill，定位**只读分析 + ChatBI + 表单填报 CRUD**；写操作原计划分流到 5 个兄弟 skill（`guanetl-skill / guanvis-skill / guands-skill / guanexport-skill / guanadmin-skill`）。**2026-05-13 实测状态**：\n\n- ✅ **`@guandata/guanvis-skill@0.1.13`** 已通过观远**内网 Nexus 私服** `https://app.mayidata.com/nexus/repository/guandata-web/` 分发（公网 npm 仍 404）。内网员工可走 [references/internal-nexus-install.md](references/internal-nexus-install.md) 的 tarball \"四步法\" 装上。能力：**30+ 标准图表 JS DSL 建卡 + Page 装配 + selector 联动 + 主题切换 + pack/publish**。\n- ❌ `guanetl-skill / guands-skill / guanexport-skill / guanadmin-skill` —— 公网 + 内网均未确认发包。在它们落地之前，ETL 写入、数据集 CRUD、PNG/PDF 导出、SVC SQL 全部继续走 `guancli fetch` + 本 skill 的 Part B 实战手册。\n\n**三件套角色互补**（V2.1 重新定义）：\n\n| skill | 版本 | 主要角色 | 何时触发 |\n|---|---|---|---|\n| **官方 `guancli`** | 1.0.21 | 只读分析 + 指标泛化查询 + ChatBI L1/L2 + 表单 CRUD + card preview Excel 导出 | 查 ETL/dsId/page/card/血缘、ChatBI 主题问数、表单填报、`metric query` 同比/累计/Top N、`card preview -f excel` 报表导出 |\n| **官方 `guanvis-skill`** | 0.1.13（内网 Nexus） | 标准建卡 + Page 装配 | 30+ 标准图表（柱/线/饼/KPI/表格/漏斗/地图/散点等）JS DSL、selector 联动、主题切换 |\n| **`majia-guanyuan`**（本 skill） | 2.1.5 | 业务实战 + 高级自定义 + HTML 应用化看板 + **餐饮 BI 公式实战库** | ETL 治理写入 / SmartETL 全链路重写 / **Part C HTML/CSS/JS 自定义图表注入与排障** / **Part C-12 HTML 应用化看板生成 + selector 联动 descriptor patch** / payload_json / ExecPlan / 60+ ETL 战例 + 10 类报错手册 / 业务体感与场景模板 / **V2.1.5 新增：餐饮连锁 BI 公式实战库（60+ SQL 公式 + 6 ETL 工程范式 + 39 ETL 索引）** |\n\n如果同时启用所有三个 skill，agent 在\"分析 ETL 资源\"这类只读场景下可能双触发 `guancli` 和 `majia-guanyuan`；想降低歧义建议保留本 skill（命令面更广，已含 guancli 的只读路由），把官方 `guancli` symlink 卸了：`rm ~/.claude/skills/guancli`（仅断 Claude Code 入口，不影响 `~/.agents/skills/guancli/` 真目录与其他 agent 加载）。**`guanvis-skill` 建议保留**——它和本 skill 的 Part A 互补不冲突，路由规则在「写卡片前必读」段已说明。\n\n## 错误处理\n\n| 状态码 | 处理 |\n|--------|------|\n| 500 | 终止，服务器问题 |\n| 401 | 终止，登录失效 |\n| 403 | 终止，无权限 |\n| 404 | 终止，资源不存在 |\n\n---\n\n# 🅱️ Part B：ETL 治理与写入（V1.0）\n\n> 基于 `@guandata/guancli@1.0.21` 的实证记录。所有 API 路径、payload 字段、报错信息、治理判断维度均来自真实跑通的请求。覆盖整库治理扫描 + 60+ 张 ETL 创建/重构/修复/删除的实战。\n>\n> ⚠️ 官方 guancli SKILL.md 把 BI 操作拆成 5 个兄弟 skill。**2026-05-13 实测状态**：`guanvis-skill@0.1.13` 已通过观远内网 Nexus 私服分发（公网 npm 仍 404，安装走 [references/internal-nexus-install.md](references/internal-nexus-install.md)），定位标准建卡 + Page 装配，与本 skill Part A 路由互补；其余 4 个（`guanetl-skill` / `guands-skill` / `guanexport-skill` / `guanadmin-skill`）公网 + 内网均未确认发包。**Part B 涉及的 ETL 写入、direct-save、payload_json、execute 全部继续走 `guancli fetch` + 本 skill 的实战手册**，等 `guanetl-skill` 落地后再考虑路由切换。\n\n## B-〇. 推荐工作流（先治理再重建）\n\n```text\n1. 治理扫描     ← 批量抓全部 ETL 原始 JSON，分析依赖、循环、复杂度\n2. 决策保留     ← 用 8 维 ETL + 4 维字段判断：保留 / 合并 / 降级 / 删除\n3. 设计分层     ← 按 ODS/DIM/DWD/DWS/APP 重新分配\n4. 字段审计     ← 双源（page + etl）扫字段使用度，确定砍字段范围\n5. 新建目录     ← v2 目录与旧目录并行，不动旧链路\n6. 写入 ETL     ← 三节点骨架 INPUT→SQL→OUTPUT，本地编译 payload\n7. 预览节点     ← etl preview 先看 OUTPUT 节点能不能出数据\n8. 执行落表     ← execute + task get 轮询 + 拿 result.error\n9. 对账切流     ← 新旧并行验证，下游看板/ETL 逐张迁移\n10. 清理旧链路  ← 先 DELETE data-source，再 DELETE etl（顺序不能反）\n```\n\n跳过治理直接动手 = 把同样混乱重做一遍。第 1–4 步是写 ETL 之前最值钱的活。\n\n---\n\n## B-1. API 全图（11 个已实测 endpoint）\n\n```text\n🔧 写入类（POST）\nPOST /api/directory                  ← 建目录（dirType=ETL 或 DATA_SET）\nPOST /api/etl/direct-save --stdin    ← 创建/更新 ETL（payload 有 dataFlowId 即更新）\nPOST /api/etl/execute                ← 触发执行 {\"dataFlowId\":\"...\"} → taskId\n\n📖 读取类（GET）\nGET  /api/etl/<id>                   ← ETL 完整定义（含 actions/sql/relativeFieldAlias）\nGET  /api/directory/ETL/authorized-tree       ← ETL 目录树\nGET  /api/directory/DATA_SET/authorized-tree  ← 数据集目录树\nGET  /api/task/<taskId>              ← 任务状态 + 错误详情（关键修 bug 入口）\n\n🗑️ 删除类（DELETE）\nDELETE /api/data-source/<dsId>       ← 删数据集（必须先于 etl 删）\nDELETE /api/etl/<id>                 ← 删 ETL（输出数据集还在 → 失败）\n\n🔍 探测类（OPTIONS）\nOPTIONS /api/<any-path>              ← 返回 Allow 头，反推支持的 method\n```\n\n### B-1.1 反推未知 endpoint 的方法\n\n```bash\n# 步骤 1：探 method 集合（最高效）\nguancli fetch OPTIONS /api/<path>\n# Allow: POST,GET,HEAD,DELETE,OPTIONS\n\n# 步骤 2：盲发 POST，根据错误类型判断\n# - \"No static resource X\"               → endpoint 不存在\n# - \"Request method 'X' is not supported\" → endpoint 存在但方法不对\n# - \"InvalidJSON\" / \"missing field\"       → endpoint 对，body 不对（开始迭代）\n# - \"ResourceId(...) ResourceNotExist\"    → endpoint 模式错误\n\n# 步骤 3：根据错误反推 schema\n```\n\n**血泪经验**：BI 内部 endpoint 命名不一致——`data-source`（带连字符）、`dataflow`（无连字符）、`etl`（无连字符）、`directory/ETL`（驼峰大写）混用。靠 OPTIONS 探测比盲发 POST 高效 10 倍。\n\n---\n\n## B-2. 治理扫描：判断 ETL/字段去留\n\n### B-2.1 为什么扫描\n\n观远 BI 用久了的常见症状：核心表互相循环引用、同份业务规则散落多张计算列、维表混入下游经营字段、大量已创建未运行的废弃 ETL、名实不符。**不扫一遍直接动手，重建出来还是一团乱麻。**\n\n### B-2.2 扫描 3 步走\n\n```bash\n# Step 1：列出范围\nguancli etl tree                                       # 全库\nguancli etl search '' -d <PARENT_ETL_DIR_ID> --raw     # 按目录缩范围\n\n# Step 2：批量抓原始定义（--raw 关键，不带就只输出阉割版）\nmkdir -p raw\njq -r '.response.contents[].dataFlowId' etl-list.json | while read id; do\n  guancli --raw etl get $id > raw/$id.json\ndone\n\n# Step 3：本地脚本聚合分析\nnode analyze.mjs raw/ > analysis.json\n```\n\n### B-2.3 分析脚本要算的 10 个指标\n\n| 指标 | 怎么算 |\n|---|---|\n| 输出数据集 | `actions[].type==\"OUTPUT_DATASET\"` 的 `outputDsName` |\n| 上游 ETL 依赖 | `inputs[]` 里 `displayType==\"DATAFLOW\"` 的，反查归属哪个 ETL |\n| 节点数 | `actions.length` |\n| Join 数 | `actions[].type==\"JOIN_DATA\"` 的个数 |\n| 计算列数 | `actions[].type==\"CALCULATOR\"` 的个数 |\n| 透传聚合数 | `actions[].type==\"GROUP_BY\"` 的个数 |\n| 长公式数 | CALCULATOR 里 `formulas[].expr.length > N` 的个数 |\n| 输出行数/大小 | 输出 ds 的 `rowCount` / `storageSize` |\n| 调度方式 | `cron`（`AFTER_REFRESH` / 具体 cron / 无） |\n| 状态 | `status`（`FINISHED` / `CREATED` / `FAILED`） |\n\n构建依赖图（节点 = ETL，边 = \"本 ETL 输入了另一个 ETL 的输出表\"），DFS 三色标记找循环组，计算 fanIn/fanOut。\n\n### B-2.4 ETL 去留判断（8 维）\n\n| 维度 | 信号 | 处置 |\n|---|---|---|\n| **循环依赖** | 出现在循环组里 | **必拆**：找共同字段抽到 DIM/DWD，让两下游都读它 |\n| **状态异常** | `status=CREATED` 且无输出 / 0 次执行 | 删或重建为明确用途 |\n| **本地无下游** | 没有任何其他本地 ETL 引用其输出 | 区分两类：① 给看板用 → 标 APP 层；② 没人用 → 删或归档 |\n| **节点复杂度** | 节点 > 25、Join > 5、CALCULATOR > 3、长公式 > 0 | **拆**成多段：基础明细 / 规则映射 / 业务汇总 |\n| **输出大小** | 单表 > 1GB 或 > 1000 万行 | 检查是否不必要物化；规则计算应集中 |\n| **名实不符** | ETL 名跟输出表名差距大 | 改名或废弃 |\n| **历史补数** | 名字含\"补齐 / 历史 / 月末\"等，调度异常 | 移到补数/归档目录，不挂主链 |\n| **未调度** | `cron` 为空且不是被其他 ETL 触发 | 确认是否临时/手工 → 标记或删除 |\n\n### B-2.5 字段去留判断（4 维）\n\n| 维度 | 怎么判断 | 处置 |\n|---|---|---|\n| **下游 ETL 引用** | 在所有下游 ETL 的 SQL/CALCULATOR/SELECT_COLUMNS 里 grep 字段名 | 0 引用 → 候选删 |\n| **看板（page）引用** | 看板/卡片是否用了这个字段 | 有 → 不能删 |\n| **业务口径** | 字段名是否含业务规则（\"是否会员\"、\"是否新客\"） | 这类是规则字段，集中维护到专门的规则映射 ETL |\n| **冗余/派生** | 能否从其他字段推导（开业天数 vs 开业日期） | 派生字段尽量在下游算，不在维表物化 |\n\n详细双源审计方法见 **B-10**。\n\n### B-2.6 ODS/DIM/DWD/DWS/APP 分层\n\n| 层 | 放什么 | 关键约束 |\n|---|---|---|\n| **ODS** | 原始外部表、DB_EXTRACT、手工源表 | 只做轻清洗，不承载业务口径 |\n| **DIM** | 门店、会员、日期、支付通道、顾客标识映射 | **稳定、少依赖、可复用，禁止依赖 DWS/APP** |\n| **DWD** | 订单明细、券明细、好友明细、评价明细 | 固定主键和时间粒度 |\n| **DWS** | 复购、RFM、拉新、蓄水、门店日报 | 从 DWD/DIM 读，**禁止反向被 DIM 引用** |\n| **APP** | 看板专用宽表 | **只服务页面，不再作为基础上游** |\n\n调度按层推进 ODS → DIM → DWD → DWS → APP。\n\n**核心反模式**：维表（DIM）混入了下游经营结果字段——比如门店维表里塞了\"近 90 天订单数\"。这是循环依赖最常见的根源。\n\n### B-2.7 输出物建议\n\n- `analysis.json`：机器可读分析结果（summaries / cycleGroups / highComplexity / nodeTypes）\n- `governance-report.md`：人类可读治理报告（核心结论 + 循环组 + 合并主题域 + 清理对象 + 目标架构 + 实施路线）\n- `migration-plan.json`：每个旧 ETL → v2 的对应表（score / targetName / status）\n\n---\n\n## B-3. 第一步：新建目录\n\n### B-3.1 不要试这些路径（全部 5001 失败）\n\n```text\nPOST /api/directory/create\nPOST /api/directory/ETL/create\nPOST /api/directory/ETL/add\nPOST /api/directory/add\nGET  /api/directory                  ← Method 'GET' is not supported\nGET  /api/etl/tree                   ← ResourceId(tree)/ResourceKind(DataFlow) ResourceNotExist\nPOST /api/etl/dir                    ← Method 'POST' is not supported\nPOST /api/resource-atlas/dir         ← 'resourceTypeName missing'\n```\n\n合法 `dirType` 只有 **`ETL`** 和 **`DATA_SET`**（不要写 `DATA_PROCESS_ETL` `SMART_ETL` `DATAFLOW` `DATA_FLOW`）。\n\n### B-3.2 正确做法\n\nETL 树和数据集树是**两棵独立的树**：\n\n```bash\nguancli fetch GET /api/directory/ETL/authorized-tree\nguancli fetch GET /api/directory/DATA_SET/authorized-tree\n```\n\n**分别建**（同名也得建两次）：\n\n```bash\n# ETL 目录\nguancli fetch POST /api/directory \\\n  '{\"name\":\"warehouse_v2\",\"parentDirId\":\"<parent_etl_dir_id>\",\"dirType\":\"ETL\"}'\n\n# 数据集目录\nguancli fetch POST /api/directory \\\n  '{\"name\":\"warehouse_v2\",\"parentDirId\":\"<parent_ds_dir_id>\",\"dirType\":\"DATA_SET\"}'\n```\n\n记住返回的两个 dirId，写 ETL payload 时**两个都要用**：\n- ETL 目录 id → ETL 自身的顶层 `parentDirId`\n- 数据集目录 id → OUTPUT_DATASET 节点的 `parentDirId` + `dataSource.parentDirId`\n\n---\n\n## B-4. 第二步：构造 ETL payload（速查）\n\n最小骨架 = 3 节点：\n\n```text\nINPUT_DATASET → SQL_SCRIPT → OUTPUT_DATASET\n```\n\n**最关键的字段坑**（详细见 references）：\n- ⚠️ SQL 节点字段名是 **`sql`，不是 `sqlScript`**。写错时 direct-save 不报错，但 SQL 不生效（最隐蔽 bug）。\n- ⚠️ SQL 里 `input1/input2/...` 是**位置式索引**对应 `sources[]`，删除 INPUT 节点会让索引前移，**改 input 节点必须同时改 SQL**。\n- ⚠️ INPUT_DATASET 的 `relativeFieldAlias` 决定 SQL 里能引用什么字段名，必须读了再写 SQL。\n- ⚠️ OUTPUT_DATASET 的 `parentDirId` 是**数据集目录 id**，不是 ETL 目录 id（错填→\"保存路径无效\"）。\n\n📖 **[references/part-b-payload.md](references/part-b-payload.md)** — 完整 payload 模板（含 dataSource.dirPath）+ 三种节点的字段速查表 + 9 种已知节点类型 + dataFlowId 控制 create vs update + **B-8 复用模板：从扫描到落表的完整 4 阶段脚本**（治理扫描 → 建目录 → 写入执行 → 删除旧链）。\n\n---\n\n## B-5. 第三步：执行 + 拿真实错误\n\n### B-5.1 触发执行（status 字段误导）\n\n```bash\nguancli fetch POST /api/etl/execute '{\"dataFlowId\":\"<etl_id>\"}'\n# => {\"taskId\":\"<task_uuid>\",\"status\":\"FINISHED\"}\n```\n\n⚠️ **status 字段误导最坑**：返回的 `status:\"FINISHED\"` 是**任务触发**结果，不是 ETL 执行结果。\n\n### B-5.2 查任务详情（修 bug 必经路径）\n\n```bash\nguancli fetch GET /api/task/<taskId>\n# => {\"response\":{\"taskId\":\"...\",\"status\":\"FAILED\",\"result\":{\"error\":\"...\"},\"messages\":\"\"}}\n```\n\n`response.result.error` 才是 BI 引擎给的真实错误（SQL 报错、字段找不到等）。\n\n### B-5.3 错误定位三步走\n\n```bash\n# Step 1：触发 execute 拿 taskId\ntaskId=$(guancli fetch POST /api/etl/execute \"{\\\"dataFlowId\\\":\\\"$DFID\\\"}\" \\\n  | jq -r '.response.taskId')\n\n# Step 2：等几秒再查 task error\nsleep 4\nguancli fetch GET \"/api/task/$taskId\" | jq '.response.result.error'\n\n# Step 3：根据 error 类型对照 references/part-b-errors.md 修复手册\n```\n\n### B-5.4 异步轮询写法\n\n```bash\nTASK_ID=\"<task_id>\"\nfor i in $(seq 1 30); do\n  st=$(guancli task get $TASK_ID --raw | jq -r '.response.status')\n  echo \"[$i] $st\"\n  [ \"$st\" = \"FINISHED\" ] || [ \"$st\" = \"FAILED\" ] && break\n  sleep 10\ndone\n```\n\n复杂表给 5 分钟（30×10s）一般够。\n\n---\n\n## B-6. 第四步：校验工具集\n\n```bash\n# 1. ETL 视角\nguancli etl search <ETL_NAME> -d <ETL_DIR_ID> --raw \\\n  | jq '.response.contents[0] | {dataFlowId,name,status,lastExecution,outputs}'\n\n# 2. 节点级预览（不用 execute 也能看任意节点输出 — 修 bug 利器）\nguancli etl preview <DFID> <NODE_ID> --limit 5 --timeout 120\n\n# 3. 数据集视角\nguancli ds search <OUTPUT_DS_NAME> --raw\n\n# 4. 实际数据预览\nguancli ds preview <OUTPUT_DSID> --limit 10\n\n# 5. 行列数对账\nguancli ds get <OUTPUT_DSID> --brief\n```\n\n⚠️ 保存后 OUTPUT 节点 ID 会变成 `id_<ts>_<n>_out`，preview 时用新 id：\n\n```bash\nguancli etl get <DFID> --raw \\\n  | jq -r '.data.actions[] | select(.type==\"OUTPUT_DATASET\") | .id'\n```\n\n---\n\n## B-7. 第五步：删除拓扑\n\n### ⛔ B-7.0 删除前的硬性安全闸（V1.3.1 新增）\n\n**Agent 在执行任何 `DELETE /api/data-source/` 或 `DELETE /api/etl/` 前必须满足以下全部条件，否则拒绝执行：**\n\n1. **用户已逐项明确确认**：列出本次将删除的所有 dsId / etlId（含 ETL 名 + 输出表名 + 路径），用户回复\"确认删除\"或等价明确指令。**模糊回复（如\"嗯\"、\"可以\"、\"清理一下\"）不算确认。**\n2. **下游引用已切流**：通过 `guancli ds get <dsId> --assoc` 或 B-10 双源审计验证目标 ds 的下游 ETL 与看板（page）已切到 v2，无任何活跃引用。\n3. **新链路对账通过**：v2 对应 ETL `status:FINISHED`，行数与 v1 差异 <1%，关键字段一致（参考 B-7.3 checklist）。\n4. **批量删除分批确认**：单次删除 ≤ 5 张表；超过 5 张必须分批，每批单独走步骤 1。\n\n**Agent 默认行为**：在 ETL 治理 / 重写 / 字段裁剪等任务里，**永远不要主动建议删除**。把待删清单作为 `governance-report.md` / `migration-status.md` 的一节产出给用户审阅，由用户主动指令\"删 X / 删这一批\"才执行。**新旧并行是默认终态，不是过渡态**——除非用户明确要求收敛。\n\n> 这条闸跟 B-13 红线、B-17.10 完成标准里的\"对账确认后再处理旧表\"一脉相承。**误删一张被看板用着的 ds，恢复成本高过保留旧链一年。**\n\n### B-7.1 关键约束：先 ds 后 etl\n\n```bash\nguancli fetch DELETE /api/etl/<etl_id>\n# => {\"error\":{\"status\":2002,\"message\":\"输出数据集已存在\"}}  ← 失败！\n```\n\n正确顺序：\n\n```bash\n# Step 1：先删数据集\nguancli fetch DELETE /api/data-source/<dsId>\n\n# Step 2：再删 ETL\nguancli fetch DELETE /api/etl/<etlId>\n```\n\n### B-7.2 数据集 endpoint 反推血泪史\n\n```text\nDELETE /api/dataset/<id>     ← No static resource dataset/...\nDELETE /api/datasource/<id>  ← No static resource datasource/...\nDELETE /api/ds/<id>          ← No static resource ds/...\nDELETE /api/dataflow/<id>    ← No static resource dataflow/...\n✅ 正确：\nDELETE /api/data-source/<id>\n```\n\n### B-7.3 删除前 checklist\n\n- [ ] v3 对应 ETL Status = FINISHED\n- [ ] v3 输出数据集行数 vs v2 行数（差异 < 1%）\n- [ ] v3 输出字段集 = v2 字段集 - 设计砍掉的\n- [ ] 看板（page）依赖 v2 数据集的，已先切到 v3\n- [ ] 下游 ETL 依赖 v2 输出的，已先切到 v3\n\n---\n\n## B-9. 报错修复手册（10 类真坑 · 速查）\n\n每条只列**触发现象 + 一句根因 + 一句修复方向**；完整修复方案 + SQL 示例 + 升级版坑见 **[references/part-b-errors.md](references/part-b-errors.md)**。\n\n| 坑号 | 触发现象 | 根因 / 修复方向 |\n|---|---|---|\n| **1** | `请输入ETL名称` / `保存路径无效` | 顶层 `parentDirId` 缺失或填错 → 必须是 `dirType=ETL` 那棵树的 id |\n| **2** | 保存成功但 execute 数据为空 | 上游 `inputDsId` 只有读权限没运行权限 → 换有权限的输入或写自包含 ETL |\n| **3** | 列名带隐藏 `\\n` 找不到字段 | SQL 里要 `` `带换行的原字段名` AS `干净别名` ``；升级版坑：fieldAlias 与 SQL 中换行+空格不一致 |\n| **4** | `WHERE field <> NULL` 输出 0 行 | SQL 标准里 `<> NULL` 永远是 unknown → 必须 `IS NOT NULL` / `IS NULL` |\n| **5** | `cannot resolve column` | 字段引用与 INPUT_DATASET 的 `relativeFieldAlias` 错位 → 编译时按节点级别名替换 |\n| **6** | `Syntax error at or near ';'` | CTE 内 trailing `;` + 中文注释 → 用 regex 去除 `FROM n_id_xxx;` 后的 `;` 与注释 |\n| **7** | `AMBIGUOUS_REFERENCE` | FROM/JOIN 同表别名同名 → 改 FROM 别名为 s2，对齐 ON 子句 |\n| **8** | `s2.xxx 找不到` | FROM 表错位（自连而非 JOIN 不同表） → 修正 JOIN 目标表 |\n| **9** | `NUM_COLUMNS_MISMATCH` | UNION 列数不一致（老引擎自动补 NULL，新引擎严格化） → 手工对齐 SELECT，缺的用 `NULL AS xxx` |\n| **10** | 日期比较恒为 false | `WHERE order_date < 'today_field'` 字符串字面量 → 改 `date_sub(current_date(), 1)` |\n\n---\n\n## B-10. 字段使用度审计（双源扫描）\n\n### B-10.1 方法论\n\n字段裁剪不能只看看板（page）—— 下游 ETL 也消费字段。**双源 0 引用**才能安全裁。\n\n```bash\n# 1. 拉数据集所有下游\nguancli ds get <dsId> --assoc\n# 输出 N 个下游：M 个 ETL + K 个 PAGE\n\n# 2. 批量 page get + etl get 落本地\nfor id in <ids>; do\n  guancli page get $id > pages/$id.txt\n  guancli etl get $id > etls/$id.txt\ndone\n\n# 3. 对每个字段做 grep 双源统计\nfor fld in <field_list>; do\n  page_cnt=$(grep -c \"$fld\" pages/*.txt)\n  etl_cnt=$(grep -c \"$fld\" etls/*.txt)\n  if [ \"$page_cnt\" = \"0\" ] && [ \"$etl_cnt\" = \"0\" ]; then\n    echo \"🟥 $fld → 真 0 引用，可裁\"\n  fi\ndone\n```\n\n### B-10.2 实测对照（必看）\n\n```text\n某千万级订单明细表：43 字段、5GB\n全量扫描：29 page + 14 etl\n仅看板抽样：17 个 0 引用候选\n双源全扫描：仅 2 个真 0 引用\n误删任何一个 → 下游 ETL 跑挂\n```\n\n**只看看板会高估 8 倍可裁字段，必须 page+etl 双源。**\n\n---\n\n## B-11. v2 → v3 批量改造 SDK（速查）\n\n`v3_sdk.mjs` 三个核心 API：\n\n```js\ntransformV2ToV3({ v2PayloadFile, v3Name, removeInputs, newSql, inputMap, description })\npushAndExecute(v3Name, payloadPath)   // direct-save → execute\ncheckStatus(v3Name)                    // guancli etl search → parse Status\n```\n\n`transformV2ToV3` 内部 7 步关键陷阱：**SQL 字段名是 `sql` 不是 `sqlScript`**（最大坑） · 重排节点 ID 时 sources 数组要同步 · 删除 INPUT 后 input 索引重排 · meta 字段要同步更新。\n\n📖 **[references/part-b-sdk.md](references/part-b-sdk.md)** — 完整 7 步实现 + 时间窗口缩减实战（v2 近 3 月 → v3 昨日窗口的 regex 替换样板）。\n\n---\n\n## B-12. 批量迁移工程经验（30+ 表实战）\n\n1. **先治理后写入**：跳过治理直接写 = 把混乱重做一遍。\n2. **payload 全部本地生成**：写编译器把每个旧 ETL 的 meta 编译成三段式 payload，存 `payloads/<name>.json`。\n3. **分批保存**：一次 5–10 张 direct-save，避免单次失败影响整批。\n4. **预览先于执行**：保存完先 `etl preview` 看 OUTPUT 节点能不能出数据；能出来再 execute。\n5. **节点 ID 重映射**：保存后 OUTPUT 节点 ID 变成 `id_<ts>_<n>_out`，从 `etl get` 拿新 id。\n6. **失败修复就地更新**：改 payload 加 `dataFlowId` 再 POST，不要删了重建。\n7. **复用旧 payload**：v2 payload 作为模板，改名+改 SQL+改输入。30 个 ETL 中 22 个用这种方式。\n8. **失败定位用 task error**：每个 task 详情里 `result.error` 是真实失败原因，必看。\n9. **批量任务异步监控**：`until` 循环 + `etl search | grep -c PROCESSING` 比单 task 轮询效率高。\n10. **新旧并行**：v2 链路与 v1 并行，对账无误后再下线 v1。\n\n> 💡 **30+ 张表跨多日的工程必须走 ExecPlan**：不要靠零散 todo + 群消息 + 临时 markdown 来追踪进度。直接走 **B-17.11**（在 [references/part-b17-fullchain-rewrite.md](references/part-b17-fullchain-rewrite.md)）的 ExecPlan 工作法——四个活文档章节（Progress / Surprises & Discoveries / Decision Log / Outcomes & Retrospective）能把治理判断、循环依赖拆法、字段隐藏换行这类\"踩坑—修复\"轨迹完整落到一份自包含文档里，下一个接手的人不用问任何上下文就能继续。\n\n---\n\n## B-13. ETL 治理与写入红线\n\n- ❌ 不要试 `/api/directory/create` 这类拼凑路径，全部 5001。\n- ❌ 不要给 `dirType` 写 `DATA_PROCESS_ETL` `SMART_ETL` `DATAFLOW`，只接受 `ETL` 和 `DATA_SET`。\n- ❌ 不要把 `OUTPUT_DATASET.parentDirId` 填成 ETL 目录 id —— 报\"保存路径无效\"。\n- ❌ **不要把 SQL 字段名写成 `sqlScript`**，正确是 `sql`（写错时 direct-save 不报错但 SQL 不生效）。\n- ❌ 不要在 SQL 里写 `<> NULL` 或 `= NULL`，用 `IS NOT NULL` / `IS NULL`。\n- ❌ 不要假设 INPUT_DATASET 字段名干净 —— 先看 `relativeFieldAlias` 和实际预览。\n- ❌ 不要 execute 完就走人 —— `status:FINISHED` 是任务触发结果，不是 ETL 执行结果。要 `GET /api/task/<id>` 拿 `result.error`。\n- ❌ 不要假设节点 ID 重排不影响 SQL —— 删除 INPUT_DATASET 后 input 位置式索引会变。\n- ❌ **未经用户逐项明确确认，绝不执行任何 DELETE 操作**（含 `/api/data-source/` 和 `/api/etl/`）—— Agent 默认行为是把待删清单产出给用户审阅，由用户明确指令才执行。详见 **B-7.0 删除前的硬性安全闸**。模糊回复（\"嗯\"、\"可以\"、\"清理一下\"）不算确认。\n- ❌ 不要为了\"清理\"删旧 ETL —— 并行做新链路、对账确认后再处理旧表。新旧并行是默认终态，不是过渡态。\n- ❌ 不要直接 `DELETE /api/etl/<id>` —— 必须先 `DELETE /api/data-source/<dsId>` 再删 ETL。\n- ❌ 不要试 `DELETE /api/dataset/`、`/datasource/`、`/ds/` —— 正确是 `/api/data-source/`（带连字符）。\n- ❌ 不要给 INPUT_DATASET 用没有运行权限的 dsId —— 保存能过，执行会拿不到数据。\n- ❌ 不要复用 OUTPUT 节点 id 作为 preview 参数 —— 保存后会变成 `id_<ts>_<n>_out`。\n- ❌ 不要跳过治理扫描直接重建 —— 不识别循环依赖和重复主题域，重建出来还是一团乱麻。\n- ❌ 不要把\"是不是被引用\"等同于\"该不该保留\" —— 看板 APP 表常常没下游 ETL，要单独看看板侧。\n- ❌ 不要让 DIM 维表依赖 DWS/APP 层 —— 这是循环依赖最常见的根源。\n- ❌ 不要只看看板做字段裁剪 —— 实测仅看板会高估 8 倍可裁字段，必须 page+etl 双源。\n- ❌ 不要假设老 ETL SQL 写法在新引擎也能跑 —— 5 类历史 bug（trailing `;` / UNION 列差 / 字段名换行+空格 / self-join 别名同名 / 字符串字面量与 DATE 比较）会暴露。\n- ❌ 不要忘记 OPTIONS 探测 —— 找未知 endpoint 时比盲发 POST 高效 10 倍。\n\n---\n\n## B-14. ETL 写入侧 API 速查\n\n| 操作 | 方法 | 路径 / 命令 |\n|---|---|---|\n| 探测 method | OPTIONS | `/api/<any-path>` |\n| ETL 目录树 | GET | `/api/directory/ETL/authorized-tree` |\n| 数据集目录树 | GET | `/api/directory/DATA_SET/authorized-tree` |\n| 建目录 | POST | `/api/directory` body: `{name, parentDirId, dirType}` |\n| 抓 ETL 详情 | – | `guancli --raw etl get <id>` |\n| 写入 ETL（创建/更新） | POST | `/api/etl/direct-save --stdin` |\n| 触发执行 | POST | `/api/etl/execute` body: `{dataFlowId}` |\n| 查任务真错误 | GET | `/api/task/<taskId>` → `.response.result.error` |\n| 节点级预览 | – | `guancli etl preview <DFID> <node_id>` |\n| 删数据集（先） | DELETE | `/api/data-source/<dsId>` |\n| 删 ETL（后） | DELETE | `/api/etl/<id>` |\n\n---\n\n## B-15. 实战 ID 速查（模板）\n\n> 跨多日的大型重构（B-17 / 30+ 表）建议在仓库根维护一份本地 ID 速查表，避免每次都用 `guancli` 翻树。下面是模板，把 `<...>` 占位符替换成你自己 BI 实例里的真实 ID。**不要把这份表 commit 到公开仓库。**\n\n| 名称 | ID | 说明 |\n|---|---|---|\n| 旧 ETL 父目录 | `<v1_etl_dir_id>` | v1 ETL 目录 |\n| 旧数据集父目录 | `<v1_ds_dir_id>` | v1 数据集目录 |\n| **v2 ETL 目录** | `<v2_etl_dir_id>` | 新建 ETL 落这里 |\n| **v2 数据集目录** | `<v2_ds_dir_id>` | OUTPUT_DATASET 落这里 |\n| 数据集树根目录 | `<ds_root_id>` | dirPath 第一层 |\n| ETL 树根目录 | `<etl_root_id>` | – |\n| PoC ETL | `<poc_etl_id>` | 第一个跑通的最小 ETL |\n| PoC 输出数据集 | `<poc_output_ds_id>` | 同上输出 |\n| PoC 输入数据集 | `<poc_input_ds_id>` | 小表，权限可运行 |\n\n如果上面 ID 失效（被删/改名），用以下命令重新拿：\n\n```bash\nguancli fetch GET /api/directory/ETL/authorized-tree | jq '.response | .. | objects | select(.name==\"<你的 v2 目录名>\")'\nguancli fetch GET /api/directory/DATA_SET/authorized-tree | jq '.response | .. | objects | select(.name==\"<你的 v2 目录名>\")'\n```\n\n---\n\n## B-17. 全链路重写方法论（CTO 张进）\n\n> 这套是观远 CTO 张进的 SmartETL 完整改写经验。它跟 B-2 治理扫描互补：B-2 解决\"有哪些 ETL 该治理\"，B-17 解决\"具体重写一条链路时怎么做才不留尾巴\"。\n>\n> **核心区别**：B-17 强调**全链路追到原始源**，不接受只重写最终 ADS。如果用户说\"把这条链路重新做一遍\" / \"替换数据源\" / \"做副本页验收\"，必走 B-17。\n\n📖 **[references/part-b17-fullchain-rewrite.md](references/part-b17-fullchain-rewrite.md)** — 完整方法论 11 节：何时用 B-17 / 4 件交付 / 8 条硬规则 / 5 步标准工作流 / 三层验收（数据集/副本页/卡片级）/ 差异追踪 5 步法 / 空快照处理标准 / 标准交付物清单 / 6 类专属常见坑 / 完成标准 6 项 / **B-17.11 用 ExecPlan 管理重写工程**（含 SmartETL 改写专用 ExecPlan 骨架，拿去直接填空）。\n\n**最简口诀**（10 秒决定要不要进 B-17）：\n- 只新建 1 个 SQL 节点数据集 → 走 B-3 ~ B-9，不进 B-17\n- 涉及\"页面副本验收\"或\"卡片级数值对账\"或\"全链路追到原始源\" → 必进 B-17\n- 30+ 表 / 跨多日 / 循环依赖拆解 → 进 B-17 + 走 B-17.11 ExecPlan\n\n---\n\n# 🆎 Part C：自定义图表开发与排障（V1.1 新增）\n\n> **并行参考（V2.0 标注）**：观远 maintainer wubaoqi 在 2026-04-29 发布了 `@wubaoqi/guan-chart-kit`（React + ECharts 组件库，专为观远 BI 设计）和 `@wubaoqi/guan-chart-kit-usage-skill`（agent-skill，教 SuperApp 接 chart-kit）。两条路线区别：\n> - **chart-kit 路线**（wubaoqi）：从零搭新看板，走**组件接入** + npm 依赖管理，适合标准化复用\n> - **本 Part C 路线**：在既有卡片上做 HTML/CSS/JS 注入 hack，绕过组件直接改 DOM/data，适合改造既有页面、临时 overlay、固定卡片\n>\n> 两者互补，按\"是新搭还是改造\"分流。\n\n> 来源：观远 CTO 张进的自定义图表注入实战经验。涵盖 HTML/CSS/JS 注入、runtime 取数、固定卡片、遮罩层、z-index/stacking context、路由清理，以及任何**必须在真实观远页面里做浏览器验证**的前端问题。\n\n## C-〇. 何时用 Part C\n\n任务涉及观远 BI **自定义图表**的：\n- 前端代码（HTML/CSS/JS）\n- 运行时取数（`renderChart` 的 `data` 参数解析）\n- 页面级 DOM 操作（固定卡片、overlay、mask）\n- 浏览器层级问题（z-index、stacking context、pointer-events）\n- 路由切换清理、复制页 card id 重定位\n- 懒加载导致脚本不执行\n- 必须在真实页面验证的问题\n\n不用 Part C 的情况：只是在观远 UI 里点几下做卡片配置，不写代码 → 走 Part A。\n\n## C-1. 快速开始原则（6 条）\n\n1. **要注入 HTML/CSS/JS** → 用「自定义图表」，不用「自定义图表 Lite」\n2. **先在真实观远页面复现问题，再改代码**\n3. **先确认 live 页实际运行的是哪份脚本**，再判断问题\n4. **脚本开始漂移或多次局部修补失效时，优先给完整 JS**，不要继续发零碎 diff\n5. **每次结构性修改后回浏览器重新验证**\n6. **遇到取数问题，先看 `GDPlugin().init(renderChart)` 的 runtime 入参**，不要先假设它等于 `/api/card/.../data` 的 HTTP 包裹层\n\n## C-2. runtime 契约（必须知道）\n\n观远当前的 runtime 回调签名是：\n\n```javascript\nfunction renderChart(data, clickFunc, config, helpers) {}\n```\n\n⚠️ **常见误解**：\n- ❌ 把第一个参数 `data` 当 DOM 根节点 —— 错。要自己从 `document.querySelector(...)` 或 `document.body` 获取 DOM。\n- ✅ `helpers` 常见为 `{ refreshData, clickFunc }`\n\n`data` 形态多变，常见 5 种：\n\n```javascript\n// 形态 1（最常见）\n[\n  [\n    { name: \"payload_json\", data: [\"{...}\"] },\n    { name: \"report_date\", data: [\"2026-03-18\"] }\n  ]\n]\n\n// 形态 2\n[{ name, data }, ...]\n\n// 形态 3\n{ chartMain: { columns: [...] } }\n\n// 形态 4\n{ response: { viewData: [...] } }\n\n// 形态 5\n[{ payload_json, report_date }]\n```\n\n**结论**：优先围绕 runtime `data` 写解析逻辑。`/api/card/.../data` 只用于核对证据，不要把它当 callback 结构直接照搬。\n\n## C-3. payload_json 取数排障（速查）\n\n📖 **[references/part-c-payload-json.md](references/part-c-payload-json.md)** — 三种\"拿不到 payload\"的细分 / 最快判断方式 / `JSON.parse` 硬规则 / 截断错误（`Unterminated string` / `Unexpected end of JSON input`）的判断 / 推荐方案：拆列而非整包 JSON。\n\n**最简结论**：JSON.parse 失败且报截断错时，**优先判断为数据链路把长字符串截断了**，不要继续堆兼容解析逻辑。改数据方案——把整份报告拆成多列（`report_date` / `key_insights_md` / 各 section 列）传给前端，比 runtime 再 `JSON.parse(payload_json)` 稳得多。\n\n## C-4. 固定卡片 / overlay 场景\n\n### C-4.1 保守做法\n\n- ✅ **只移动目标卡片内容**，不要把整页都抽进 overlay\n- ✅ overlay 和 mask **挂到当前页面根节点**，**不要挂到 `body`**\n  - 挂到 body 的后果：切页后残留 / 与原生浮层打架 / 跟右侧锚点导航层级冲突\n- ✅ overlay 的 z-index 要够用，但**不能压过观远原生导航、浮层、工具条**\n- ✅ 卡片尺寸变化时，主动派发 `resize`（立即一次 + 延迟几次）让图表重排\n\n### C-4.2 z-index 基线（已验证）\n\n```text\noverlay 容器     约 8\nmask            约 1\n固定卡项        约 20，按需要递减\n```\n\n目标：**高于滚动内容，低于观远原生导航、菜单、工具层。**\n\n### C-4.3 让加载器看得到注入卡，但用户不必看到\n\n- 观远自定义图表 iframe **是懒加载的**\n- 注入卡放在首屏以下 → 初次进页时脚本可能根本不执行\n\n**可靠做法**：\n1. 把注入卡**放在首屏**\n2. 查看态视觉隐藏\n3. **编辑态恢复可见**（让用户能找到并编辑）\n\n## C-5. 页面生命周期管理\n\n### C-5.1 必须主动销毁注入物的场景\n\n- URL 不再匹配目标 page id\n- 进入编辑态\n- 切到 `pageRenderType=phoneView`\n- 客户端路由离开当前页\n\n**只在目标桌面查看态重建。**\n\n### C-5.2 复制页面后 card id 全变\n\n- 观远复制页面会生成新的 card id\n- 继续使用原页面硬编码 id 通常**不会显式报错，只会悄悄失效**\n- 复制页一定要重新确认 card id\n\n### C-5.3 MutationObserver 死循环陷阱\n\n- 监听 `body subtree` 后又在回调里改样式 → 容易反复触发，卡死页面\n- ✅ 更稳的做法：低频轮询 + 精准 rect 比较\n\n## C-6. 浏览器排障清单\n\n### C-6.1 改代码前先看 live runtime\n\n检查：\n- 当前 URL 和 page id\n- `window` 上是否已有旧版注入 key\n- `__gd_overlay__` 和 `__gd_overlay_mask__` 是否存在\n- 页面里是否留有历史实验节点\n\n### C-6.2 找到真正可点击的 DOM\n\n不要把\"看到的文本节点\"误当成真正交互节点。对右侧锚点导航，真正有用的目标往往是：\n- 打开按钮图标\n- tab 按钮\n- pin 图标\n\n### C-6.3 用 `elementFromPoint` 查层级问题\n\n控件可见但点不动时，查控件中心点命中的真实元素：\n- 命中 fixed card 或 overlay 子节点 → 层级问题\n- 命中正确控件但还不工作 → 之前点错节点 / 某个祖先禁用了 pointer events\n\n### C-6.4 最终用真实浏览器点击验收\n\n不要只靠 `page.evaluate(... click())`。要用真实浏览器点击，确认：\n- tab 切换是否真的生效\n- 页面滚动位置是否真的变化\n- pin 状态是否真的切换\n\n## C-7. 保留原生浮动 UI\n\n- ❌ 没必要时，**不要重绘或克隆**观远原生浮动控件\n- ✅ 优先修 stacking context、pointer-events、opacity，而不是复制一套控件\n\n原生控件不可点时，按这个顺序排查：\n1. overlay 是否盖住它\n2. mask 是否拦截事件\n3. 祖先节点是否被设成 `pointer-events: none`\n4. 原控件是否被历史实验隐藏\n\n## C-8. 交付规则\n\n- ✅ 用户要手工粘贴时，**默认给完整 JS**，不给局部片段\n- ✅ 如有需要，同时明确给出 HTML / CSS\n- ✅ 脚本不稳定时，完整替换优于局部修改\n- ✅ 页面已经完全坏掉时，先给最小恢复版救回来：\n\n```javascript\nfunction renderChart() {}\nnew GDPlugin().init(renderChart);\n```\n\n提醒用户执行：**保存 → 发布 → 强刷查看页**。\n\n## C-9. 最终验收清单\n\n最终一定要在真实页面验证：\n- [x] 页面加载\n- [x] 查询 / 筛选切换\n- [x] 滚动\n- [x] 左侧栏展开收起\n- [x] 路由切页\n- [x] 编辑态进出\n- [x] 桌面 / 手机态切换\n- [x] 原生浮动控件是否仍可见、可点\n\n## C-11. 深度参考资料\n\n遇到复杂的固定卡片 / overlay / 锚点导航问题时，读：\n\n- [references/custom-chart-playbook.md](references/custom-chart-playbook.md) — 张进的完整自定义图表排障手册原文（含固定层与真实布局错位修正、右侧原生导航失效详细处理、elementFromPoint 实战、MutationObserver 死循环深入分析）\n- [references/etl-rewrite-original.md](references/etl-rewrite-original.md) — 张进的 SmartETL 改写经验原文（B-17 章节就是基于它整合的，这里是未删减版）\n\n## C-12. HTML 应用化看板生成（V2.1.1 新增）\n\n> **触发**：用户说\"更高级 / 更复杂 / 更好 / 应用 / 自定义模块 / 不要限制在标准看板 / 最完美版本 / HTML 看板\"——立刻切到这条路线，**不要**按 Part A 的标准 KPI/折线/柱状图套路交付。\n>\n> **架构**：原生 Page + 原生 selector + HTML SDK 可见层（`createCustomChart().setSubType(CustomChartSubType.SDK).loadContent(...)`）+ DATA_GRID dataView 数据层。后端负责权限/刷新/聚合/筛选，前端负责叙事/布局/SVG-HTML 可视化。\n>\n> **不能跳的两条坑**（2026-05-14 `app.guandata.com` 上 `<demo-domain>` 实例实测）：\n> 1. `guanvis-skill` DSL 的 `.linkToAll()` **不会** 把 selector 联到 custom chart 内部 dataView——必须走 **资源包级 descriptor patch**（不要去调 `/api/card/.../edit/session`，会返回 `60004 此操作只能在草稿页面执行`）。\n> 2. `guancli card preview` 的命令面 V2.1 起 **不再有 `--pg-id`**，老写法 `card data <id> --pg-id <pg_id>` 已废弃；同时不同子命令返回根字段不同（`page get → .data`、`card get → .response`），jq 统一写 `.data // .response // .`。\n\n📖 **[references/part-c-html-dashboard.md](references/part-c-html-dashboard.md)** — 完整方法论 15 节：何时切到 HTML 应用看板 / 总体架构 / SDK vs ECHARTS_LITE 决策 / dataView contract / 共享 runtime API / 24 字符 ID 校验 / selector → custom chart dataView 联动补丁 / 12 步 pack-patch-upload 工作流 / 字段粒度后缀兼容（`月份` / `月份 (月)` / `年月`）/ guancli V2.1 命令面（含 `.data // .response` 兼容）/ 四层验收清单 / 12 类常见错误表 / 模板包索引。\n\n🧰 **模板包**：[`templates/html-dashboard/`](templates/html-dashboard/) — `charts/html_common.js` (GDHTML runtime) + `html_base.css` + 2 个起手模块（executive / trend）+ `scripts/patch_selector_linkage.js`（CLI 参数化，弥补 `linkToAll` 联不到 custom chart dataView 的盲区）。\n\n---\n\n## 📚 References 目录\n\n> 本 SKILL.md 主文是路由层；以下 8 个新文件（V1.4.0 引入）+ 4 个原贡献者文件构成完整知识库。详细索引：\n\n**马甲蒸馏版（V1.4.0 新建）：**\n\n| 文件 | 何时读 | 行数 |\n|---|---|---|\n| [part-a-commands.md](references/part-a-commands.md) | 写卡片、配 `--task` 缓存隔离、清理缓存时 | ~120 |\n| [part-a-cards.md](references/part-a-cards.md) | 写 `create-and-get` JSON 前查参数 / 图表类型 / filters / 看示例 | ~240 |\n| [guancli-commands.md](references/guancli-commands.md) | 用 guancli 探索 ETL/指标/任务/表单/通用 fetch 时 | ~160 |\n| [part-b-payload.md](references/part-b-payload.md) | 写新 ETL payload / 复用 4 阶段脚本时 | ~175 |\n| [part-b-errors.md](references/part-b-errors.md) | execute 失败、对照 `task error` 找修复方案时 | ~150 |\n| [part-b-sdk.md](references/part-b-sdk.md) | 30+ 表批量改造、写 `transformV2ToV3` 时 | ~60 |\n| [part-b17-fullchain-rewrite.md](references/part-b17-fullchain-rewrite.md) | 全链路 SmartETL 重写、副本页验收、ExecPlan 管理时 | ~290 |\n| [part-c-payload-json.md](references/part-c-payload-json.md) | runtime 拿不到 payload_json / JSON.parse 失败时 | ~60 |\n| [part-c-html-dashboard.md](references/part-c-html-dashboard.md) | 用户说\"更高级 / 应用化 / 不限标准看板\"，从零生成 HTML 化分析应用时（V2.1.1 新建） | ~360 |\n| [internal-nexus-install.md](references/internal-nexus-install.md) | 内网同事发来 `guan*-skill` tarball、本地装观远官方私服 skill 时（V2.1 新建） | ~80 |\n\n**餐饮 BI 公式实战库（V2.1.5 新建，去敏蒸馏自两段餐饮连锁 BI 履职 + 39 个生产 ETL）：**\n\n| 文件 | 何时读 | 行数 |\n|---|---|---|\n| [restaurant-bi-formulas/README.md](references/restaurant-bi-formulas/README.md) | 进入业务公式库的总入口 / 字段词典 / 5 条最常踩坑 | ~90 |\n| [restaurant-bi-formulas/01-date-and-time.md](references/restaurant-bi-formulas/01-date-and-time.md) | 写时间范围（T-1 / 本月 / 上月 / 近 N 天 / 时间宏 / 用餐时段 / 跨月对齐） | ~180 |\n| [restaurant-bi-formulas/02-customer-and-membership.md](references/restaurant-bi-formulas/02-customer-and-membership.md) | 新老客 / 会员属性 / 消费频次（3 口径）/ 复购（跨天 vs 非跨天）/ 留存流失 / RFM / 注册前后行为 / 90 天复购分桶 | ~350 |\n| [restaurant-bi-formulas/03-revenue-kpi.md](references/restaurant-bi-formulas/03-revenue-kpi.md) | AC / ADS / ADT / AUD / Comp / TC_CRM% / NS_CRM% / 营收占比 / 客单分桶 / 累计消费 | ~180 |\n| [restaurant-bi-formulas/04-channel-and-store.md](references/restaurant-bi-formulas/04-channel-and-store.md) | 业务渠道（堂食/外卖）/ 订单子渠道大 case / 时效类型 / 搭配类型 / StoreDate / 成长类型 / 注册门店优先级回填 | ~210 |\n| [restaurant-bi-formulas/05-coupon-and-discount.md](references/restaurant-bi-formulas/05-coupon-and-discount.md) | 核销率 / 折扣率 / 折扣分桶 / 券类型分流 / 注册第一张券 / 30 日优惠订单比例 | ~110 |\n| [restaurant-bi-formulas/06-sql-utils.md](references/restaurant-bi-formulas/06-sql-utils.md) | 字符串拆解 / `explode+split` / `collect_set+concat_ws` / 开窗排名（ROW_NUMBER/RANK/DENSE_RANK）/ 累计窗口 / 多表 LEFT JOIN | ~210 |\n| [restaurant-bi-formulas/07-data-quality-traps.md](references/restaurant-bi-formulas/07-data-quality-traps.md) | `NULL vs 0` / 三态判断 / 口径歧义 / 重复字段名 / A↔B↔通用字段对照表 / 日期边界 | ~250 |\n| [restaurant-bi-formulas/08-etl-engineering-patterns.md](references/restaurant-bi-formulas/08-etl-engineering-patterns.md) | **ETL 工程范式**：10-CTE DWD 宽表底座 / 轻节点重 SQL vs 重节点轻 SQL 哲学 / 财务双源对账 / POS 系统归一化 / 会员生命周期多输出 / Cohort 日期×门店网格（蒸馏自 39 个 V1 生产 ETL）| ~280 |\n| [restaurant-bi-formulas/09-etl-catalog.md](references/restaurant-bi-formulas/09-etl-catalog.md) | **39 个 V1 生产 ETL 索引清单**：按 11 业务域分类（基础维表 / DWD / 会员档案 / 顾客行为 / 财务营收 / 营销目标 / 私域社群 / 活动券 / 评价管理 / 业务标签 / 数据质量）+ 每 ETL 的节点/输入/输出/SQL 速查 + 复用决策表 | ~190 |\n\n> 触发场景：\"如何算复购率 / 客单价 / 同店增长\" / \"怎么判新老客\" / \"用餐时段怎么分桶\" / \"为什么会员数对不上\" / **\"我要写 DWD 宽表 / 评价 pipeline / 财务对账\"** — 直接进 [restaurant-bi-formulas/README.md](references/restaurant-bi-formulas/README.md) 路由表。和 Part A/B/C 正交（按业务领域分，非按平台操作分）。\n\n**贡献者原文（不修改，照引）：**\n\n| 文件 | 来源 |\n|---|---|\n| [etl-rewrite-original.md](references/etl-rewrite-original.md) | CTO 张进 — SmartETL 改写经验未删减原文 |\n| [custom-chart-playbook.md](references/custom-chart-playbook.md) | CTO 张进 — 自定义图表排障完整 playbook |\n| [execplan-spec.md](references/execplan-spec.md) | OpenAI Codex — ExecPlan 完整规范 |\n| [agents-rule.md](references/agents-rule.md) | OpenAI Codex — AGENTS.md 极简调度规则 |\n\n---\n\n## 📋 版本记录\n\n**最新：V2.1.5** (2026-05-18) — **新增 `references/restaurant-bi-formulas/`：餐饮连锁 BI 公式实战库**（10 个 markdown，2881 行，全脱敏）。蒸馏自两段连续的餐饮 BI 分析师履职 + 39 个生产 ETL，含：① **公式手册**（7 章 60+ SQL）—— 日期时间/顾客会员（RFM 8 类 × 营销策略 + R 阈值多档分级）/营收 KPI（AC/ADS/ADT/Comp/CRM%）/渠道门店（多渠道评价 pipeline）/券折扣/SQL 工具箱/数据质量陷阱；② **6 大 ETL 工程范式**（08 章）—— 10-CTE DWD 宽表底座 / 轻节点重 SQL vs 重节点轻 SQL 工程哲学 / 财务双源对账 / POS 系统识别归一化 / 会员生命周期多输出 / Cohort 日期×门店网格；③ **39 个 V1 生产 ETL 索引清单**（09 章）—— 按 11 业务域分类（基础维表/DWD/会员档案/顾客行为/财务营收/营销目标/私域社群/活动券/评价管理/业务标签/数据质量）+ 每 ETL 节点/输入/输出/SQL 速查 + 复用决策表。SKILL.md 主路由表新增餐饮业务公式入口；frontmatter `version: \"2.1.4\"` → `\"2.1.5\"`；纯 docs 增量 + 索引扩充，零 breaking change。\n\n**V2.1.4** (2026-05-15) — 命令面同步 `@guandata/guancli@1.0.21`：① **`metric query` 泛化查询**（1.0.20 新增）完整接入 —— `--compare yoy|mom`、`--xtd ytd|mtd`、`--recent 7d|4w`、`--percentage --percentage-dim`、`--rank-top N --rank-dim`、`--last`、兜底 `--adv-calc-json`，业务侧\"同比/累计/最近 N 天/占比/Top N\"一行命令出数，命令面与判断表写进 [references/guancli-commands.md](references/guancli-commands.md)；② **`card preview -f excel` 导出**（1.0.20）+ `--limit` 默认抬到 10000 + 排序取数下限 10000；③ **错误输出更干净**（1.0.21），`guancli ... 2>&1 | head` 不再被 Usage 帮助淹没，Part B 报错速查脚本更可靠。manifest 依赖约束 `@guandata/guancli@^1.0.19` → `^1.0.21`；版本与依赖元数据全部对齐。\n\n**V2.1.3** (2026-05-14) — 纯文档 patch：刷新 `docs/architecture.svg` v2.1.x 功能说明图，从 v1.5 时代\"三块拼图\"升级到 v2.1.x 现实——新增\"三件套生态\"条带（guancli 1.0.19 / guanvis-skill 0.1.13 / majia-guanyuan 2.1.3）+ Part C-12 HTML 应用化看板 NEW 高亮模块（粉紫渐变 + glow）+ 底部数字校准。同步生成 2880×1840 @2x DPI PNG 渲染产物（`docs/architecture.png`，供 npm/ClawHub 页面 fallback）。`package.json#files` 把 `docs/` 也补进 npm tarball。\n\n**V2.1.2** (2026-05-14) — V2.1.1 的纯打包 hotfix：`package.json#files` 字段补上 `templates/`，让 npm install 的用户也能拿到 `templates/html-dashboard/` 起手模板包（GDHTML runtime + 2 起手模块 + patch_selector_linkage.js）。仅影响 npm 安装路径；GitHub clone / ClawHub install / `gh skill install` 路径在 V2.1.1 就已经包含 templates/。\n\n**V2.1.1** (2026-05-14) — 新增 **Part C-12：HTML 应用化看板生成**（`references/part-c-html-dashboard.md` + `templates/html-dashboard/` 模板包）；用户说\"更高级/应用化/不限标准看板\"时自动切到 SDK 子类型 + DATA_GRID dataView 数据层架构；附 `patch_selector_linkage.js` 弥补 `guanvis-skill .linkToAll()` 联不到 custom chart 内部 dataView 的盲区。`guancli card preview` 命令面同步纠正（不再有 `--pg-id`），新增 `.data // .response` jq 兼容写法和中文字段 bracket 语法速查。\n\n**V2.1.0** (2026-05-13) — `guanvis-skill@0.1.13` 内网 Nexus 上线，Part A 标准建卡路由优先指向它；新增 `references/internal-nexus-install.md` 内网 tarball 安装手册（含 macOS `com.apple.quarantine` 坑）；与官方 skill 共存表升级为三件套分工。\n\n完整变更历史见 [CHANGELOG.md](CHANGELOG.md) 或 [GitHub Releases](https://github.com/maojiebc/majia-guanyuan/releases)。\n\n## 👤 作者 / 联系\n\n**马甲（@maojiebc）** · 超级马甲\n\n如果这份 skill 帮到你，欢迎在以下任意渠道找我交流踩坑实录、提需求、报 bug，也欢迎切磋用户运营 / 数据中台 / BI 工程的实战经验：\n\n| 渠道 | 链接 |\n|---|---|\n| 📧 Email | [m9224@163.com](mailto:m9224@163.com) |\n| 🐙 GitHub | [github.com/maojiebc](https://github.com/maojiebc) |\n| 🪝 ClawHub | [clawhub.ai/p/maojiebc](https://clawhub.ai/p/maojiebc) |\n| 🐦 X | [@maojiebc](https://x.com/maojiebc) |\n| 📕 小红书 | [超级马甲](https://xhslink.com/m/4fQMJeHHWKC) |\n| 📰 微信公众号 | **超级马甲** |\n\n> 这份 skill 是 14 年用户运营 + 观远 BI 实战 + 60+ 张 ETL 写入实证沉淀出来的，问题/合作随时聊。","tags":["majia","guanyuan","maojiebc","agent-skill","agent-skills","bi-skill","business-intelligence","claude-code","claude-skill","codebuddy","codex","custom-chart"],"capabilities":["skill","source-maojiebc","skill-majia-guanyuan","topic-agent-skill","topic-agent-skills","topic-bi-skill","topic-business-intelligence","topic-claude-code","topic-claude-skill","topic-codebuddy","topic-codex","topic-custom-chart","topic-data-analysis","topic-etl","topic-gbrain"],"categories":["majia-guanyuan"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/maojiebc/majia-guanyuan","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add maojiebc/majia-guanyuan","source_repo":"https://github.com/maojiebc/majia-guanyuan","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (41,539 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:33.323Z","embedding":null,"createdAt":"2026-05-18T13:22:27.894Z","updatedAt":"2026-05-18T19:14:33.323Z","lastSeenAt":"2026-05-18T19:14:33.323Z","tsv":"'-03':4116 '-04':3901 '-05':228,329,1008,1099,1265,1301,1581,4554,5085,5196,5277,5336,5372,5424 '-1':1739,4023,4839 '-1.1':1817 '-10':2173,2739,3067 '-10.1':3071 '-10.2':3161 '-11':1266,3197,4478 '-12':154,1009,1454,3265,4503,5307,5377 '-13':330,1302,1582,2797,3410,5425 '-14':3614,4555,5278,5337,5373 '-15':1100,3678,5197 '-17':116,214,3685,3774,3794,3799,3810,3818,3854,3867,3876,3883,4499 '-17.10':2800 '-17.11':126,481,3387,3840,3886 '-18':229,4117,5086 '-2':1897,3785,3788,4067 '-2.1':1903 '-2.2':1917 '-2.3':1969 '-2.4':2052 '-2.5':2129 '-2.6':2175 '-2.7':2237 '-29':3902 '-3':2262,3862,4148 '-3.1':2266 '-3.2':2322 '-4':2384,4198 '-4.1':4203 '-4.2':4237 '-4.3':4261 '-5':2480,4279 '-5.1':2485,4282 '-5.2':2510,4295 '-5.3':2535,4312 '-5.4':2576 '-6':2616,4327 '-6.1':4330 '-6.2':4352 '-6.3':4366 '-6.4':4385 '-7':2694,4398 '-7.0':2698,3509 '-7.1':2808 '-7.2':2843 '-7.3':2763,2876 '-8':2470,4429 '-9':2911,3864,4455 '/.agents/skills/guancli':1514 '/.claude/skills/guancli':1508 '/.claude/skills/majia-guanyuan':519 '/.codex/skills/majia-guanyuan':525 '/.openclaw/skills/majia-guanyuan':522 '/01-date-and-time.md':4835 '/02-customer-and-membership.md':4853 '/03-revenue-kpi.md':4874 '/04-channel-and-store.md':4893 '/05-coupon-and-discount.md':4910 '/06-sql-utils.md':4924 '/07-data-quality-traps.md':4945 '/08-etl-engineering-patterns.md':4962 '/09-etl-catalog.md':4994 '/api':1810,1831,3626 '/api/card':4061,4141,4579 '/api/chat/public-api/theme/list-theme':1013 '/api/data-source':1796,2705,2833,2874,3501,3529,3538,3671 '/api/dataflow':2867 '/api/dataset':2849,3534 '/api/datasource':2855 '/api/directory':1749,2281,2344,2355,3636 '/api/directory/add':2279 '/api/directory/create':2273,3414 '/api/directory/data_set/authorized-tree':1784,2335,3633,3764 '/api/directory/etl/add':2277 '/api/directory/etl/authorized-tree':1780,2331,3630,3752 '/api/directory/etl/create':2275 '/api/ds':2861 '/api/etl':1774,1802,2708,2818,2841,3503,3526,3676 '/api/etl/dir':2295 '/api/etl/direct-save':1757,3653 '/api/etl/execute':1767,2493,2548,3657 '/api/etl/tree':2288 '/api/resource-atlas/dir':2302 '/api/task':1787,2519,2564,3483,3662 '/data':4062,4142 '/datasource':3535 '/desc':1214 '/ds':3536 '/dwd':5163 '/edit/session':4580 '/etl':1717 '/etl/direct-save/payload_json':47 '/filtertype':852,867 '/html':49 '/kpi':1421 '/library/application':1059 '/m/4fqmjehhwkc)':5496 '/maojiebc)':5491 '/maojiebc/majia-guanyuan.git':254 '/maojiebc/majia-guanyuan/releases)':5456 '/maojiebc](https://github.com/maojiebc)':5482 '/nexus/repository/guandata-web/':340,1312 '/overlay':135,828 '/p/maojiebc](https://clawhub.ai/p/maojiebc)':5486 '/page':760 '/readme.md':4824,5043 '/resourcekind':2291 '/skills/majia-guanyuan':528 '/sql':5021,5125,5178 '/stacking':3966 '/svg-html':4550 '/top':1172,1399,5240 '0':2070,2092,2146,2630,2970,3079,3147,3150,3155,3177,3183,4949 '0.1.13':238,333,1305,1410,1587,5300,5429 '08':5132 '09':5157 '1':418,1246,1651,1733,1823,1923,2539,2585,2620,2711,2759,2774,2828,2890,2930,3065,3083,3269,3856,4027,4105,4250,4270,4414,4559,5261 '1.0.19':307,5272,5296 '1.0.20':1095,1105,1194,5204,5251 '1.0.21':235,979,1096,1234,1235,1378,1554,5200,5258,5273 '10':645,1173,1467,1719,1894,1971,2607,2663,2913,3051,3289,3368,3611,3851,4966,5092,5134 '1000':2102 '10000':1210,1216,5254,5256 '1020':1187 '10s':2613 '11':130,1742,3814,5003,5160 '110':4919 '12':4641,4661 '120':2650,4711 '13':846 '14':3172,5502 '15':4616 '150':4755 '160':4737 '17':3175 '175':4746 '180':4848,4888 '1840':5317 '190':5024 '1gb':2100 '2':423,848,1245,1660,1839,1936,2555,2636,2730,2835,2941,3098,3181,3273,4035,4119,4273,4417,4584,4671,5260,5353 '2.1.3':5304 '2.1.4':5185 '2.1.5':1436,5186 '20':232,4253 '2002':2821 '2003':1197 '2026':227,328,1007,1098,1264,1300,1580,3900,4115,4553,5084,5195,5276,5335,5371,5423 '210':4905,4940 '22':3344 '24':4632 '240':4724 '25':2086 '250':4957 '26':853,863 '280':4989 '2880':5316 '2881':5095 '29':3170 '290':4772 '2x':5318 '3':433,1672,1870,1919,1962,2090,2391,2569,2651,2749,2950,3122,3258,3285,4038,4123,4275,4420,4858 '3.8':545 '30':121,359,776,1326,1416,2586,2612,3267,3340,3376,3686,3877,4758,4917 '350':4869 '360':4793 '39':188,1481,4814,4984,4996,5101,5151 '3m':1133 '4':446,1607,1666,1677,1734,2131,2473,2560,2657,2765,2965,3295,3819,4043,4127,4426,4695,4744 '401':1061,1537 '403':1540 '404':345,1317,1543,1594 '43':3166 '4w':1132,5215 '5':451,1249,1282,1577,1684,2088,2610,2648,2664,2768,2771,2983,3288,3305,3587,3823,3830,4049,4101,4131,4828 '50':925,1208 '500':1534 '5001':1015,2269,3417 '5gb':3168 '6':556,588,857,869,1478,1689,2994,3321,3834,3837,4025,4051,5128 '60':1464,1475,1564,4763,4781,5108,5507 '60004':4582 '7':591,1169,1698,3013,3230,3253,3330,5106 '7.0':592 '7200':724 '7d':1131,5214 '8':1663,1705,2055,3025,3190,3346,3577,3821,4247,4691,5113 '80':4805 '9':959,1713,2462,3036,3356 '90':2233,4830,4867 'a/b':207 'a/b/c':5048 'ac':161,4876 'ac/ads/adt/comp/crm':5120 'action':1976,1996,2002,2007 'actions.length':1993 'actions/sql/relativefieldalias':1778 'ad':162,3803,4877 'adt':4878 'adv':1157,5230 'adv-calc-json':1156,5229 'agent':274,510,1486,1516,2702,2775,3504,3914 'agent-skil':3913 'agents-rule.md':5075 'agents.md':282,283,5079 'allow':1812,1832 'ambigu':3014 'analysis.json':1967,2239 'analyze.mjs':1965 'api':953,997,1557,1740,3205,3617,4631 'app':315,1029,2080,2217,2226,3565 'app.guandata.com':4556 'app.mayidata.com':339,1311 'app.mayidata.com/nexus/repository/guandata-web/':338,1310 'asc':1152,1213 'assoc':2736,3088 'attribut':965 'aud':4879 'auth':317,318,1041,1054,1070,1072,1074,1076,1078,1080 'avail':1240 'b':18,103,115,125,195,213,408,466,480,1252,1255,1367,1548,1624,1646,1738,1816,1896,1902,1916,1968,2051,2128,2172,2174,2236,2261,2265,2321,2383,2469,2479,2484,2509,2534,2575,2615,2693,2697,2738,2762,2796,2799,2807,2842,2875,2910,3066,3070,3160,3196,3264,3386,3409,3508,3613,3677,3684,3773,3784,3787,3793,3798,3809,3817,3839,3853,3861,3863,3866,3875,3882,3885,4498,4954,5267 'b-〇':1645 'base':557,596,1137 'bash':647,1821,1921,2327,2338,2489,2515,2537,2578,2619,2680,2814,2826,3082,3748 'bi':5,55,180,186,247,952,1011,1020,1048,1161,1442,1473,1575,1874,1906,2529,3697,3909,3979,4807,4812,4822,4833,4851,4872,4891,4908,4922,4943,4960,4992,5041,5090,5099,5471,5505 'bi.company.com:8080':600 'bin/install.js':256 'bodi':1862,3637,3658,4213,4215,4316 'bracket':5420 'break':2605,5192 'brief':923,936,2669 'bt':444 'bug':1243,1791,2417,2513,2642,3589,5468 'c':29,141,153,218,470,831,1449,1453,3133,3140,3363,3889,3936,3973,3977,4013,4022,4066,4147,4197,4202,4236,4260,4278,4281,4294,4311,4326,4329,4351,4365,4384,4397,4428,4454,4477,4502,5306,5376 'c-〇':3972 'calc':666,1158,5231 'calcul':2004,2013,2089 'callback':4145 'cannot':2984 'card':367,376,691,696,711,741,769,791,842,968,1190,1223,1385,1401,4006,4297,4301,4309,4374,4586,4596,4606,5246,5408 'case':4899 'chang':5193 'changelog.md':324,325,5449,5450 'chart':802,855,3920,3924,4571,4638,4682,5403 'chart-kit':3919,3923 'chartmain':4124 'charts/html_common.js':4667 'chatbi':309,312,994,995,1022,1026,1278,1381,1392 'checklist':2764,2878 'checkstatus':3221 'claud':264,516,1510 'clawhub':5361,5483 'clawhub.ai':5485 'clawhub.ai/p/maojiebc](https://clawhub.ai/p/maojiebc)':5484 'cli':1110,1237,4676 'click':4389 'clickfunc':4078,4097 'clone':251,303,5360 'cnt':3131,3138,3146,3149 'code':265,517,1511 'codex':221,267,523,5072,5078 'cohort':4980,5148 'collect':4929 'column':656,663,2986,3038,4125 'com.apple.quarantine':5443 'command':1241 'commit':3701 'comp':168,4880 'compar':1112,1119,5207 'compare-valu':1118 'compat':280 'concat':4931 'config':4079 'config.json':536,553,1064 'contain':438 'context':3967,4000,4406 'contract':4628 'creat':375,617,682,690,733,786,790,837,841,1032,2036,2068,2466,4716 'create-and-get':616,681,785,836,4715 'create-card':374,689,789,840 'create-pag':732 'createcustomchart':4536 'crm':4882,4884 'cron':2027,2031,2121 'crud':885,907,947,1085,1280,1355,1384 'css':4438 'csv':743 'cte':3000,4967,5135 'cto':210,3776,3779,3954,5059,5065 'current':3063 'custom':879,4570,4637,4681,5402 'custom-chart-playbook.md':5063 'customchartsubtype.sdk':4538 'cwd':504 'cyclegroup':2242 'd':1932,2626 'data':697,1724,1754,1879,1999,2310,2313,2319,2361,3421,3430,3987,4077,4083,4098,4110,4114,4121,4139,4540,4597,4605,4611,4657,5390,5416 'data-sourc':1723,1878 'data.actions':2687 'dataflow':1882,1988,2292,2318,2871,3426 'dataflowid':1764,1769,1947,2464,2494,2549,2631,3326,3659 'dataset':655,913,1979,2379,2395,2399,2433,2442,2691,2853,2989,3467,3492,3542,3724 'datasourc':2859 'datasource.dirpath':2460 'datasource.parentdirid':2382 'dataview':4542,4573,4627,4639,4683,5392,5405 'date':3056,3061,3064,3600,4113,4135,4182 'db':2183 'dd':487 'decis':3398 'default':569,573,576,580,611,623 'delet':710,1722,1727,1794,1795,1801,1836,2704,2707,2817,2832,2840,2848,2854,2860,2866,2873,3498,3525,3528,3533,3670,3675 'delete-card':709 'desc':1153 'descript':3213 'descriptor':37,1459,4576 'detect':1082 'detect-domain':1081 'dfid':2550 'dfs':2047 'diff':4048 'dim':1141,1148,2188,2215,2223,2229,3570,5219,5226 'dim/dwd':2064 'direct':1629,2410,3218,3292,3448 'direct-sav':1628,2409,3217,3291,3447 'directory/etl':1886 'dirid':2364 'dirpath':3727 'dirtyp':1751,2306,2349,2360,2937,3419,3640 'disclosur':62 'discoveri':478,3397 'displaytyp':1987 'doc':5188,5330 'docs/architecture.png':5322 'docs/architecture.svg':5282 'document.body':4091 'document.queryselector':4089 'dod':1117 'dom':3990,4085,4093,4354 'dom/data':3943 'domain':561,563,601,1083 'done':1960,2608,3121,3159 'dpi':5319 'draft/release':593 'ds':920,961,2022,2654,2660,2667,2734,2741,2805,2811,2865,3086 'dsid':2714,3544 'dsl':366,768,1329,1427,4563 'dtd':1129 'dwd':174,2199,2224,4968,5006,5033,5136 'dwd/dim':2212 'dws':2205,2225 'dws/app':2198,3572 'echart':821,3906,4624 'echo':2598,3152 'elementfrompoint':4368,4489 'email':5475 'end':4166 'endpoint':1744,1819,1847,1855,1860,1867,1876,2845,3607 'eq':437 'error':495,2525,2558,2571,2819,2996,3349,4753 'etl':13,92,97,100,104,172,190,900,928,934,962,1352,1444,1465,1479,1482,1489,1549,1566,1626,1654,1665,1681,1691,1700,1728,1736,1752,1761,1775,1781,1799,1804,1884,1900,1912,1926,1930,1955,1983,1991,2040,2043,2045,2053,2075,2107,2123,2137,2140,2162,2255,2308,2315,2317,2324,2339,2350,2366,2370,2373,2387,2449,2507,2621,2624,2645,2682,2717,2743,2753,2778,2813,2837,2881,2904,2938,2949,3076,3094,3102,3116,3119,3137,3142,3148,3173,3187,3194,3224,3277,3298,3317,3342,3360,3411,3423,3425,3428,3435,3479,3519,3531,3567,3581,3584,3615,3627,3642,3646,3649,3666,3673,3707,3710,3716,3719,3729,3732,3734,3791,4730,4741,4816,4964,4988,5000,5017,5103,5130,5155,5174,5509 'etl-list.json':1948 'etl-rewrite-original.md':5057 'etl/dsid/page/card':1390 'etlid':2715 'event':4003,4383,4409,4424 'excel':1193,1196,1203,1226,1387,1404,5249 'execplan':23,127,223,475,1463,3378,3392,3842,3847,3887,4770,5073 'execplan-spec.md':5069 'execut':1633,1707,2541,2639,2943,3220,3304,3473,4673,4749 'expir':723 'explod':4927 'export':1089 'expr.length':2016 'extract':2184 'f':1192,1225,1403,5248 'fail':2037,2523,2604 'fallback':378,793,5326 'fals':3053 'fanin/fanout':2050 'fetch':404,955,970,1362,1636,1829,2329,2333,2342,2353,2491,2517,2546,2562,2816,2831,2839,3750,3762,4735 'fi':3158 'field':880,1859,2967,3058 'fieldalia':2960 'file':5328,5342 'filter':805,4722 'finish':2035,2497,2502,2602,2755,2883,3476 'fix':4373 'flag':1108 'fld':3127,3134,3141,3153 'flow':2320 'folder':577,581,624,631 'form':949,969 'formula':2015,4823,4834,4852,4873,4892,4909,4923,4944,4961,4993,5042 'from/join':3016 'frontmatt':272,5183 'function':4075,4444 'gbrain':269 'gd':4343,4346 'gdhtml':4668,5351 'gdplugin':4054,4447 'get':619,662,684,695,739,788,839,935,945,1709,1772,1773,1779,1783,1786,1834,1956,2280,2283,2287,2330,2334,2518,2563,2591,2668,2683,2735,3087,3101,3103,3111,3117,3318,3482,3629,3632,3647,3661,3751,3763,4604,4607,4718 'get-card-data':694 'get-column':661 'get-page-card':738 'gh':5363 'git':250 'github':260,295,5359,5452,5479 'github.com':253,5455,5481 'github.com/maojiebc/majia-guanyuan.git':252 'github.com/maojiebc/majia-guanyuan/releases)':5454 'github.com/maojiebc](https://github.com/maojiebc)':5480 'gitignor':539 'glow':5313 'governance-report.md':2245,2784 'grep':2144,3124,3132,3139,3362 'grid':4541,5391 'group':2009 'guan':4797 'guanadmin':398,1298,1347,1619 'guanadmin-skil':397,1297,1346,1618 'guanbi':604 'guanc':311,314,321,403,881,888,897,909,919,933,940,943,948,954,972,993,1025,1028,1036,1040,1053,1069,1086,1090,1101,1189,1244,1260,1268,1273,1361,1377,1492,1501,1504,1572,1635,1828,1925,1929,1953,2328,2332,2341,2352,2490,2516,2545,2561,2589,2623,2644,2653,2659,2666,2681,2733,2815,2830,2838,3085,3109,3115,3223,3644,3665,3692,3749,3761,4585,4653,4728,5259,5295,5407 'guancli-commands.md':4725 'guand':392,1292,1341,1613 'guandata':6 'guandata.py':373,886,890,937,1229 'guandata/guancli':234,306,978,1553,5199,5271 'guandata/guanvis-skill':237,332,1304 'guands-skil':391,1291,1340,1612 'guanetl':389,1286,1338,1610,1642 'guanetl-skil':388,1285,1337,1609,1641 'guanexport':395,1295,1344,1616 'guanexport-skil':394,1294,1343,1615 'guanvi':362,383,764,796,808,833,1289,1408,1519,1585,4561,5298,5398,5427 'guanvis-skil':361,382,763,795,807,832,1288,1407,1518,1584,4560,5297,5397,5426 'guanyuan':3,288,293,1433,1496,5303 'guanyuan-majia':287 'hack':3941 'head':1247,1257,1835,5262 'help':1027 'helper':4080,4094 'herm':268,526 'highcomplex':2243 'hotfix':5340 'html':33,144,155,825,1439,1455,4437,4504,4517,4533,4619,4789,5308,5378 'html/css/js':26,132,1450,3939,3957,3983,4029 'html_base.css':4670 'http':4064 'httpx':547,550 'id':202,421,565,571,575,578,582,607,613,622,625,630,632,1951,1957,2372,2377,2447,2451,2580,2593,2673,2675,2679,2692,2940,3009,3106,3112,3118,3239,3307,3312,3314,3320,3437,3487,3550,3555,3680,3689,3699,3704,3743,4007,4287,4298,4302,4304,4310,4339,4594,4600,4634,5414 'id.json':1959 'id.txt':3114,3120 'ifram':4265 'index':3965,3998,4224,4240 'init':4055,4448 'input':1693,1985,2394,2426,2429,2432,2988,3244,3246,3466,3491,3494,3541,4169 'input1/input2':2420 'inputdsid':2946 'inputmap':3212 'insight':1004,4184 'instal':257,262,549,1270,5347,5362,5365 'install-skil':1269 'internal-nexus-install.md':4794 'invalidjson':1857 'javascript':4074,4103,4443 'join':1994,1998,2087,3031,3034,3597,4939 'jq':1944,2551,2566,2595,2628,2685,3753,3765,4609,5418 'js':365,368,767,770,772,1328,1426,3206,4046,4433 'json':137,432,554,782,844,1159,1462,1632,1656,3284,4109,4133,4150,4168,4173,4195,4719,4778,5232 'json.parse':4160,4175,4193,4779 'jwt':726 'k':3095 'key':4183,4342 'kit':3921,3925 'kpi':754,4525,5119 'l1':1002 'l1/l2':1382 'l2':1005 'last':1154,5227 'lastexecut':2634 'left':4938 'limit':1206,2647,2662,5252 'linktoal':4565,4679,5400 'list':427,654,703,912,915,999,1071 'list-dataset':653,911 'list-pag':426,702,914 'list-them':998 'list/schema/query/add/update/delete':950 'list/use/whoami':319 'lite':4034,4625 'live':4040,4332 'loadcont':4539 'log':3399 'login':564,606,1055 'm':3092 'm9224@163.com':5476,5478 'maco':5442 'mailto':5477 'maintain':3897 'majia':2,289,292,1432,1495,5302 'majia-guanyuan':1,291,1431,1494,5301 'manag':429,705 'manifest':5269 'maojiebc':5460,5488 'maojiebc/majia-guanyuan':261,299 'markdown':483,3383,5094 'mask':3994,4210,4248,4348,4418 'md':4185 'messag':2526,2822 'meta':3248,3279 'method':1815,1825,1850,2282,2296,3624 'metric':804,963,964,1102,1178,1395,5201 'metric/filters/sorting':850,865 'metric/row/column':449 'migration-plan.json':2253 'migration-status.md':2785 'mismatch':3039 'miss':1858,2304 'mkdir':1941 'mm':486 'modifi':1075 'mom':1114,5209 'mtd':1127,5212 'mutationobserv':4313,4491 'n':1145,1248,1400,2017,2952,3008,3090,4843,5223,5237,5241 'name':673,2345,2356,2632,3638,3757,3769,4107,4111,4120 'near':2999 'new':4446,5310 'newsql':3211 'nexus':240,336,1308,1412,1589,5431 'node':231,255,1964 'nodetyp':2244 'none':4425 'npm':343,1315,1592,3931,5332,5346,5357 'npm/clawhub':5324 'npx':259 'ns':4883 'null':2968,2974,2980,2982,3043,3048,3456,3458,3462,3464,4947 'num':3037 'number/rank/dense_rank':4935 'object':3755,3767 'od':2181,2222 'ods/dim/dwd/dws/app':1675,2176 'opac':4410 'openai':220,5071,5077 'openclaw':266,520 'option':1808,1809,1830,1837,1890,3604,3625 'order':1151,3055 'out.xls':1201 'outcom':3400 'output':1695,1703,1978,2378,2398,2441,2635,2671,2690,3301,3310,3548,3723 'output_dataset.parentdirid':3433 'outputdsnam':1981 'overlay':3946,3993,4200,4207,4208,4220,4244,4344,4347,4376,4415,4481 'p':1942 'pack':4644 'pack-patch-upload':4643 'pack/publish':774,1336 'package.json':5327,5341 'page':428,574,704,734,737,740,916,967,1331,1414,1599,1680,2150,2745,2897,3074,3097,3100,3110,3113,3130,3135,3145,3171,3193,3580,4286,4338,4530,4603 'page.evaluate':4388 'page.js':369,773 'pagerendertyp':4290 'panda':1231 'parentdirid':2348,2359,2375,2381,2444,2934,3639 'pars':3226 'part':11,17,28,69,80,88,102,114,140,152,194,199,206,212,217,356,407,410,465,469,530,830,1251,1254,1366,1448,1452,1525,1547,1603,1623,3888,3935,3976,4012,4020,4522,5047,5266,5305,5375,5433 'part-a-cards.md':4712 'part-a-commands.md':4704 'part-b-errors.md':4747 'part-b-payload.md':4738 'part-b-sdk.md':4756 'part-b17-fullchain-rewrite.md':4764 'part-c-html-dashboard.md':4782 'part-c-payload-json.md':4773 'password':568,608 'patch':38,1460,4577,4645,5280 'patch_selector_linkage.js':5355,5395 'payload':136,379,497,799,1461,1559,1631,1697,1762,2367,2388,2457,3274,3281,3283,3324,3332,3334,4108,4132,4149,4157,4194,4742,4777 'payloadpath':3216 'percentag':1138,1140,5216,5218 'percentage-dim':1139,5217 'pg':420,570,612,621,629,4593,4599,5413 'pg-id':4592,4598,5412 'pgid':636 'phoneview':4291 'pin':4363,4395 'pip':548 'pipelin':178,5036,5123 'playbook':5068 'png':5320 'png/pdf':1356 'poc':3731,3735,3738 'pointer':4002,4382,4408,4423 'pointer-ev':4001,4407,4422 'port':560 'pos':4977,5145 'post':1747,1748,1756,1766,1833,1841,1892,2272,2274,2276,2278,2294,2297,2301,2343,2354,2492,2547,3328,3609,3635,3652,3656 'preview':1191,1224,1386,1402,1701,2646,2661,2677,3299,3552,3667,4587,5247,5409 'process':2314,3364,3422 'profil':1087,1091 'progress':61,3395 'public':996 'publish':1034 'pushandexecut':3214 'python':544 'python3':649 'qoq':1115 'qtd':1126 'queri':1001,1103,1179,1185,1396,5202 'r':1945,2552,2596,2686,5116 'rank':1143,1147,1150,5221,5225 'rank-dim':1146,5224 'rank-ord':1149 'rank-top':1142,5220 'rate':1122 'raw':1933,1938,1943,1954,1958,1966,2594,2627,2656,2684,3645 'rawdata':1123 'react':3905 'read':1950 'readm':276,513 'readme.md':278,514 'recent':1130,1136,5213 'recent-bas':1135 'rect':4324 'redirect':301 'refer':67,72,75,78,2402,3015,4685 'references-目录':77 'references/agents-rule.md':5076 'references/custom-chart-playbook.md':4484,4485,5064 'references/etl-rewrite-original.md':4493,4494,5058 'references/execplan-spec.md':5070 'references/guancli-commands.md':957,958,991,992,1177,1181,4726,5244,5245 'references/internal-nexus-install.md':243,244,349,350,811,812,1319,1320,1596,1597,4795,5437 'references/part-a-cards.md':860,861,4713 'references/part-a-commands.md':746,747,4705 'references/part-b-errors.md':468,2573,2924,2925,4748 'references/part-b-payload.md':2454,2455,4739 'references/part-b-sdk.md':3250,3251,4757 'references/part-b17-fullchain-rewrite.md':119,120,3389,3390,3811,3812,4765 'references/part-c-html-dashboard.md':158,159,4613,4614,4783,5380 'references/part-c-payload-json.md':472,4153,4154,4774 'references/restaurant-bi-formulas':5088 'references/restaurant-bi-formulas/01-date-and-time.md':4836 'references/restaurant-bi-formulas/02-customer-and-membership.md':4854 'references/restaurant-bi-formulas/03-revenue-kpi.md':4875 'references/restaurant-bi-formulas/04-channel-and-store.md':4894 'references/restaurant-bi-formulas/05-coupon-and-discount.md':4911 'references/restaurant-bi-formulas/06-sql-utils.md':4925 'references/restaurant-bi-formulas/07-data-quality-traps.md':4946 'references/restaurant-bi-formulas/08-etl-engineering-patterns.md':4963 'references/restaurant-bi-formulas/09-etl-catalog.md':4995 'references/restaurant-bi-formulas/readme.md':182,183,4825,5044 'refresh':657,2029 'refreshdata':4096 'regex':3005,3262 'relativefieldalia':2435,2991,3470 'releas':736,5453 'release-pag':735 'remov':1077 'removeinput':3210 'renderchart':3985,4056,4076,4445,4449 'repo':296 'report':4112,4134,4181 'request':1849 'resiz':4232 'resolv':2985 'resourc':1018,1845,2852,2858,2864,2870 'resourceid':1865,2289 'resourcenotexist':1866,2293 'resourcetypenam':2303 'respons':2520,3754,3766,4128,4608,4612,4658,5417 'response.contents':1946,2629 'response.result.error':2527,2567,3663 'response.status':2597 'response.taskid':2553 'restaur':4821,4832,4850,4871,4890,4907,4921,4942,4959,4991,5040 'restaurant-bi-formula':4820,4831,4849,4870,4889,4906,4920,4941,4958,4990,5039 'result':2524 'result.error':1712,3353,3485 'retrospect':3401 'rfm':167,2207,4865,5112 'rm':1507 'row':4934 'rowcount':2024 'run':942 'runtim':3959,4058,4068,4072,4138,4191,4333,4630,4669,4775,5352 's2':3021 's2.xxx':3026 'save':1630,2411,3219,3293,3449 'schema':1872 'score':2258 'script':648,652,660,669,680,688,693,701,708,714,719,2397 'scripts/guandata.py':533,542,650,1066 'scripts/patch_selector_linkage.js':4675 'sdk':3201,4534,4622,5388 'search':441,671,675,921,1931,2625,2655,3225,3361 'search-valu':440,670 'section':4187 'select':2688,3046,3756,3768 'selector':35,771,778,1333,1428,1457,4532,4568,4636 'self':3596 'self-join':3595 'seq':2584 'set':721,1755,2311,2362,3431,4930 'set-token':720 'setsubtyp':4537 'skill':355,363,371,384,387,390,393,396,399,406,506,508,765,797,809,814,834,981,1261,1271,1275,1284,1287,1290,1293,1296,1299,1339,1342,1345,1348,1364,1372,1409,1435,1485,1498,1520,1523,1579,1586,1602,1611,1614,1617,1620,1638,1643,3915,4562,4798,4801,5299,5364,5399,5428,5446,5463,5500 'skill-majia-guanyuan' 'skill.md':271,463,1573,4688,5181 'sleep':2559,2606 'smart':2316,3424 'smartetl':20,107,215,1446,3781,3845,4496,4767,5061 'sort':1212 'sort-asc':1211 'sourc':1725,1880,2424,3241 'source-maojiebc' 'split':4928 'sql':109,930,1359,1476,1694,2396,2403,2405,2414,2418,2431,2437,2440,2531,2921,2954,2962,2972,3232,3234,3338,3441,3445,3451,3454,3489,3585,3858,4971,4974,5109,5139,5142 'sql/calculator/select_columns':2142 'sqlscript':2407,3236,3443 'st':2588,2600,2601,2603 'stack':3999,4405 'static':1017,1844,2851,2857,2863,2869 'status':322,715,1037,1042,2034,2067,2260,2487,2496,2498,2501,2522,2633,2754,2820,2882,3227,3475 'stdin':1758,3654 'step':1922,1935,1961,2538,2554,2568,2827,2834 'storages':2025 'stored':4902 'string':4164 'sub':3062 'subtre':4317 'summari':2241 'superapp':313,1030,3917 'support':1854,2286,2300 'support/guancli/config.json':1060 'surpris':477,3396 'svc':1358 'symlink':1505 'syntax':2995 'tab':4361,4392 'tarbal':347,1322,4799,5333,5439 'targetnam':2259 'task':494,730,941,944,966,1708,2557,2579,2590,2592,3348,3351,3366,4708,4752 'taskid':1770,2495,2521,2543,2544,2565 'tc':4881 'templat':5344,5369 'templates/html-dashboard':4665,4666,5349,5381 'text':1650,1745,2271,2393,2847,3164,4243 'theme':1000 'timeout':2649 'today':3057 'todo':3380 'token':717,722,926,1044,1057,1068 'tooltip':824 'top':1144,5222 'topic-agent-skill' 'topic-agent-skills' 'topic-bi-skill' 'topic-business-intelligence' 'topic-claude-code' 'topic-claude-skill' 'topic-codebuddy' 'topic-codex' 'topic-custom-chart' 'topic-data-analysis' 'topic-etl' 'topic-gbrain' 'trail':3002,3590 'transformv2tov3':3207,3228,4761 'tree':1927,2290 'trend':4674 'txt':3136,3143 'type':803,856,1977,1997,2003,2008,2689 'uat':1051 'ui':4016,4400 'unexpect':4165 'union':3040,3591 'unknown':2976 'untermin':4163 'updat':2468 'upload':4646 'url':297,558,597,634,4284,4336 'usag':1239,5264 'use':1073 'usernam':567 'v1':2757,3372,3375,3709,3713,4986,4998,5153 'v1.0':1551 'v1.0.21':973 'v1.1':3891 'v1.2':222 'v1.3.1':2700 'v1.4.0':4693,4699 'v1.5':5286 'v1.5.0':59 'v1.7':982 'v2':1686,2256,2347,2358,2747,2751,2887,2893,2899,2906,3198,3256,3333,3370,3715,3721,3759,3771 'v2.0':284,975,985,3894 'v2.1':326,749,1370,4589,4654,4803 'v2.1.0':5422 'v2.1.1':31,4506,4791,5338,5367,5370 'v2.1.2':5334 'v2.1.3':5275 'v2.1.4':976,986,1093,5194 'v2.1.5':57,184,226,1470,4809,5083 'v2.1.x':5283,5290 'v214':1183 'v214-起metric-query-泛化查询guancli':1182 'v2payloadfile':3208 'v3':2879,2884,2891,2902,2909,3199,3260 'v3_sdk.mjs':3203 'v3name':3209,3215,3222 'valu':442,672,1120,1121 'version':555,586,5184 'viewdata':4129 'vs':887,2167,2467,2886,4623,4862,4948,4972,5140 'warehous':2346,2357 'whoami':1079 'window':4340 'with-calc':664 'wow':1116 'ws':4932 'wtd':1128 'wubaoqi':3898,3927 'wubaoqi/guan-chart-kit':3904 'wubaoqi/guan-chart-kit-usage-skill':3912 'x':1846,1851,2789,4458,4460,4463,4465,4467,4469,4471,4474,5487 'x.com':5490 'x.com/maojiebc)':5489 'xhslink.com':5495 'xhslink.com/m/4fqmjehhwkc)':5494 'xml':1198 'xtd':1124,5210 'xxx':637,3010,3050 'y':819 'your-guandata-instance.com':559 'yoy':1113,5208 'ytd':1125,5211 'yyyi':485 'yyyy-mm-dd':484 'z':3964,3997,4223,4239 'z-index':3963,3996,4222,4238 '〇':1647,3974 '一句修复方向':2919 '一句根因':2918 '一整套':1106 '一次':3287 '一步到位':687 '一脉相承':2803 '一般够':2614 '一行命令出数':5242 '万能兜底':956 '万行':2103 '三个核心':3204 '三件套生态':5293 '三件套角色互补':1369 '三块拼图':5288 '三层验收':3825 '三态判断':4950 '三种':4155 '三种节点的字段速查表':2461 '三色标记找循环组':2048 '三节点骨架':1692 '上':4557 '上是否已有旧版注入':4341 '上月':4841 '上游':1982,2945 '上线':5432 '上限会返回空数据':450 '下一个接手的人不用问任何上下文就能继续':3408 '下个版本计划把':1065 '下列能力是':984 '下放到':1109 '下游':2136,2903,3075,3186 '下游引用已切流':2731 '下游看板':1716 '下面是模板':3694 '不会':4566 '不会显式报错':4306 '不传时':615 '不保存的卡片无法取数据':422 '不修改':5053 '不再作为基础上游':2220 '不再匹配目标':4285 '不再有':4591,5411 '不再被':5263 '不写代码':4018 '不动旧链路':1688 '不同表':3032 '不在维表物化':2170 '不存在':1848 '不对':1863 '不带就只输出阉割版':1940 '不影响':304,1513 '不必再去后台建一个新的派生指标实例':1175 '不扫一遍直接动手':1914 '不承载业务口径':2187 '不报错':2412 '不报错但':3450 '不挂主链':2119 '不接受只重写最终':3802 '不是':2406,2448,2506,3235,3478 '不是过渡态':2793,3523 '不生效':2415,3452 '不用':2638,4011,4032 '不用翻':431 '不知道用哪个':192 '不算确认':2729,3515 '不给局部片段':4434 '不能删':2155 '不能压过观远原生导航':4227 '不能跳的两条坑':4552 '不要':3472,4520 '不要为了':3516 '不要假设':3465 '不要假设老':3583 '不要假设节点':3486 '不要先假设它等于':4060 '不要写':2312 '不要删了重建':3329 '不要去调':4578 '不要只看看板做字段裁剪':3575 '不要只靠':4387 '不要在':3453 '不要复用':3547 '不要忘记':3603 '不要把':3432,3440,3560,4355 '不要把它当':4144 '不要把整页都抽进':4206 '不要把这份表':3700 '不要挂到':4212 '不要直接':3524 '不要给':3418,3540 '不要继续发零碎':4047 '不要继续堆兼容解析逻辑':4178 '不要自己假设':455 '不要让':3569 '不要试':3413,3532 '不要试这些路径':2267 '不要跳过治理扫描直接重建':3557 '不要重绘或克隆':4402 '不要限制在标准看板':4515 '不要靠零散':3379 '不覆盖这些':835 '不识别循环依赖和重复主题域':3558 '不进':3865 '不限标准看板':53,151,4787,5386 '不需要':445 '不需要再走':1228 '与':281,2961 '与原生浮层打架':4218 '与官方':1259,5445 '与本':1601 '与注释':3012 '与看板':2744 '专为观远':3908 '且无输出':2069 '业务体感与场景模板':1469 '业务侧':1219,5233 '业务侧问':1165 '业务口径':2156 '业务域分类':5004,5161 '业务实战':1437 '业务标签':5014,5171 '业务汇总':2097 '业务渠道':4895 '两个都要用':2369 '两条路线区别':3922 '两棵独立的树':2326 '两者互补':3948 '个':1608,3093,3096,3176,3341,3857,4985,4997,5093,5152 '个下游':3091 '个兄弟':1283,1578 '个原贡献者文件构成完整知识库':4696 '个字段':847 '个已实测':1743 '个建卡示例':870 '个指标':1972 '个新文件':4692 '个生产':189,4815,5102 '个用这种方式':3345 '个真':3182 '个起手模块':4672 '中':3343 '中换行':2963 '中文注释':3003 '中查看':642 '中的':635 '临时':3382,3945 '临时切':1092 '为什么会员数对不上':5031 '为什么扫描':1904 '为空且不是被其他':2122 '主动派发':4231 '主文是路由层':4689 '主要角色':1374 '主路由表新增餐饮业务公式入口':5182 '主题切换':780,1335,1430 '主题问数':310,1003,1393 '之前最值钱的活':1737 '之前点错节点':4380 '之前覆盖的更广':983 '也分发了一个名为':1272 '也切到这套':1067 '也欢迎切磋用户运营':5469 '也消费字段':3077 '也能看任意节点输出':2640 '也补进':5331 '互补不冲突':1527 '交互式登录':1056 '交付规则':4430 '交叉表':873 '人类可读治理报告':2246 '什么情况下遇到的':490 '仅':3180 '仅建卡':692 '仅影响':5356 '仅断':1509 '仅看板抽样':3174 '仍':344,1316,1593 '仍走':402 '从':2211,3316,5285 '从扫描到落表的完整':2472 '从浏览器复制时用':727 '从零搭新看板':3928 '从零生成':143,4788 '以下':4690 '以下命令假定':503 '以及任何':3969 '件交付':3820 '任何支持':270 '任务':902,4732 '任务排查':939 '任务涉及观远':3978 '任务状态':1788 '任务触发':2504 '优先修':4404 '优先判断为数据链路把长字符串截断了':4177 '优先围绕':4137 '优先用':762 '优先给完整':4045 '会变成':2674 '会员':42,2190 '会员属性':4856 '会员档案':5007,5164 '会员生命周期多输出':4979,5147 '会暴露':3602 '会返回':4581 '传给前端':4189 '但':2413,4226 '但用户不必看到':4263 '位置式索引':2422 '位置式索引会变':3495 '低于观远原生导航':4257 '低频轮询':4322 '何时切到':4618 '何时回到':71 '何时用':908,3816,3975 '何时触发':1375 '何时读':4702,4818 '作为':3551 '作为模板':3335 '作用域':245 '作者':204,5457 '你想做':82 '你想看哪段时间的数据':457 '你的':3758,3770 '例如':456 '供':5323 '依赖':233,546,1984,2898,2905 '依赖管理':3932 '依赖约束':5270 '便于无':381 '保存':4451 '保存后':2670,3309 '保存后会变成':3554 '保存完先':3297 '保存成功但':2942 '保存能过':3545 '保存路径无效':2453,2932,3439 '保守做法':4204 '保留':1668 '保留为':377 '保留作为':792 '保留原生浮动':4399 '信号':2058 '修':2512,2641 '修了':1236 '修复':99,1569,3406 '修复手册':2574 '修复方向':2929 '修改':95 '修正':3033 '倍':1895,3612 '倍可裁字段':3191,3578 '候选删':2148 '做分析':87 '做副本页验收':3807 '做销售仪表板':752 '先':1721,2810,3669 '先删数据集':2829 '先在真实观远页面复现问题':4036 '先查页面权限':424 '先治理再重建':1649 '先治理后写入':3270 '先看':1702,3469,4053 '先确认':4039 '先给最小恢复版救回来':4442 '兜底':1155,5228 '入参':4059 '入口':1512,1792 '全变':4299 '全图':1741 '全库':1928 '全格式':868 '全脱敏':191,5097 '全部':2268,3416 '全部本地生成':3275 '全部继续走':1360,1634 '全量扫描':3169 '全链路':4766 '全链路操作':7 '全链路追到原始源':3801,3873 '全链路重写':21,1447 '全链路重写方法论':117,3775 '公式':1477 '公式实战库':181,1443,1474,4808,5091 '公式手册':5105 '公网':342,400,1314,1349,1591,1621 '共享':4629 '共存表升级为三件套分工':5447 '关键':1939 '关键修':1790 '关键字段一致':2760 '关键约束':2180,2809 '关键规则':65,413 '关键词':676,922 '其他四个兄弟':386 '其余':1606 '具体':2030 '具体咨询你们的bi管理员':605 '具体重写一条链路时怎么做才不留尾巴':3796 '兼容':4659 '兼容写法和中文字段':5419 '兼容工具':263 '兼容性':277,279 '内':3001 '内网':239,335,1307,1411,5430,5438 '内网同事发来':4796 '内网员工可让同事下':346 '内网员工可走':1318 '内网均未确认发包':401,1350,1622 '内部':1875,3229,4572,5404 '再':1726,3327,4192 '再删':2836,3530 '再判断问题':4042 '再改代码':4037 '冗余':2163 '写':895,2365,3420,4714,4760 '写入':15,1353,1627,1690,3648 '写入侧':3616 '写入实证沉淀出来的':5510 '写入执行':2477 '写入类':1746 '写到这里只为':988 '写卡前先回到参考表':859 '写卡片':4706 '写卡片前必读':748,1529 '写操作原计划分流到':1281 '写新':4740 '写时间范围':4837 '写法在新引擎也能跑':3586 '写编译器把每个旧':3276 '写解析逻辑':4140 '写错时':2408,3446 '写餐饮业务公式':160 '决定':2436 '决策':4626 '决策保留':1661 '出现在循环组里':2061 '分别建':2336 '分发':341,1313 '分层':2177 '分工':889 '分批保存':3286 '分析':1488 '分析依赖':1657 '分析师履职':5100 '分析脚本要算的':1970 '分流':3951 '分钟':2611 '切到':4289 '切换是否真的生效':4393 '切页后残留':4217 '列':4188 '列出本次将删除的所有':2713 '列出范围':1924 '列名带隐藏':2951 '列差':3592 '列数不一致':3041 '创建':1567,1759,3650 '创建新页面时的存放位置':627 '初次进页时脚本可能根本不执行':4268 '删':1800,1803,2788,3672 '删卡':893 '删或归档':2083 '删或重建为明确用途':2072 '删数据集':1797,3668 '删旧':3518 '删这一批':2790 '删除':16,96,1671,2425,3243,3490 '删除前':2877 '删除前的硬性安全闸':2699,3510 '删除拓扑':2696 '删除旧链':2478 '删除的实战':1570 '删除类':1793 '判断':499,1899 '利器':2643 '别名为':3020 '别名同名':3598 '到公开仓库':3702 '刷新':4545,5281 '券折扣':5124 '券明细':2201 '券类型分流':4915 '前必须满足以下全部条件':2709 '前查参数':4720 '前端代码':3982 '前端负责叙事':4548 '前者探接口连通':1045 '副本页':3827 '副本页验收':4769 '功能说明图':5284 '加':753,3325 '加载':1517 '包裹层':4065 '化分析应用时':4790 '化经营分析应用':145 '区分两类':2077 '区别于':1039 '升级到':5289 '升级提示':285,327 '升级版坑':2959 '升级版坑见':2923 '单次删除':2767 '单表':2099 '占位符替换成你自己':3696 '占比':5239 '卡死页面':4320 '卡片':755 '卡片尺寸变化时':4230 '卡片是否用了这个字段':2153 '卡片管理':700 '卡片级':3828 '卡片级数值对账':3871 '即为页面id':638 '即更新':1765 '卸了':1506 '历史':2113 '历史补数':2110 '原名':286 '原始':1655 '原始外部表':2182 '原控件是否被历史实验隐藏':4427 '原文':496 '原生':4529,4531 '原生控件不可点时':4412 '原生浮动控件是否仍可见':4475 '去敏蒸馏自两段餐饮连锁':4811 '去留判断':2054 '去除':3006 '参数':3553 '参数化':4677 '参数有':845 '参数解析':3988 '参考':2761 '双':818 '双源':1679,3078,3195,3582 '双源全扫描':3179 '双源审计验证目标':2740 '双源对账':176 '双源扫描':3069 '双源统计':3125 '反推支持的':1814 '反推未知':1818 '反推血泪史':2846 '反查归属哪个':1990 '反过来':816 '发布':4452 '发布了':3903 '发布到平台':1035 '发布页面':894 '发生了什么':492 '取已存在卡片的数据':698 '取数':10,45,138,679,686,892,3960 '取数下限固定':1215 '取数排障':4151 '变成':3313 '口径':4859 '口径歧义':4951 '只会悄悄失效':4307 '只做轻清洗':2186 '只在目标桌面查看态重建':4293 '只接受':3427 '只新建':3855 '只是在观远':4015 '只有':2307 '只有用了分类筛选':435 '只有读权限没运行权限':2947 '只服务页面':2219 '只用于核对证据':4143 '只看看板会高估':3189 '只移动目标卡片内容':4205 '只读分析':1277,1379 '只读探索':883 '可以':2727,3513 '可复用':2196 '可点':4476 '可裁':3157 '可见层':4535 '可视化':4551 '可选':236 '可配':1134 '可靠做法':4269 '右侧原生导航失效详细处理':4488 '各':4186 '各城市占比':1171 '合作随时聊':5512 '合并':1669 '合并主题域':2249 '合法':2305 '同上文件':129 '同上输出':3737 '同份业务规则散落多张计算列':1909 '同名也得建两次':2337 '同店增长':5028 '同时不同子命令返回根字段不同':4602 '同时把':1205 '同时明确给出':4436 '同时管多套':1047 '同步':977 '同步生成':5315 '同步迁至':298 '同比':1166,1397,5234 '同表别名同名':3017 '名':2718 '名字含':2111 '名实不符':1913,2106 '名称':3703 '名跟输出表名差距大':2108 '后':2812,3245,3493,3674 '后又在回调里改样式':4318 '后台点开':1162 '后的':3011 '后端负责权限':4544 '后者看':1043 '否则拒绝执行':2710 '含':19,30,493,729,1777,2459,2716,3500,3844,4656,5104,5441 '含固定层与真实布局错位修正':4487 '含明文凭据':537 '含计算字段':668 '命中':4372 '命中正确控件但还不工作':4379 '命令':3622 '命令返回':1014 '命令都用相对路径':532 '命令面':4655 '命令面与判断表写进':5243 '命令面与判断表见':1176 '命令面同步':5198 '命令面同步纠正':5410 '命令面更广':1499 '命令面查':1024 '命令骨架':643 '命名不一致':1877 '和':1493,2309,3429,3502,3911,4209,4337,4345,5046 '和实际预览':3471 '哲学':4975 '嗯':2726,3512 '四个活文档章节':3394 '四层验收清单':4660 '四步法':352,1323 '回调签名是':4073 '固定主键和时间粒度':2204 '固定卡片':134,827,3947,3961,3992,4199 '固定卡项':4251 '图例改圆点':823 '图标':4364 '图表建卡需求优先路由到':360 '图表类型':4721 '图表类型覆盖':777 '图表类型限制':447 '在':518,521,524,527,1487,2777,3388,3899 '在它们落地之前':1351 '在所有下游':2139 '在执行任何':2703 '在既有卡片上做':3938 '在自有':1010 '在观远bi网页打开目标页面':633 '地图':1424 '场景':489,4201 '坑':5444 '坑号':2926 '基于':1552 '基于模板创建项目':1033 '基本信息':501 '基础明细':2095 '基础维表':5005,5162 '基线':4241 '堂食':4896 '填成':3434 '增量':1097,5189 '处理':1533 '处置':2059,2135 '复制页':4005 '复制页一定要重新确认':4308 '复制页面后':4296 '复杂度':1659 '复杂表给':2609 '复杂重构需要项目化追踪':124 '复用':4743 '复用决策表':5023,5180 '复用旧':3331 '复用模板':2471 '复购':2206,4860 '复购率':163 '外卖':4897 '多渠道评价':5122 '多环境':316 '多环境管理':1046 '多线图':874 '多表':4937 '大':5129 '大小':2020 '大段帮助信息的':1242 '大类命令完整速查':960 '大量已创建未运行的废弃':1911 '天':1170,4844,5238 '天复购分桶':4868 '天订单数':2234 '失效':3744 '失败':1806,2270,2824,4750 '失败且报截断错时':4176 '失败修复就地更新':3322 '失败定位用':3347 '失败时':4780 '头':1813 '契约':4069 '好友明细':2202 '如':599,2725 '如何算复购率':5026 '如何获取':628 '如有需要':4435 '如果上面':3742 '如果你们':1019 '如果同时启用所有三个':1484 '如果用户的需求是':751 '如果用户说':3804 '如果这份':5462 '子句':3024 '子类型':5389 '子节点':4377 '字段':583,667,1560,3167 '字段使用度审计':22,98,3068 '字段去留':1901 '字段去留判断':2130 '字段名':674,851,866,2145 '字段名写成':3442 '字段名干净':3468 '字段名换行':3593 '字段名是':3233 '字段名是否含业务规则':2157 '字段审计':1678 '字段引用与':2987 '字段找不到等':2533 '字段粒度后缀兼容':4648 '字段补上':5343 '字段裁剪不能只看看板':3073 '字段裁剪等任务里':2781 '字段要同步更新':3249 '字段词典':4827 '字段语义':806 '字段误导':2488 '字段误导最坑':2499 '字段隐藏换行这类':3404 '字段集':2894 '字符':4633 '字符串字面量':3059 '字符串字面量与':3599 '字符串拆解':4926 '存':3282 '存在但方法不对':1856 '它和本':1522 '它的':775 '它跟':3783 '安装':249 '安装手册':5440 '安装目录':507 '安装见':810 '安装走':1595 '安装路径':5358 '完就走人':3474 '完成标准':3836 '完成标准里的':2801 '完整':1084,2456,3252 '完整修复方案':2920 '完整参数表':862 '完整变更历史见':5448 '完整命令清单':728 '完整定义':1776 '完整工作流示例':877 '完整接入':5206 '完整改写经验':3782 '完整方法论':3813,4615 '完整替换优于局部修改':4440 '完整章节索引见末尾的':74 '完整规范':5074 '官方':331,1376,1406,1571 '官方在':1263 '定位':1276 '定位标准建卡':1598 '实例':248 '实例升级了':1021 '实例实测':4558 '实例实测后端未部署':1012 '实例里的真实':3698 '实战':201,3679,4490,5506 '实战手册':1368 '实施路线':2252 '实测仅看板会高估':3576 '实测对照':3162 '实测状态':1303,1583 '实证':208 '实际数据预览':2658 '客单价':5027 '客单分桶':4886 '客户端路由离开当前页':4292 '容器':4245 '容易反复触发':4319 '宽表':175,5034 '宽表底座':4969,5137 '密码':610 '对':1861 '对右侧锚点导航':4358 '对应':2423,2752,2880 '对应的章节':464 '对每个字段做':3123 '对照':4751 '对账切流':1714 '对账无误后再下线':3374 '对账确认后再处理旧表':2802,3521 '对齐':308,3022 '对齐马甲家族风格':294 '导出':1357,1388,5250 '小红书':5492 '小表':3740 '少依赖':2195 '就已经包含':5368 '层':2081,2178,3573 '层级问题':4378 '履职':187,4813 '工作法':128,3393 '工作流':4647 '工具不同而异':511 '工具层':4259 '工具条':4229 '工具箱':5126 '工具选择决策表':971 '工程化':24 '工程哲学':5143 '工程的实战经验':5472 '工程范式':173,1480,4965,5131 '左侧栏展开收起':4466 '差异':2758,2889 '差异定位':112 '差异追踪':3829 '已先切到':2901,2908 '已切到':2746 '已含':1500 '已废弃':4601 '已被':538 '已通过观远':334,1306 '已通过观远内网':1588 '已重命名为':290 '已验证':4242 '布局':4549 '带换行的原字段名':2956 '带连字符':1881,3539 '帮到你':5464 '帮助淹没':5265 '常见':4100 '常见为':4095 '常见误解':4081 '干净别名':2958 '年月':4652 '年用户运营':5503 '年累计':1167 '并行':3373 '并行做新链路':3520 '并行参考':3893 '库里数据集':917 '应用':4513 '应用化':51,148,4786,5385 '应用化看板':1440,5309 '应用化看板生成':34,156,1456,4505,5379 '应用看板':4620 '应该怎么做':500 '底层参考':380,800 '底部数字校准':5314 '延迟几次':4234 '建卡':9,44,85,678,685,891,1330 '建目录':1750,2476,3634 '建议保留':1521 '建议在仓库根维护一份本地':3688 '开业天数':2166 '开业日期':2168 '开始迭代':1864 '开窗排名':4933 '异步轮询写法':2577 '引入':60,4694 '引擎给的真实错误':2530 '引用':2138,2147,2151,2216,3080,3156,3184 '引用候选':3178 '引用其输出':2076 '张':1565,3290,5508 '张必须分批':2772 '张表':2769 '张表批量迁移':122 '张表跨多日的工程必须走':3377 '张进':211,3777,5060,5066 '张进的':3780,4495 '张进的完整自定义图表排障手册原文':4486 '张进的自定义图表注入实战经验':3955 '弥补':4678,5396 '强刷查看页':4453 '强调':3800 '归档目录':2118 '当':4084 '当前':4335 '当用户提到':39 '形态':4104,4118,4122,4126,4130 '形态多变':4099 '循环':1658,3359 '循环依赖':2060 '循环依赖拆法':3403 '循环依赖拆解':3880 '循环组':2248 '微信公众号':5497 '必填':584 '必拆':2062 '必看':3163,3355 '必经路径':2514 '必走':3808 '必进':3874 '必须':2977,3192,3579 '必须主动销毁注入物的场景':4283 '必须先':3527 '必须先于':1798 '必须在真实观远页面里做浏览器验证':3970 '必须在真实页面验证的问题':4010 '必须提供':419 '必须是':2936 '必须知道':4070 '必须确认数据范围':452 '必须读了再写':2439 '必须走':4574 '必须追问':454 '快速开始原则':4024 '怎么判断':2134 '怎么判新老客':5029 '怎么算':1974 '总体架构':4621 '恢复成本高过保留旧链一年':2806 '想看某':927 '想降低歧义建议保留本':1497 '懒加载导致脚本不执行':4009 '成多段':2094 '成长类型':4903 '我要写':5032 '或':258,474,590,1088,1753,2101,2706,2737,3457,3870,3872,4090,4375,5451 '或提供选项':458 '或直接读各':198 '或等价明确指令':2723 '战例':1466 '截断错误':4162 '所有':529,1556 '所有数值计算必须跑代码':414 '手动设置':725 '手工':2126 '手工对齐':3045 '手工源表':2185 '手机态切换':4473 '才执行':2791 '才是':2528 '才能安全裁':3081 '才需要':439 '打开':1204 '打开按钮图标':4360 '执行':2482 '执行会拿不到数据':3546 '执行结果':2508,3480 '执行落表':1706 '扫字段使用度':1682 '扫描':1918 '扫整库':91 '批量':3099 '批量任务异步监控':3357 '批量删除分批确认':2766 '批量发布都比手拼':781 '批量抓全部':1653 '批量抓原始定义':1937 '批量改造':3200 '批量迁移工程经验':3266 '找不到':3027 '找不到字段':2953 '找修复方案时':4754 '找共同字段抽到':2063 '找到真正可点击的':4353 '找有权限的页面':430 '找未知':3606 '把':1574,3695,4567,5329 '把同样混乱重做一遍':1731 '把官方':1503 '把待删清单作为':2783 '把整份报告拆成多列':4180 '把整条':106 '把注入卡':4271 '把混乱重做一遍':3272 '把第一个参数':4082 '把这张卡的数据导给我看':1220 '把这条链路重新做一遍':3805 '抓':3641 '折扣分桶':4914 '折扣率':4913 '折线':4526 '报':3438,5467 '报表':46 '报表导出':1405 '报错':101,2532 '报错信息':1561 '报错修复手册':2912 '报错走':467 '报错速查脚本更可靠':5268 '报错速查脚本现在能拿到干净错误':1253 '报错速查表所有':1256 '抬到':1209 '拆':2093 '拆列而非整包':4172 '拆到':118,157 '拉数据集所有下游':3084 '拉新':2208 '拿':1711,2542,3484 '拿不到':4156,4776 '拿去直接填空':3849 '拿新':3319 '拿真实错误':2483 '挂到':4214 '挂到当前页面根节点':4211 '指标':901,1973,4731 '指标卡':871 '指标泛化查询':1380 '按':1674,3949,4521,5002,5159 '按业务领域分':5050 '按目录缩范围':1934 '按这个顺序排查':4413 '按钮':4362 '按需要递减':4254 '换有权限的输入或写自包含':2948 '排序取数下限':5255 '排数据质量坑':171 '排除':540 '探':1824 '探测':3605,3623 '探测比盲发':1891 '探测类':1807 '探索':651,899,4729 '接':3918 '控件可见但点不动时':4370 '控制':2465 '推荐工作流':196,1648 '推荐方案':4171 '描述':815 '提醒用户执行':4450 '提需求':5466 '搜索':898 '搭配类型':4901 '操作':896,905,3499,3619,3991 '操作拆成':1576 '支付通道':2192 '改':2428,3018,3060,3323,3337 '改代码前先看':4331 '改写专用':3846 '改写方法论':216 '改写经验原文':4497 '改写经验未删减原文':5062 '改名':3336,3746 '改名或废弃':2109 '改数据方案':4179 '改输入':3339 '放什么':2179 '放在首屏':4272 '教':3916 '散点等':1425 '数':1995 '数据中台':5470 '数据为空':2944 '数据层':4543 '数据层架构':5393 '数据查询':8 '数据查询与卡片创建':90,412 '数据管理':640 '数据质量':5015,5172 '数据质量陷阱':5127 '数据集':658,1354,2844,3826 '数据集树根目录':3726 '数据集的':2900 '数据集目录':2351,2376,2446,3714,3722 '数据集目录树':1785,3631 '数据集视角':2652 '数组要同步':3242 '文件':4701,4817,5055 '文件夹id在':639 '新增':1188,1195,1471,2701,3892,4507,5087,5205,5292,5374,5415,5436 '新增命令面与':305 '新增的':32 '新对齐':1094 '新建':94,3718,4700,4792,4804,4810 '新建区域筛选器联动':757 '新建目录':1685,2264 '新引擎严格化':3044 '新旧并行':3369 '新旧并行是默认终态':2792,3522 '新旧并行验证':1715 '新老客':164,4855 '新能力':974 '新链路对账通过':2750 '方法':3620 '方法论':3072 '无':794,2032 '无任何活跃引用':2748 '无权限':1542 '无连字符':1883,1885 '无需修改':534 '无需再写明文密码到':1063 '日优惠订单比例':4918 '日常用这个':707 '日期':2191,4981,5149 '日期时间':5110 '日期比较恒为':3052 '日期边界':4956 '旧':3706 '旧地址自动':300 '旧数据集父目录':3712 '时':2368,3240,4736,4762,4802 '时代':5287 '时效类型':4900 '时比盲发':3608 '时用新':2678 '时自动切到':5387 '时间宏':4845 '时间窗口缩减实战':3255 '昨日窗口的':3261 '是':505,2421,2445,2503,5501 '是不是被引用':3561 '是任务触发结果':3477 '是否会员':2158 '是否存在':4349 '是否拦截事件':4419 '是否新客':2159 '是否盖住它':4416 '是懒加载的':4266 '是新搭还是改造':3950 '是真实失败原因':3354 '更复杂':4511 '更好':4512 '更新':1760,3651 '更稳的做法':4321 '更高级':52,147,4510,4785,5384 '替代':910 '替换数据源':3806 '替换样板':3263 '最关键的字段坑':2400 '最大坑':3237 '最完美':150 '最完美版本':4516 '最小骨架':2390 '最常用':644 '最常见':4106 '最快判断方式':4159 '最新':5082 '最简口诀':3850 '最简结论':4174 '最终一定要在真实页面验证':4457 '最终用真实浏览器点击验收':4386 '最终验收清单':4456 '最近':1168,5236 '最隐蔽':2416 '最高效':1827 '月':3259,4651 '月份':4649,4650 '月末':2114 '有':1763,2154 '有哪些':3790 '有编辑权限的页面':706 '服务器问题':1536 '服务端继续截断时命令会拒绝排序避免输出不可信顺序':1218 '未经用户逐项明确确认':3496 '未调度':2120 '本':354,370,405,1363,1434,1637,2042,3934,4687 '本周还是上月':460 '本地无下游':2073 '本地私有':246 '本地编译':1696 '本地脚本聚合分析':1963 '本地装观远官方私服':4800 '本文档是':63 '本月':4840 '本节的':784 '机制':594 '机器可读分析结果':2240 '权限可运行':3741 '条':646,4026 '条带':5294 '条最常踩坑':4829 '条硬规则':3822 '来源':3952,5056 '来追踪进度':3384 '极简调度规则':5080 '构建依赖图':2038 '构造':2386 '枚举值':677 '架构':4528 '某个祖先禁用了':4381 '某千万级订单明细表':3165 '查':1389 '查任务真错误':3660 '查任务详情':2511 '查全表':73 '查字段口径':170 '查层级问题':4369 '查控件中心点命中的真实元素':4371 '查数据':84 '查看态视觉隐藏':4274 '查看配置':716 '查询':4461 '柱':1418 '柱状图':872 '柱状图套路交付':4527 '柱状图展示门店排名':756 '标':2079 '标准交付物清单':3833 '标准图表':759,1327,1417 '标准建卡':1413 '标准建卡路由优先指向它':5435 '标准里':2973 '标注':3895 '标记或删除':2127 '树和数据集树是':2325 '树根目录':3730 '校验':4635 '校验工具集':2618 '样式提示都更可靠了':1258 '核心区别':3797 '核心反模式':2227 '核心结论':2247 '核心表互相循环引用':1908 '核销率':4912 '根因':2928 '根据':2570 '根据错误反推':1871 '根据错误类型判断':1842 '根节点':4086 '格式':482 '格式导出':1199 '桌面':4472 '检查':4334 '检查是否不必要物化':2104 '模块就能直接用':1023 '模式错误':1868 '模板':1031,2458,3682 '模板包':4664,5382 '模板包索引':4663 '模糊回复':2724,3511 '次执行':2071 '欢迎在以下任意渠道找我交流踩坑实录':5465 '正交':5049 '正确':2872 '正确做法':2323 '正确是':3444,3537 '正确顺序':2825 '此操作只能在草稿页面执行':4583 '步':4642 '步关键陷阱':3231 '步实现':3254 '步是写':1735 '步标准工作流':3824 '步法':3831 '步走':1920 '步骤':1822,1838,1869 '死循环深入分析':4492 '死循环陷阱':4314 '段已说明':1530 '每':5016,5173 '每个':68,3350 '每个旧':2254 '每批单独走步骤':2773 '每条只列':2916 '每次结构性修改后回浏览器重新验证':4050 '比':4190 '比全量拉取省':924 '比单':3365 '比如门店维表里塞了':2231 '比较':3601,4325 '气泡图':876 '永远不要主动建议删除':2782 '永远是':2975 '没人用':2082 '没必要时':4401 '没有任何其他本地':2074 '没有此能力':938 '治理':14,93,2779 '治理与写入':105,1550 '治理与写入红线':3412 '治理写入':1445 '治理判断维度均来自真实跑通的请求':1562 '治理扫描':1652,1898,2475 '治理扫描互补':3786 '泛化查询':1104,1180,5203 '泛化查询guanc':1186 '注入':133,3940,3958 '注入与排障':27 '注入卡放在首屏以下':4267 '注册前后行为':4866 '注册第一张券':4916 '注册门店优先级回填':4904 '洞察分析':1006 '活动券':5012,5169 '派生':2164 '派生字段尽量在下游算':2169 '浏览器层级问题':3995 '浏览器排障清单':4328 '浮层':4228 '消费频次':4857 '涉及':3868 '涉及的':1625 '涵盖':3956 '深度参考资料':4479 '混入了下游经营结果字段':2230 '混用':1888 '清理':3517 '清理一下':2728,3514 '清理对象':2250 '清理旧链路':1720 '清理缓存时':4710 '渠道':5473 '渠道门店':5121 '渲染产物':5321 '滚动':4464 '漏斗':1423 '照引':5054 '父目录':3708 '片段':498 '版':110 '版本':225,1373 '版本与依赖元数据全部对齐':5274 '版本记录':5081 '状态':2033 '状态异常':2066 '状态是否真的切换':4396 '状态码':1532 '环境':230,1049 '环比':416 '现在直接':1222 '现在都能一行命令出数':1174 '现实':5291 '理解':801 '生产':1050,4987,4999,5154 '生成报表':86 '用':425,1662,3004,3459,3841,4030,4367,4727 '用久了的常见症状':1907 '用以下命令重新拿':3747 '用户回复':2721 '用户已逐项明确确认':2712 '用户没有明确指定日期范围时':453 '用户要手工粘贴时':4431 '用户说':146,4509,4784,5383 '用没有运行权限的':3543 '用餐时段':165,4846 '用餐时段怎么分桶':5030 '由用户主动指令':2787 '由用户明确指令才执行':3506 '留存流失':166,4864 '登录域':602 '登录失效':1539 '的':273,351,364,372,476,766,843,929,1274,1321,1365,1524,1980,1989,2023,2141,2434,2443,2990,3278,3391,3981,3986,4057,4063,4221,4564 '的一节产出给用户审阅':2786 '的下游':2742 '的个数':2000,2005,2011,2018 '的入口章节会指出':70 '的共存':1262 '的兼容性表':515 '的判断':4170 '的前端问题':3971 '的取数':1230 '的只读路由':1502 '的后果':4216 '的命令面':4588 '的命令面比本':980 '的实战手册':1639 '的实证记录':1555 '的对应表':2257 '的情况':4014 '的方法':1820 '的标准':358,4524 '的环境':798 '的环境继续工作':385 '的用户也能拿到':5348 '的盲区':4684,5406 '的纯打包':5339 '的细分':4158 '的节点':5018 '的输出表':2046 '监听':4315 '目录':76,79,641,2340,2371,2450,3436,3711,3717,4686 '目录与旧目录并行':1687 '目录名':3760,3772 '目录树':1782,3628 '目标':4255 '目标架构':2251 '目标表':3035 '盲发':1840 '直接':1202 '直接保存卡片':589 '直接走':3385 '直接进':5038 '看':193,3300 '看到的文本节点':4356 '看板':50,2149,2152,2896,3564,4518 '看板专用宽表':2218 '看示例':4723 '真':3154 '真正有用的目标往往是':4359 '真目录与其他':1515 '硬规则':4161 '确定砍字段范围':1683 '确认':4391 '确认删除':2722 '确认是否临时':2125 '示例':2922 '祖先节点是否被设成':4421 '禁止依赖':2197 '禁止反向被':2214 '禁止在思考中直接口算百分比':415 '私域社群':5011,5168 '私服':337,1309 '私服分发':241,1590 '种':854,4102 '种图表类型':864 '种已知节点类型':2463 '种日期粒度':858 '种格式':849 '秒决定要不要进':3852 '移到补数':2117 '稳定':2194 '稳得多':4196 '空快照处理标准':3832 '空快照阻塞':113 '空格':3594 '空格不一致':2964 '立刻切到这条路线':4519 '立即一次':4233 '章':5107,5133,5158 '章节':197,479 '章节就是基于它整合的':4500 '章节末尾的':200 '端':1111 '第':1732 '第一个跑通的最小':3733 '第一层':3728 '第一步':2263 '第三步':2481 '第二步':2385 '第五步':2695 '第四步':2617 '等':473,758,1640,2115 '等价于在':1160 '等几秒再查':2556 '等同于':3562 '筛选':4547 '筛选值按需查':434 '筛选切换':4462 '简要标题':488 '管理时':4771 '管理重写工程':3843 '类':5114 '类专属常见坑':3835 '类历史':3588 '类型对照':2572 '类常见错误表':4662 '类报错手册':1468 '类真坑':2914 '粉紫渐变':5312 '精准':4323 '系统归一化':4978 '系统识别归一化':5146 '索引':1483 '索引扩充':5190 '索引清单':5001,5156 '索引重排':3247 '累计':1398,5235 '累计消费':4887 '累计窗口':4936 '红线':2798 '约':4246,4249,4252 '纯':5187 '纯文档':5279 '纯日期范围':443 '线':1419 '组件库':3907 '组件接入':3930 '组合图':875 '终止':1535,1538,1541,1544 '结构直接照搬':4146 '结构说明':58 '结果':2505 '结论':4136 '绕过组件直接改':3942 '给我做个报表附件':1221 '给看板用':2078 '绝不执行任何':3497 '统一写':4610 '继续使用原页面硬编码':4303 '维':1664,2056,2132 '维字段判断':1667 '维度':2057,2133 '维表':2228 '维表依赖':3571 '维表混入下游经营字段':1910 '缓存使用规范':744 '缓存清理':742 '缓存状态':718 '缓存隔离':731,4709 '编译成三段式':3280 '编译时按节点级别名替换':2993 '编辑':552 '编辑态恢复可见':4276 '编辑态进出':4470 '缺失或填错':2935 '缺的用':3047 '群消息':3381 '翻树':3693 '老':302 '老写法':4595 '老店':169 '老引擎自动补':3042 '而不是复制一套控件':4411 '联不到':4680,5401 '联到':4569 '联动':36,779,1334,1429,1458 '联动补丁':4640 '联系':5458 '聚合':4546 '能出来再':3303 '能力':1325 '能否从其他字段推导':2165 '能把治理判断':3402 '脚本':541 '脚本不稳定时':4439 '脚本开始漂移或多次局部修补失效时':4044 '自动发布':595 '自动重登':1062 '自定义公式字段':878 '自定义图表':25,48,131,3980,4031,4033 '自定义图表开发与排障':142,3890 '自定义图表排障完整':5067 '自定义图表注入与排障':1451 '自定义图表经验':219 '自定义模块':149,4514 '自定义渲染':822 '自身的顶层':2374 '自连而非':3030 '节':3815,4617 '节点':2039,2085,2392,2672,3306,3311,3549,5175 '节点会让索引前移':2427 '节点列表':932 '节点复杂度':2084 '节点字段名是':2404 '节点必须同时改':2430 '节点数':1992 '节点数据集':3859 '节点的':2380 '节点级预览':2637,3664 '节点能不能出数据':1704,3302 '获取':4092 '菜单':4258 '营业额':40 '营收':5118 '营收占比':4885 '营销目标':5010,5167 '营销策略':5115 '落地后再考虑路由切换':1644 '落本地':3104 '落盘':1058 '落盘组合':1232 '落这里':3720,3725 '蒸馏自':4983 '蒸馏自两段连续的餐饮':5098 '蒸馏自两段餐饮连锁':185 '蓄水':2209 '血泪经验':1873 '血缘':931,1391 '行':1217,2971,5096 '行列数对账':2665 '行数':2888,4703,4819 '行数与':2756 '补充':882 '补齐':2112 '表':3687,3878 '表单':884,903,906,946,1383,4733 '表单填报':1279,1394 '表实战':3268 '表常常没下游':3566 '表批量改造':4759 '表格':1422 '表错位':3029 '被删':3745 '装上':353,1324 '装配':761,1332,1415,1600 '要':3481 '要单独看看板侧':3568 '要够用':4225 '要注入':4028 '要用真实浏览器点击':4390 '要看今天':459 '要自己从':4088 '覆盖整库治理扫描':1563 '见':242,512,745 '观远':4,54,209,1905,3896,3953,5504 '观远bi服务器地址':598 '观远bi版本':587 '观远bi登录账号':609 '观远原生浮动控件':4403 '观远复制页面会生成新的':4300 '观远当前的':4071 '观远自定义图表':4264 '规则映射':2096 '规则计算应集中':2105 '规范':224 '视角':2622 '解决':3789,3795 '触发':2124,2540,4508 '触发关键词见其':813 '触发场景':5025 '触发执行':1768,2486,3655 '触发现象':2917,2927 '计算':2049 '计算列数':2001 '订单':43 '订单子渠道大':4898 '订单明细':2200 '认证':713 '让':5345 '让两下游都读它':2065 '让加载器看得到注入卡':4262 '让图表重排':4235 '让用户能找到并编辑':4277 '记住返回的两个':2363 '设计':3910 '设计分层':1673 '设计砍掉的':2895 '评价':177,5035 '评价明细':2203 '评价管理':5013,5170 '诊断':712 '该不该保留':3563 '该治理':3792 '详情':3643 '详情里':3352 '详细双源审计方法见':2171 '详细命令查':990 '详细操作手册下沉到':66 '详细索引':4697 '详细见':2401 '详见':275,323,3507 '语法速查':5421 '误删一张被看板用着的':2804 '误删任何一个':3185 '误当成真正交互节点':4357 '说明':585,3705 '请输入etl名称':2931 '读':904,2213,4483 '读取类':1771 '调度异常':2116 '调度按层推进':2221 '调度方式':2026 '调未封装的':951 '贡献者原文':5052 '财务双源对账':4976,5144 '财务对账':5037 '财务营收':5009,5166 '资源':1490 '资源不存在':1545 '资源包级':4575 '走':83,348,471,829,3860,3884,3929,4019 '走通':1227 '起':4590 '起metric':1184 '起手模块':5354 '起手模板包':5350 '超出':448 '超出官方组件能力的视觉定制':817 '超级马甲':5461,5493,5498 '超过':2770 '跑挂':3188 '跟右侧锚点导航层级冲突':4219 '跨多日':3879 '跨多日工程':123 '跨多日的大型重构':3683 '跨天':4861 '跨月对齐':4847 '路径':1558,2720,3621 '路径因':509 '路径在':5366 '路径约定':502 '路由':989 '路由互补':1605 '路由切换清理':4004 '路由切页':4468 '路由层':64 '路由提示':750 '路由清理':139,3968 '路由表':5045 '路由规则在':1528 '路线':3926,3937 '跳过治理直接写':3271 '跳过治理直接动手':1730 '踩坑':3405 '轨迹完整落到一份自包含文档里':3407 '轮询':1710 '轮询效率高':3367 '轴叠加':820 '轻节点重':4970,5138 '输入':5019,5176 '输入了另一个':2044 '输入数据集':3739 '输出':2021,2969,3089,5020,5177 '输出大小':2098 '输出字段集':2892 '输出数据集':1975,3736 '输出数据集已存在':2823 '输出数据集行数':2885 '输出数据集还在':1805 '输出物建议':2238 '输出的':2907 '输出行数':2019 '输出表名':2719 '边':2041 '运行时取数':3984 '运行时报错附带':1238 '运行环境':543 '近':2232,3257,4842 '返回':1811 '返回的':2500 '这份':5499 '这套是观远':3778 '这是循环依赖最常见的根源':2235,3574 '这条闸跟':2795 '这类':1250 '这类只读场景下可能双触发':1491 '这类拼凑路径':3415 '这类是规则字段':2160 '这里是未删减版':4501 '进':3881 '进入业务公式库的总入口':4826 '进入编辑态':4288 '连接探测':320 '适合改造既有页面':3944 '适合标准化复用':3933 '选择':81 '透传聚合数':2006 '逐张迁移':1718 '通常':4305 '通常为':603 '通用':4734 '通用字段对照表':4955 '通过':1267,2732 '速查':203,2389,2915,3202,3618,3681,4152,5022,5179 '速查表':3690 '遇到取数问题':4052 '遇到复杂的固定卡片':4480 '遇到意外的错误以及得到新的教训立即更新':461 '遇到意外的错误立即把它落到':462 '遮罩层':3962 '避免单次失败影响整批':3294 '避免每次都用':3691 '那棵树的':2939 '配':4707 '配置文件':535 '配置说明':551 '里':1986,2014,2143,2419 '里写':3455 '里点几下做卡片配置':4017 '里能引用什么字段名':2438 '里要':2955 '重写':826,2780,4768 '重复字段名':4952 '重定位':4008 '重定向':1200 '重建出来还是一团乱麻':1915,3559 '重排不影响':3488 '重排节点':3238 '重新分配':1676 '重新定义':1371 '重映射':3308 '重构':1568 '重节点轻':4973,5141 '链接':5474 '链改写成':108 '链路与':3371 '错':4087 '错位':2992 '错填':2452 '错误处理':1531 '错误定位三步走':2536 '错误详情':1789 '错误输出更干净':1233,5257 '锚点导航问题时':4482 '镜像':1052 '长公式':2091 '长公式数':2012 '门店':41,2189 '门店日报':2210 '门店网格':4982,5150 '问题':491,5511 '阈值多档分级':5117 '阶段脚本':2474 '阶段脚本时':4745 '附':5394 '陆续对齐的':987 '降级':1670 '除法等':417 '除非用户明确要求收敛':2794 '集中维护到专门的规则映射':2161 '集合':1826 '零':5191 '需手动指定':620 '非按平台操作分':5051 '非跨天':4863 '靠':1889 '面板':1164 '页实际运行的是哪份脚本':4041 '页面':699,5325 '页面副本验收':111,3869 '页面加载':4459 '页面已经完全坏掉时':4441 '页面很多':918 '页面滚动位置是否真的变化':4394 '页面生命周期管理':4280 '页面级':3989 '页面里是否留有历史实验节点':4350 '顶层':2933 '顶层连接状态检查':1038 '项':3838 '顺序不能反':1729 '顺手':783 '顾客会员':5111 '顾客标识映射':2193 '顾客行为':5008,5165 '预览先于执行':3296 '预览节点':1699 '餐饮':179,1441,4806 '餐饮连锁':1472,5089 '饼':1420 '马甲':205,5459 '马甲专版':56 '马甲蒸馏版':4698 '驼峰大写':1887 '骨架':3848 '高于滚动内容':4256 '高亮模块':5311 '高效':1893,3610 '高级指标分析':1107 '高级自定义':1438 '高级计算':1163 '默认值从':1207 '默认抬到':5253 '默认文件夹id':626 '默认给完整':4432 '默认行为':2776 '默认行为是把待删清单产出给用户审阅':3505 '默认走缓存':659 '默认页面id':614 '🅰️':409 '🅱️':1546","prices":[{"id":"e857ae46-8130-436a-a79a-423181c07275","listingId":"d92b9735-302c-4644-bd02-8432789f15a3","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"maojiebc","category":"majia-guanyuan","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:27.894Z"}],"sources":[{"listingId":"d92b9735-302c-4644-bd02-8432789f15a3","source":"github","sourceId":"maojiebc/majia-guanyuan","sourceUrl":"https://github.com/maojiebc/majia-guanyuan","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:27.894Z","lastSeenAt":"2026-05-18T19:14:33.323Z"}],"details":{"listingId":"d92b9735-302c-4644-bd02-8432789f15a3","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"maojiebc","slug":"majia-guanyuan","github":{"repo":"maojiebc/majia-guanyuan","stars":6,"topics":["agent-skill","agent-skills","bi-skill","business-intelligence","claude-code","claude-skill","codebuddy","codex","custom-chart","data-analysis","etl","gbrain","guandata","guandata-bi","hermes","openai-codex","openclaw","qoder","smartetl","workbuddy"],"license":"mit","html_url":"https://github.com/maojiebc/majia-guanyuan","pushed_at":"2026-05-18T09:41:11Z","description":"观远 BI (Guandata) 全链路 Agent Skill · 数据查询/取数（Part A）+ ETL 治理/写入（Part B）+ HTML/CSS/JS 自定义图表（Part C）· Claude Code / OpenClaw / Codex / Hermes 通用 · V2.1.0","skill_md_sha":"1a65935fc73187f655e065a7208ab72c0481e13c","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/maojiebc/majia-guanyuan"},"layout":"root","source":"github","category":"majia-guanyuan","frontmatter":{"name":"majia-guanyuan","license":"MIT","description":"观远 BI（Guandata）全链路操作 — 数据查询/建卡/取数（Part A）、ETL 治理/写入/删除（Part B，含 SmartETL 全链路重写 + 字段使用度审计 + ExecPlan 工程化）、自定义图表 HTML/CSS/JS 注入与排障（Part C，含 V2.1.1 新增的 HTML 应用化看板生成 + selector 联动 descriptor patch）。当用户提到 营业额/门店/会员/订单/建卡/取数/报表/ETL/direct-save/payload_json/自定义图表/HTML 看板/应用化/更高级/不限标准看板/观远/Guandata/BI 时使用。马甲业务实战版，60+ ETL 战例、10 类报错手册、Claude Code/OpenClaw/Codex/Hermes 通用。"},"skills_sh_url":"https://skills.sh/maojiebc/majia-guanyuan"},"updatedAt":"2026-05-18T19:14:33.323Z"}}