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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 168 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# DataEase Skills(WorkBuddy)安装说明

适用版本:**DataEase 2.10.21+(推荐 2.10.26)**
技能能力:查询已有仪表板/大屏业务数据、列出资源、导出截图、创建图表等。

---

## 1. 环境准备

| 组件 | 说明 |
|------|------|
| WorkBuddy | 已安装并登录 |
| DataEase | 2.10.26(或 ≥2.10.21) |
| Python 3 | 命令行可执行 `python` / `python3` |
| OpenSSL | Windows 需安装并把 `bin` 加入 PATH(如 `C:\Program Files\OpenSSL-Win64\bin`) |
| Node.js | 仅「截图/PDF」需要;纯问数可不装 |

在 DataEase 管理后台创建 **API Key(Access Key / Secret Key)**。

---

## 2. 安装到 WorkBuddy

### Windows

1. 解压本压缩包,得到 `dataease` 文件夹(内含 `SKILL.md`、`scripts` 等)。
2. 将整个 `dataease` 文件夹复制到:

```text
%USERPROFILE%\.workbuddy\skills\dataease
```

3. 配置凭据:

```bat
cd %USERPROFILE%\.workbuddy\skills\dataease
copy .env.example .env
notepad .env
```

填写:

```bash
DATAEASE_BASE_URL=https://你的DataEase地址
DATAEASE_ACCESS_KEY=你的AccessKey
DATAEASE_SECRET_KEY=你的SecretKey
# 可选:账号密码(有 AK/SK 时优先使用 AK/SK)
# DATAEASE_USERNAME=admin
# DATAEASE_PASSWORD=******
DATAEASE_LOGIN_ORIGIN=0
```

4. (可选)截图依赖:

```bat
cd %USERPROFILE%\.workbuddy\skills\dataease
npm install
npx playwright install chromium
```

5. **完全退出并重启 WorkBuddy**(含托盘图标)。

### macOS / Linux

```bash
unzip DataEase-skills-*.zip
mkdir -p ~/.workbuddy/skills
cp -R dataease ~/.workbuddy/skills/dataease
cd ~/.workbuddy/skills/dataease
cp .env.example .env
# 编辑 .env 填入 BASE_URL 与 AK/SK
```

---

## 3. 安装后自检

在技能目录执行:

```bat
python scripts\inspect_data.py --list-datasets
python scripts\capture_dashboard.py list-resources --busi-type dashboard --limit 10
```

能返回 JSON 列表即表示连通成功。

问数示例:

```bat
python scripts\query_data.py list-views --resource-name "你的看板名称"
python scripts\query_data.py query-data --resource-name "你的看板名称"
```

业务数据在返回的 `charts[].rows` 中。

---

## 4. 在 WorkBuddy 中使用

对话中可说:

```text
@dataease 列出仪表板,并查询「销售总览」看板里各产品销售额
```

或:

```text
@dataease 打开看板「XXX」,告诉我明细表数据
```

推荐流程:找看板 → 列图表 → 拉数回答。

---

## 5. 功能说明

**已支持**

- 查询已有仪表板 / 大屏中的图表业务数据(指标、明细等)
- 列出组织、看板、图表
- 导出截图 / PDF(需安装 Playwright)
- 创建常见图表看板

**当前限制**

- 与页面上「查询组件 / 联动 / 下钻」完全同一过滤条件的结果暂不保证
- 部分复杂图型(如部分地图)的结构化输出可能不完整

---

## 6. 常见问题

1. **提示找不到 openssl**
Windows 安装 OpenSSL 后,把 `...\OpenSSL-Win64\bin` 加入用户 PATH,**新开**命令行窗口再试。

2. **WorkBuddy 找不到技能**
确认路径为 `~\.workbuddy\skills\dataease\SKILL.md`,并重启 WorkBuddy。

3. **鉴权失败**
检查 `DATAEASE_BASE_URL` 是否可访问,AK/SK 是否正确;优先配置 AK/SK。

4. **能列看板但拉不出数**
先用 `list-views` 确认图表标题,再用 `--view-title` 或 `--view-id` 精确查询。

---

## 7. 目录结构(解压后)

```text
dataease/
├── SKILL.md # WorkBuddy 技能说明(必填)
├── README.md
├── INSTALL.md # 本文件
├── .env.example
├── package.json
├── agents/
├── references/
├── scripts/
│ ├── query_data.py # 看板问数
│ ├── capture_dashboard.py
│ ├── inspect_data.py
│ ├── deploy.py
│ └── ...
└── templates/
```

如需协助部署,请联系 DataEase 技术支持并提供 DataEase 版本号与报错原文。
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
| 功能 | 命令 | 说明 |
|------|------|------|
| 📊 数据探索 | `inspect_data.py` | 查询数据集、字段信息 |
| 🔎 看板问数 | `query_data.py` | 按看板/图表拉取业务数据 |
| 📈 图表部署 | `deploy.py` | 创建图表并自动截图 |
| 📋 多图看板 | `multi_deploy.py` | 创建多图表仪表板 |
| 🏢 组织管理 | `capture_dashboard.py` | 查询/切换组织 |
Expand Down Expand Up @@ -53,6 +54,12 @@ python3 scripts/inspect_data.py --list-datasets
# 查询字段
python3 scripts/inspect_data.py --dataset "销售数据"

# 列出看板内图表
python3 scripts/query_data.py list-views --resource-name "销售总览"

# 拉取看板业务数据(可指定图表)
python3 scripts/query_data.py query-data --resource-name "销售总览" --view-title "各产品销售额"

# 创建图表(自动截图)
python3 scripts/deploy.py bar '各产品销售额' '销售数据' '产品' '实际销售'

Expand All @@ -79,6 +86,7 @@ dataease-v2-chart-skill/
├── package.json # Node 依赖
├── scripts/
│ ├── inspect_data.py # 数据探索
│ ├── query_data.py # 看板/图表业务数据查询
│ ├── deploy.py # 图表部署
│ ├── multi_deploy.py # 多图表部署
│ ├── engine.py # 图表引擎
Expand Down
50 changes: 47 additions & 3 deletions SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: dataease
description: DataEase V2 全能技能 - 创建图表看板、查询数据集、管理组织、导出截图/PDF。支持柱状图、折线图、饼图、明细表,部署后自动截图展示。
description: DataEase V2 全能技能 - 创建图表看板、查询数据集、按看板/图表拉取业务数据、管理组织、导出截图/PDF。支持柱状图、折线图、饼图、明细表,部署后自动截图展示。
environment:
required:
- DATAEASE_ACCESS_KEY
Expand All @@ -21,6 +21,7 @@ security:
| 功能模块 | 命令 | 说明 |
|---------|------|------|
| 📊 数据探索 | `inspect_data.py` | 查询数据集列表、字段信息 |
| 🔎 看板问数 | `query_data.py` | 列出看板图表并拉取业务数据(销售额、明细等) |
| 📈 图表部署 | `deploy.py` | 创建单图表并自动截图 |
| 📋 多图看板 | `multi_deploy.py` | 创建多图表仪表板并自动截图 |
| 🏢 组织管理 | `capture_dashboard.py list-orgs/switch-org` | 查询/切换组织 |
Expand All @@ -31,8 +32,8 @@ security:

作为 DataEase 自动化专家:
1. **执行优先**: 直接运行工具,不预先展示代码
2. **结果导向**: 优先展示截图,再说明逻辑
3. **单次往复**: 一次完成从探索到部署的全过程
2. **结果导向**: 问数优先返回 `rows` 业务数据;可视化场景再展示截图
3. **单次往复**: 一次完成从定位看板到拉数/部署的全过程

## 🚀 环境配置

Expand Down Expand Up @@ -94,6 +95,48 @@ python3 scripts/inspect_data.py --dataset "<数据集名称或ID>"

---

## 🔎 看板问数(WorkBuddy 查报表数据)

用于从**已有仪表板/大屏**中拉出图表业务数据(销售额、明细等),而不是只截图。

### 推荐流程
1. `list-resources` 找到看板
2. `list-views` 列出看板内图表
3. `query-data` 按图表拉数并回答业务问题

### 列出看板内图表
```bash
python3 scripts/query_data.py list-views --resource-name "销售总览"
# 或
python3 scripts/query_data.py list-views --resource-id <仪表板ID> --busi-type dashboard
```

### 查询全部图表数据
```bash
python3 scripts/query_data.py query-data --resource-name "销售总览"
```

### 按图表标题查询
```bash
python3 scripts/query_data.py query-data --resource-name "销售总览" --view-title "各产品销售额"
```

### 按图表 ID 查询
```bash
python3 scripts/query_data.py query-data --resource-id <仪表板ID> --view-id <图表ID>
```

### 常用参数
- `--busi-type`: `dashboard`(仪表板)或 `dataV`(大屏)
- `--org-id`: 指定组织
- `--result-count`: 返回行数上限
- `--page-size` / `--go-page`: 明细表分页
- `--include-raw`: 附带原始接口响应(体积较大,默认关闭)

**返回要点**:`charts[].rows` 为人可读行数据(字段名→值),Agent 应优先据此回答问数,不要只复述原始 JSON。

---

## 📈 图表部署

### 单图表部署(自动截图)
Expand Down Expand Up @@ -342,6 +385,7 @@ skills/dataease-chart-skill/
├── package.json # Node 依赖
├── scripts/
│ ├── inspect_data.py # 数据探索
│ ├── query_data.py # 看板/图表业务数据查询
│ ├── deploy.py # 单图表部署
│ ├── multi_deploy.py # 多图表部署
│ ├── engine.py # 图表引擎
Expand Down
4 changes: 2 additions & 2 deletions agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
interface:
display_name: "DataEase 全能技能"
short_description: "创建图表看板、查询数据、管理组织、导出截图/PDF"
short_description: "创建图表看板、查询看板业务数据、管理组织、导出截图/PDF"
icon: "chart-bar"
color: "blue"
default_prompt: "Use dataease skill to explore datasets, create charts and dashboards, manage organizations, list resources, and export screenshots or PDFs. Charts are automatically captured and displayed."
default_prompt: "Use dataease skill to explore datasets, list dashboard charts, query chart business data for Q&A, create charts and dashboards, manage organizations, list resources, and export screenshots or PDFs."
40 changes: 38 additions & 2 deletions references/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,41 @@
- `extWaitTime=0`
- `resultFormat=0`

## 5. 鉴权说明
## 5. 查询看板详情(含图表定义)

### 接口地址

`POST /de2api/dataVisualization/findById`

### 请求参数

- `id`:仪表板/大屏 ID
- `busiFlag`:`dashboard` 或 `dataV`
- `source`:固定 `main`
- `resourceTable`:默认 `core`

### 本技能的用途

`query_data.py list-views / query-data` 通过该接口读取 `canvasViewInfo`,得到图表 ID、标题、类型与字段配置。

## 6. 查询图表业务数据

### 接口地址

`POST /de2api/chartData/getData`

### 请求体

完整图表视图对象(来自 `canvasViewInfo`),并附带:

- `sceneId`:所属看板 ID
- `chartExtRequest`:过滤/下钻/结果行数等扩展请求

### 本技能的用途

`query_data.py query-data` 调用该接口拉取销售额、明细等业务数据,并将 `tableRow` / `series` 归一化为 `charts[].rows`。

## 7. 鉴权说明

当前按以下配置项接入:

Expand Down Expand Up @@ -135,11 +169,13 @@

- `x-de-token`

## 6. 当前脚本对应动作
## 8. 当前脚本对应动作

- `list-orgs`
- `switch-org`
- `list-resources`
- `capture`
- `query_data.py list-views`
- `query_data.py query-data`

如果实际网关存在额外签名规则,请按部署环境调整 `scripts/capture_dashboard.py`。
29 changes: 25 additions & 4 deletions scripts/browser_capture.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function printHelp() {

Options:
--url DataEase preview URL
--token X-DE-TOKEN to inject into localStorage as user.token
--token X-DE-TOKEN to inject into localStorage (2.10.21+ uses de_v2_user.token prefix)
--width Browser viewport width in pixels
--height Browser viewport height in pixels
--wait-seconds Extra wait time after canvas is visible
Expand Down Expand Up @@ -384,11 +384,32 @@ async function main() {
});

const now = Date.now();
// DataEase >= 2.10.21 prefixes user.* keys via useCache (default de_v2_user.token).
// Inject both prefixed and legacy keys for 2.10.20 and 2.10.26 compatibility.
await page.addInitScript(
({ injectedToken, cacheToken, cacheExp, cacheTime }) => {
localStorage.setItem('user.token', cacheToken);
localStorage.setItem('user.exp', cacheExp);
localStorage.setItem('user.time', cacheTime);
const pathname = window.location.pathname.replace('mobile.html', '');
const match = pathname.match(/^\/([^/]+)/);
const prefix = match ? `${match[1]}_` : 'de_v2_';
const keys = [
'user.token',
'user.exp',
'user.time',
`${prefix}user.token`,
`${prefix}user.exp`,
`${prefix}user.time`
];
const values = {
'user.token': cacheToken,
'user.exp': cacheExp,
'user.time': cacheTime,
[`${prefix}user.token`]: cacheToken,
[`${prefix}user.exp`]: cacheExp,
[`${prefix}user.time`]: cacheTime
};
for (const key of keys) {
localStorage.setItem(key, values[key]);
}
localStorage.setItem('__de_raw_token__', injectedToken);
},
{
Expand Down
Loading