← 返回 Skills 市场
观远BI Skill
作者
zhengyuhe123
· GitHub ↗
· v3.0.0
· MIT-0
52
总下载
0
收藏
0
当前安装
3
版本数
在 OpenClaw 中安装
/install guandata-bi
功能描述
使用观远BI来进行数据获取与数据分析。触发词:查数据、做图表、看报表、营业额、门店、会员、订单,分析
使用说明 (SKILL.md)
\r \r
观远BI\r
\r
🔴 操作前必读(不可跳过)\r
\r
⚠️ 关键规则\r
\r 所有数值计算必须跑代码 — 禁止在思考中直接口算百分比、环比、除法等。\r
- 必须提供 pg_id — 不保存的卡片无法取数据\r
- 先查页面权限 — 用
list-pages --manageable找有权限的页面,不用翻 JSON\r - 筛选值按需查 — 只有用了分类筛选(
IN/EQ/CONTAINS)才需要search-values;纯日期范围(BT)不需要\r - 图表类型限制 — 超出 metric/row/column 上限会返回空数据\r
- 必须确认数据范围 — 用户没有明确指定日期范围时,必须追问,不要自己假设。例如:"你想看哪段时间的数据?" 或提供选项:"要看今天、本周还是上月?"\r \r \r \r 每次做分析前,第一步永远是:\r
cat skills/guandata/分析经验.md\r
```\r
这不是建议,是硬性步骤。跳过 = 重复踩坑。规则都在里面,包括:\r
- 数据表选择(哪张表对应什么场景)\r
- 字段陷阱\r
- 报告规范\r
- 计算红线(加权平均、禁止口算)\r
- 待处理的bug\r
\r
**遇到意外的错误以及得到新的教训立即更新:** 遇到意外的错误以及得到新的教训,当场写入 `分析经验.md` 的「待确认」区域(第四章),格式:\r
```markdown\r
### 7.N [YYYY-MM-DD] 简要标题\r
- **场景**: 什么情况下遇到的\r
- **问题**: 发生了什么\r
- **我的判断**: 我认为应该怎么做\r
```\r
如果配置了 cron,待确认项可以自动发送给用户确认。\r
\r
## 基本信息\r
- 配置文件: `skills/guandata/config.json`(**含明文凭据,请勿提交到公开仓库**)\r
- 脚本: `skills/guandata/scripts/guandata.py`\r
\r
## 运行环境\r
- **Python 3.8+**\r
- **依赖库**: `httpx`(`pip install httpx`)\r
- 凭据存储在 `config.json` 中(明文),仅供本地使用,切勿提交到公开仓库\r
\r
## 配置说明\r
\r
编辑 `config.json`:\r
\r
```json\r
{\r
"version": "6",\r
"base_url": "https://your-guandata-instance.com:port",\r
"domain": "your_domain",\r
"login_id": "your_username",\r
"password": "your_password",\r
"default_pg_id": "your_default_page_id",\r
"default_folder_id": "your_default_folder_id"\r
}\r
```\r
\r
| 字段 | 必填 | 说明 |\r
|------|------|------|\r
| `version` | ✅ | 观远BI版本:`"6"` 或 `"7"`。\x3Cbr>• `"6"`:观远BI 6.x,直接保存卡片\x3Cbr>• `"7"`:观远BI 7.0+,使用 draft/release 机制(创建卡片后自动发布页面) |\r
| `base_url` | ✅ | 观远BI服务器地址,如 `https://bi.company.com:8080` |\r
| `domain` | ✅ | 登录域,通常为 `guanbi`,具体咨询你们的BI管理员 |\r
| `login_id` | ✅ | 观远BI登录账号 |\r
| `password` | ✅ | 观远BI登录密码 |\r
| `default_pg_id` | | 默认页面ID。不传时,`create-and-get` 需手动指定 `pg_id`;传入后可省略 |\r
| `default_folder_id` | | 默认文件夹ID。创建新页面时的存放位置 |\r
\r
### 如何获取 pg_id / folder_id\r
\r
1. 在观远BI网页打开目标页面,URL 中的 `pgId=xxx` 即为页面ID\r
2. 文件夹ID在观远BI「数据管理」→「目录」中查看\r
\r
## 核心命令\r
\r
```bash\r
SCRIPT="python3 skills/guandata/scripts/guandata.py"\r
\r
# 查数据集(默认读本地缓存)\r
$SCRIPT list-datasets\r
$SCRIPT list-datasets --columns # 同时显示每个数据集的字段\r
$SCRIPT list-datasets --refresh # 强制刷新缓存(数据源有变更时用)\r
\r
# 查字段(默认读本地缓存,自动包含计算字段)\r
$SCRIPT get-columns \x3Cds_id> # 输出原始字段 + 计算字段\r
$SCRIPT get-columns \x3Cds_id> --refresh # 强制刷新缓存\r
$SCRIPT get-columns \x3Cds_id> --with-calc # 同时显示计算字段(公式字段)\r
\r
# 查枚举值(筛选前必查,避免值不存在)\r
# fd_id 从 get-columns 输出第二列拿\r
$SCRIPT search-values \x3Cds_id> \x3Cfd_id> --search "关键词"\r
$SCRIPT search-values \x3Cds_id> --name "门店名称" --search "某门店" # 用字段名代替 fd_id\r
\r
# 建卡+取数(一步到位)\r
$SCRIPT create-and-get '{"name":"卡片名","ds_id":"数据集ID","chart_type":"SINGLE_VALUE","pg_id":"页面ID","metric":[{"name":"会员id","aggr":"CNT_DISTINCT"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-02-01","2026-02-28"]}]}'\r
$SCRIPT create-and-get '{...}' --limit 200 # 限制返回200行数据(默认500行上限)\r
\r
# 建卡+取数(组合图,metric_additional 传折线叠加数据)\r
$SCRIPT create-and-get '{"name":"达成率趋势","ds_id":"数据集ID","chart_type":"STACKED_COLUMN_WITH_LINE","pg_id":"页面ID","metric":[{"name":"营业额","aggr":"SUM"}],"metric_additional":[{"name":"人数","aggr":"SUM"}],"row":["营业日期(月)"],"column":["销售类型"],"filters":[...]}'\r
\r
# 仅建卡(不取数)\r
$SCRIPT create-card '{...}'\r
\r
# 取卡片数据(含筛选条件)\r
$SCRIPT get-card-data \x3Ccard_id>\r
\r
# 列页面\r
$SCRIPT list-pages\r
$SCRIPT list-pages --manageable # 只显示有编辑权限的页面(日常用这个)\r
\r
# 注意:list-datasets 默认显示父文件夹ID\r
# 输出格式示例:\r
# 数据集名称\r
# ID: 数据集ID | 行数 列数 | 状态\r
# 父文件夹ID: 父文件夹ID\r
# 描述: 描述信息\r
# 路径: 目录路径\r
\r
# 创建页面\r
$SCRIPT create-page "页面名称"\r
$SCRIPT create-page "页面名称" --parent-dir "目录ID" --desc "描述"\r
\r
# 获取页面卡片列表\r
$SCRIPT get-page-cards \x3Cpg_id>\r
\r
# 批量删除卡片(需要 pg_id)\r
$SCRIPT delete-cards \x3Cpg_id> \x3Ccard_id1> \x3Ccard_id2> ...\r
```\r
\r
## 💾 数据缓存机制\r
**`create-and-get`、`get-card-data` 命令都会自动将数据保存到本地 CSV 缓存文件。**\r
\r
输出末尾会显示缓存路径:`📁 缓存: skills/guandata/.cache/data/xxx.csv`\r
\r
### 缓存目录结构\r
\r
```\r
skills/guandata/.cache/\r
├── data/ # 数据查询缓存(CSV),默认共享目录\r
├── datasets/ # 数据集列表缓存(JSON)\r
├── columns/ # 字段列表缓存(JSON)\r
└── tasks/ # 按任务隔离的缓存(使用 --task 参数时)\r
└── {task_name}/\r
├── data/\r
├── datasets/\r
└── columns/\r
```\r
\r
### 按任务隔离缓存(--task)\r
\r
不同任务的缓存混在一起时,用 `--task` 参数按任务名分组。**`--task` 放在子命令前面:**\r
\r
```bash\r
# 堂食分析任务 → skills/guandata/.cache/tasks/堂食分析/data/\r
$SCRIPT --task "品类分析" create-and-get '{"name":"品类","ds_id":"\x3Cdataset_id>",...}'\r
\r
# 查字段也隔离\r
$SCRIPT --task "会员分析" get-columns \x3Cdataset_id>\r
```\r
\r
不加 `--task` 时,缓存仍在默认的 `.cache/data/` 共享目录。\r
\r
### 缓存清理\r
\r
当缓存占用过多空间或数据过期时,需要清理缓存:\r
\r
```bash\r
# 清理所有数据查询缓存(保留最近7天)\r
find skills/guandata/.cache/data -name "*.csv" -mtime +7 -delete\r
\r
# 清理所有缓存(彻底清空)\r
rm -rf skills/guandata/.cache/*\r
\r
\r
\r
### 缓存文件格式\r
\r
CSV,首行为表头,后续行为数据。用 Excel / pandas / csv 模块直接读即可。\r
\r
### 大模型使用规范\r
\r
**当拿到取数结果后,必须用缓存文件处理数据,不要把大量数据塞进上下文。**\r
\r
正确做法:\r
```python\r
import csv\r
# 1. 从输出中提取缓存路径\r
# 2. 用代码读取缓存\r
with open('skills/guandata/.cache/data/xxx.csv', encoding='utf-8-sig') as f:\r
reader = csv.reader(f)\r
headers = next(reader)\r
rows = list(reader)\r
# headers[j] 是第 j 列的字段名\r
# rows[i][j] 是第 i 行第 j 列的值(字符串)\r
```\r
\r
## create-and-get / create-card 参数说明\r
\r
`create-and-get` 和 `create-card` 共用以下参数格式:\r
\r
| 参数 | 必填 | 类型 | 说明 | 类比 SQL |\r
|------|------|------|------|----------|\r
| `name` | ✅ | string | 卡片名称 | - |\r
| `ds_id` | ✅ | string | 数据集 ID(用 `list-datasets` 查) | `FROM 表` |\r
| `chart_type` | ✅ | string | 图表类型(见下方速查表) | - |\r
| `pg_id` | ✅ | string | 保存到的页面 ID(用 `list-pages --manageable` 找) | - |\r
| `row` | | list | 行维度(分组依据) | `GROUP BY` |\r
| `column` | | list | 列维度(横向拆列) | 交叉表列头 |\r
| `metric` | | list | 数值(要算的指标) | `SUM/AVG/COUNT` |\r
| `metric_additional` | | list | 叠加数值(组合图专用:柱+线的线) | - |\r
| `color_by` | | list | 颜色分组(气泡图/散点图) | - |\r
| `size_by` | | list | 气泡大小(气泡图专用) | - |\r
| `filters` | | list | 筛选条件 | `WHERE` |\r
| `sorting` | | list | 排序 | `ORDER BY` |\r
| `custom_fields` | | list | 自定义公式字段(动态创建计算列) | `SELECT ... , SUM(x)/SUM(y) AS 别名` |\r
\r
举例说明:\r
```json\r
{\r
"row": ["城市"], // 按城市分行\r
"column": ["销售类型名称"], // 堂食/外卖拆成两列\r
"metric": [{"name": "毛营业额", "aggr": "SUM"}], // 每格填营业额总和\r
"filters": [{"name": "营业日期", "op": "BT", "value": ["2026-01-01", "2026-02-28"]}], // 只看1-2月\r
"sorting": [{"name": "毛营业额", "order": "DESC"}] // 按营业额降序排\r
}\r
// 等价于: SELECT 城市, 销售类型名称, SUM(毛营业额) FROM 表 WHERE 营业日期 BETWEEN ... GROUP BY 城市, 销售类型名称 ORDER BY SUM(毛营业额) DESC\r
```\r
\r
### 自定义公式字段(custom_fields)\r
\r
在创建卡片时动态添加计算字段,无需提前在观远界面建好:\r
\r
```bash\r
$SCRIPT create-and-get '{\r
"name": "成本率分析",\r
"ds_id": "数据集ID",\r
"chart_type": "GROUPED_COLUMN",\r
"pg_id": "页面ID",\r
"row": ["门店名称"],\r
"metric": [\r
{"name": "毛营业额", "aggr": "SUM"},\r
{"name": "成本率"}\r
],\r
"custom_fields": [\r
{"name": "成本率", "fdType": "DOUBLE", "formula": "SUM([实际使用金额])/SUM([毛营业额])*100"}\r
],\r
"filters": [{"name": "营业日期", "op": "BT", "value": ["2026-01-01", "2026-02-28"]}]\r
}'\r
```\r
\r
**参数格式**:\r
\r
| 字段 | 必填 | 说明 |\r
|------|------|------|\r
| `name` | ✅ | 新字段名称 |\r
| `fdType` | ✅ | 数据类型:`DOUBLE`(数值)、`STRING`(文本)等 |\r
| `formula` | ✅ | 公式表达式,用 `[字段名]` 引用字段,支持 `SUM()`/`AVG()` 等聚合 |\r
\r
**注意**:\r
- 公式里的字段名必须是数据集中已存在的字段\r
- 创建后该字段可直接在 `metric`/`row` 中引用(和其他字段一样),如果公式已经聚合无需再写 `aggr`\r
- 仅 `create-and-get` 和 `create-card` 支持此参数\r
\r
\r
## 图表类型速查(26种)\r
\r
| 类型 | metric | row | column | metric_additional | color_by | size_by | 备注 |\r
|------|:------:|:---:|:------:|:-----------------:|:--------:|:-------:|------|\r
| `SINGLE_VALUE` | 1 | 0 | 0 | 0 | 0 | 0 | 指标卡(单值) |\r
| `KPI_CARD` | n | 0 | 0 | 0 | 0 | 0 | 指标卡(带阈值样式) |\r
| `BASIC_COLUMN` | 1 | n | 0 | 0 | 0 | 0 | 柱状图 |\r
| `GROUPED_COLUMN` | n | n | 1 | 0 | 0 | 0 | 簇状柱状图 |\r
| `STACKED_COLUMN` | n | n | 1 | 0 | 0 | 0 | 堆积柱状图 |\r
| `PERCENT_STACKED_COLUMN` | n | n | 1 | 0 | 0 | 0 | 百分比堆积柱状图 |\r
| `WATERFALL_COLUMN` | 1 | n | 0 | 0 | 0 | 0 | 瀑布图 |\r
| `BULLET_COLUMN` | 2 | n | 0 | 0 | 0 | 0 | 子弹图 |\r
| `BASIC_BAR` | 1 | n | 0 | 0 | 0 | 0 | 条形图 |\r
| `BASIC_LINE` | 1 | n | 0 | 0 | 0 | 0 | 折线图 |\r
| `MULTI_LINE` | n | n | 1 | 0 | 0 | 0 | 多条折线图 |\r
| `STACKED_AREA` | n | 1 | 1 | 0 | 0 | 0 | 堆积面积图 |\r
| `PERCENT_STACKED_AREA` | n | 1 | 1 | 0 | 0 | 0 | 百分比堆积面积图 |\r
| `STACKED_COLUMN_WITH_LINE` | n | 1 | 1 | 1 | 0 | 0 | metric=柱子, metric_additional=折线 |\r
| `GROUPED_COLUMN_WITH_LINE` | n | 1 | 1 | 1 | 0 | 0 | metric=柱子, metric_additional=折线 |\r
| `STACKED_COLUMN_WITH_SYMBOL` | n | 1 | 1 | 1 | 0 | 0 | metric=柱子, metric_additional=标记 |\r
| `GROUPED_COLUMN_WITH_SYMBOL` | n | 1 | 1 | 1 | 0 | 0 | metric=柱子, metric_additional=标记 |\r
| `PIE` | 1 | 1 | 0 | 0 | 0 | 0 | 饼图 |\r
| `TREE_MAP` | 1 | n | 0 | 0 | 0 | 0 | 矩形树图 |\r
| `FUNNEL` | n | 0 | 0 | 0 | 0 | 0 | 漏斗图 |\r
| `HEAT_MAP` | 1 | 1 | 1 | 0 | 0 | 0 | 热力图 |\r
| `MULTIDIMENSIONAL_SANKEY` | 1 | n | 0 | 0 | 0 | 0 | 多维桑基图 |\r
| `PIVOT_TABLE` | n | n | n | 0 | 0 | 0 | 交叉表 |\r
| `WORD_CLOUD` | 1 | 1 | 0 | 0 | 0 | 0 | 词云 |\r
| `BASIC_BUBBLE` | 2 | n | 0 | 0 | 1 | 1 |气泡图 x=metric[0], y=metric[1] |\r
| `BASIC_SCATTER_PLOT` | 2 | 1 | 0 | 0 | 1 | 0 | 散点图 x=metric[0], y=metric[1]|\r
\r
> `n` = 不限数量, `0` = 不支持, `2` = 最大2个\r
\r
\r
## metric 格式\r
\r
```json\r
{"name": "毛营业额", "aggr": "SUM"} // SUM\r
\r
{"name": "订单编码", "aggr": "CNT_DISTINCT", "alias": "订单数"} // 指定聚合\r
\r
{"name": "桌单价"} // 自定义字段如果在formula的计算公式中已聚合的情况下,就不再需要 aggr了\r
```\r
\r
聚合方式: `SUM` / `AVG` / `MAX` / `MIN` / `CNT` / `CNT_DISTINCT`\r
\r
## filters 格式\r
\r
```json\r
// 维度筛选(WHERE)\r
{"name": "城市", "op": "IN", "value": ["上海市", "南京市"]}\r
\r
// 日期范围\r
{"name": "营业日期", "op": "BT", "value": ["2026-01-01", "2026-02-28"]}\r
\r
// 度量筛选(HAVING,聚合后过滤)\r
{"name": "毛营业额", "op": "GT", "value": ["1000000"]}\r
```\r
\r
## sorting 格式\r
\r
```json\r
// 单字段排序\r
[{"name": "毛营业额", "order": "DESC"}]\r
[{"name": "门店编号", "order": "ASC"}]\r
\r
// 多字段排序\r
[{"name": "城市", "order": "ASC"}, {"name": "毛营业额", "order": "DESC"}]\r
```\r
\r
## 字段名格式\r
\r
`row`、`column`、`metric.name`、`filters.name`、`sorting.name`、`color_by.name`、`size_by.name` 都用字段名。\r
\r
**普通字段** — 直接写平台上的字段名:\r
```json\r
"row": ["城市"]\r
"metric": [{"name": "毛营业额", "aggr": "SUM"}]\r
"filters": [{"name": "门店名称", "op": "EQ", "value": ["某门店"]}]\r
```\r
\r
**日期子字段** — `字段名(粒度)`,自动按时间维度拆分:\r
\r
| 写法 | 效果 | 示例输出 |\r
|------|------|----------|\r
| `"营业日期(年)"` | 按年汇总 | 2025 |\r
| `"营业日期(季度)"` | 按季度汇总 | 2025年第4季度 |\r
| `"营业日期(月)"` | 按月汇总 | 2025-11 |\r
| `"营业日期(周)"` | 按周汇总 | 2025年第44周 |\r
| `"营业日期(星期)"` | 按星期几汇总 | 星期六 |\r
\r
```json\r
"row": ["营业日期(月)"] // 按月看趋势\r
"filters": [{"name": "营业日期(年)", "op": "IN", "value": ["2026"]}] // 筛选2026年\r
```\r
\r
## filterType 速查\r
\r
| 类型 | 含义 | 示例 |\r
|------|------|------|\r
| `EQ` | 等于 | `["A品牌"]` |\r
| `NE` | 不等于 | `["闭店"]` |\r
| `IN` | 在列表中 | `["上海市","北京市"]` |\r
| `NI` | 不在列表中 (Not In) | `["闭店","未开业"]` |\r
| `BT` | 范围 | `["2025-01-01","2025-12-31"]` |\r
| `GT` | 大于 | `["100"]` |\r
| `GE` | 大于等于 | `["100"]` |\r
| `LT` | 小于 | `["100"]` |\r
| `LE` | 小于等于 | `["100"]` |\r
| `CONTAINS` | 包含 | `["万达"]` |\r
| `IS_NULL` | 为空 | `[]` |\r
| `NOT_NULL` | 不为空 | `[]` |\r
\r
## 建卡示例\r
\r
**示例0:汇总值(row 为空) — 拿总计不拆维度**\r
```bash\r
# row=[] 不分组,直接返回汇总值,不会截断\r
$SCRIPT create-and-get '{"name":"汇总","ds_id":"\x3Cdataset_id>","chart_type":"BASIC_COLUMN","pg_id":"\x3Cpage_id>","row":[],"metric":[{"name":"毛营业额","aggr":"SUM"}],"filters":[{"name":"日结日期","op":"BT","value":["2026-03-16","2026-03-22"]}]}'\r
# 输出: 毛营业额: 313230258.42\r
# 卡片保留供复核,用户要求清理时再 delete-cards\r
```\r
\r
**示例1:指标卡 — 2月消费会员数**\r
```bash\r
$SCRIPT create-and-get '{"name":"2月消费会员数","ds_id":"\x3Cdataset_id>","chart_type":"SINGLE_VALUE","pg_id":"页面ID","metric":[{"name":"会员id","aggr":"CNT_DISTINCT"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-02-01","2026-02-28"]}]}'\r
# 输出: 会员id: 252335\r
```\r
\r
**示例2:柱状图 — 各城市毛营业额(按营业额降序)**\r
```bash\r
$SCRIPT create-and-get '{"name":"各城市毛营业额","ds_id":"\x3Cdataset_id>","chart_type":"BASIC_COLUMN","pg_id":"页面ID","row":["城市"],"metric":[{"name":"毛营业额","aggr":"SUM"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-01-01","2026-02-28"]}],"sorting":[{"name":"毛营业额","order":"DESC"}]}'\r
# 输出: 毛营业额: ['2323360', '8483271', ...] 维度: ['南京市', '南通市', ...]\r
```\r
\r
**示例3:交叉表 — 各城市×月份营业额(按城市+月份排序)**\r
```bash\r
$SCRIPT create-and-get '{"name":"城市×月份营业额","ds_id":"\x3Cdataset_id>","chart_type":"PIVOT_TABLE","pg_id":"页面ID","row":["城市"],"column":["营业日期(月)"],"metric":[{"name":"毛营业额","aggr":"SUM"}],"filters":[{"name":"营业日期","op":"BT","value":["2025-01-01","2026-02-28"]}],"sorting":[{"name":"城市","order":"ASC"},{"name":"营业日期(月)","order":"ASC"}]}'\r
# 输出: [城市 ,月份 ,毛营业额].....['上海','2025-01','123232323'],['上海','2025-02','1230232333'].....\r
# 排序: 先按城市名正序,再按月份正序\r
```\r
\r
**示例4:多条折线图 — 各渠道月趋势**\r
```bash\r
$SCRIPT create-and-get '{"name":"渠道月趋势","ds_id":"\x3Cdataset_id>","chart_type":"MULTI_LINE","pg_id":"页面ID","row":["营业日期(月)"],"column":["销售类型名称"],"metric":[{"name":"毛营业额","aggr":"SUM"}],"filters":[{"name":"营业日期","op":"BT","value":["2025-01-01","2026-02-28"]}]}'\r
```\r
\r
**示例5:组合图(柱+线) — 营业额柱状+消费人数折线**\r
```bash\r
$SCRIPT create-and-get '{"name":"营业额与用餐人数","ds_id":"\x3Cdataset_id>","chart_type":"STACKED_COLUMN_WITH_LINE","pg_id":"页面ID","row":["营业日期(月)"],"column":["销售类型名称"],"metric":[{"name":"毛营业额","aggr":"SUM"}],"metric_additional":[{"name":"用餐人数","aggr":"SUM"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-01-01","2026-02-28"]}]}'\r
```\r
\r
**示例6:气泡图 — 各门店营业额vs实收金额(按城市着色,气泡大小=用餐人数)**\r
```bash\r
$SCRIPT create-and-get '{"name":"门店气泡图","ds_id":"\x3Cdataset_id>","chart_type":"BASIC_BUBBLE","pg_id":"页面ID","row":["城市","门店"],"metric":[{"name":"毛营业额","aggr":"SUM"},{"name":"菜品实收金额","aggr":"SUM"}],"size_by":[{"name":"用餐人数","aggr":"SUM"}],"color_by":[{"name":"城市"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-01-01","2026-02-28"]}]}'\r
# row=维度标签, metric[0]=x, metric[1]=y, color_by=颜色分组, size_by=气泡大小\r
```\r
\r
## 完整工作流示例\r
\r
**需求:做一张「2026年2月各城市外卖销售类型毛营业额 TOP10」交叉表**\r
\r
```bash\r
# Step 1: 通过表id查字段,确认可用字段\r
$SCRIPT get-columns \x3Cdataset_id>\r
# → 确认: 城市(DIM), 毛营业额(METRIC), 销售类型名称(DIM), 营业日期(DATE)\r
\r
# Step 2: 查枚举值(因为用了 IN/EQ 筛选,必须查)\r
$SCRIPT search-values \x3Cdataset_id> --name "销售类型名称" --search "外卖"\r
# → 确认值是 "外卖"\r
\r
# Step 3: 建交叉表,自动取数\r
$SCRIPT create-and-get '{"name":"2月外卖各城市毛营业额","ds_id":"\x3Cdataset_id>","chart_type":"PIVOT_TABLE","pg_id":"\x3Cpage_id>","row":["城市"],"column":["销售类型名称"],"metric":[{"name":"毛营业额","aggr":"SUM"}],"filters":[{"name":"营业日期","op":"BT","value":["2026-02-01","2026-02-28"]},{"name":"销售类型名称","op":"EQ","value":["外卖"]}],"sorting":[{"name":"毛营业额","order":"DESC"}]}'\r
```\r
\r
> 💡 如果只做日期或数值筛选(无分类筛选),跳过 Step 2,两步搞定。\r
\r
\r
\r
## 错误处理\r
\r
| 状态码 | 处理 |\r
|--------|------|\r
| 500 | 终止,服务器问题 |\r
| 401 | 终止,登录失效 |\r
| 403 | 终止,无权限 |\r
| 404 | 终止,资源不存在 |\r
安全使用建议
This skill is a self-contained CLI client for your 观远BI server and looks consistent with that purpose, but take these precautions before installing or using it:
- Do not commit skills/guandata/config.json to any public repository; it contains plaintext credentials in the example path. Prefer environment variables or a secrets manager if possible.
- Inspect the full scripts/guandata.py file (the CLI) to confirm all network calls are only to your BI base_url and there are no unexpected outbound endpoints or webhook URLs. The SKILL.md and code indicate only communication with the configured base_url, but verify the remainder of the truncated code if you have it.
- The SKILL.md requires reading skills/guandata/分析经验.md before each run, but that file is not included—ask the publisher for the missing guidance or remove this mandatory step to avoid surprises.
- Restrict filesystem permissions for the skill folder so only intended users/processes can read config.json and .cache/. If you run this on a shared machine or CI, use a limited BI account with least privileges for testing.
- Test with a non-production BI account first and observe network traffic (or run in a sandboxed environment) to ensure data is only sent to your BI server.
If you want higher assurance, ask the publisher for the missing '分析经验.md', a threat model or code review, and confirm there are no automatic outbound notification mechanisms (cron/webhook/email) enabled by default.
功能分析
Type: OpenClaw Skill
Name: guandata-bi
Version: 3.0.0
The guandata-bi skill bundle is a legitimate tool for interacting with the Guandata BI platform. It provides a Python-based CLI (guandata.py) and a metadata builder (zonedata_builder) to perform operations like dataset querying, card creation, and page management. The code uses standard libraries (httpx, argparse) and follows the logic described in the documentation. While it stores credentials in a local config.json file, the SKILL.md explicitly warns users about this security risk and provides instructions for safe usage. No evidence of data exfiltration, malicious execution, or prompt-injection attacks was found.
能力评估
Purpose & Capability
The name/description (观远BI data fetching & analysis) matches the included Python CLI (scripts/guandata.py) and ZoneData helper modules. Required credentials and base_url are stored in config.json (example provided), which is expected for a self-hosted BI API client. No unrelated cloud/third-party credentials or binaries are requested.
Instruction Scope
SKILL.md instructs the agent to run the included CLI commands, read/write local cache (.cache) and edit config.json for credentials—these are within the skill's domain. It also mandates running 'cat skills/guandata/分析经验.md' before analysis, but that file is not present in the package; this mismatch should be resolved. The instructions avoid sending data to external endpoints except the configured base_url (your BI server).
Install Mechanism
No install spec or remote downloads are present; this is an instruction-and-code-only skill. The only external dependency noted is httpx (pip install httpx), which is reasonable for an HTTP client. No archive downloads or obscure remote URLs are used.
Credentials
No environment variables are requested. The skill expects credentials to be placed in skills/guandata/config.json (plaintext). That is proportionate to a CLI that logs into a BI server, but storing secrets in plaintext within the skill folder increases risk—especially if the skill directory is checked into a repo or shared. Consider using a secrets manager or restricting file permissions.
Persistence & Privilege
The skill writes cache files under skills/guandata/.cache/ and expects/uses a local config.json. It does not request permanent 'always' inclusion and does not modify other skills. Persisted files (caches, config) are normal for this tool, but you should be aware they contain query results and credentials.
如何使用
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install guandata-bi - 安装完成后,直接呼叫该 Skill 的名称或使用
/guandata-bi触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v3.0.0
修复:相对路径、运行时依赖说明、凭据安全提示
v2.0.0
观远BI数据分析Skill,支持6.x/7.x版本
v1.0.0
观远BI数据分析Skill,支持6.x/7.x版本
元数据
常见问题
观远BI Skill 是什么?
使用观远BI来进行数据获取与数据分析。触发词:查数据、做图表、看报表、营业额、门店、会员、订单,分析. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 52 次。
如何安装 观远BI Skill?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install guandata-bi」即可一键安装,无需额外配置。
观远BI Skill 是免费的吗?
是的,观远BI Skill 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
观远BI Skill 支持哪些平台?
观远BI Skill 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 观远BI Skill?
由 zhengyuhe123(@zhengyuhe123)开发并维护,当前版本 v3.0.0。
推荐 Skills