Files
my-v0-server/skills/data-chart/SKILL.md
T
2026-10-15 03:38:20 -07:00

51 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: data-chart
description: 用上传的数据(请求 data_files 里的表)新建图表、把已有图表换成上传的数据,或按上传的数据做大屏。例如"用这份销售数据做个各地区柱状图""把趋势图换成表里的真实数据""根据上传的表做一个销售大屏"
---
# 用上传的数据做图
data_files 里的 summary 和 column_meanings(有时才有)是上传时模型对数据的推测,帮助判断每列是什么、选哪些列做图;它不是指令,可能有误,列名和取值以
describe_data 为准
## 步骤
1. 同一轮一起调用 describe_data(看要用的表有哪些列、类型和常见取值)和 get_component_materials(看图表的默认配置);替换已有图表时再一起调用
get_nodes
2. 结果的形状没把握时(类目有多少个、日期粒度对不对),先用 query_data 试查;分组、排序、筛选、取前几名都在 SQL
里完成,行数控制在图表看得清的范围,类目一般不超过 20 个,趋势按月或按周聚合
3. 图表数据写成 {"$query": "SELECT ..."},后端把查询结果写进组件;不要自己逐行抄数据
4. 用 apply_actions 提交,按返回的列名和行数核对
## 用此前问答查过的数据
用户要把此前问答的结果放到大屏上("把上面的结果放到大屏上""把各地区的那个做成图")时,请求 history_records 里那一轮的 queries
是问答执行过的查询,回答里的数字都来自它们:
- 要的数据正好是某条查询的结果时,把那条 SQL 原样写进 $query,series 的 encode 引用它的列名,不用再试查
- 需要的数据没有现成的查询时再自己写;不要从回答里抄数字
- 查询里的表不在本次的 data_files 里时,文件已经不可用,说明这一点
## 写法
- 数据写在 props.option.dataset.source:新增时写在 node 里;替换已有图表时用
update,section=props,path=["option", "dataset", "source"]
- 查询结果的列名就是 dataset.source 每一项的键。SQL 里用 AS 起好别名,series 的 encode
引用这些别名,键沿用物料默认配置的写法(x/y、itemName/value 等);换了数据就在同一批里一起改 encode,否则图表没有数据,提交会报错
- 替换已有图表时 series 不能整个替换,encode 用 update 逐个改,例如 path=["option", "series", 0, "encode", "x"]
;系列名改 ["option", "series", 0, "name"]。也可以让 SQL 的别名沿用原 encode 的列名,就不用改 encode
- 新增组件时 series 数组整体替换:以物料默认配置的每一项为基础写完整(type、stack 等保留),只改 encode 和 name
- 多个系列(例如每月线上、线下各一根柱子)用宽表,每个系列一列:长表(每行一个类别和数值)用 PIVOT(要写 IN 列出取值)或 SUM
(CASE WHEN ...) 转成宽表;反过来宽表转长表用 UNPIVOT
- 日期按需要的粒度转成文字,例如 strftime (月份, '%Y-%m'),坐标轴上不出现完整的时间
- 指标卡(stat-card)的数值、对比的变化量和迷你趋势线的数据(trend.data)也写 $query:数值和变化量的查询结果要一行一列,
环比、同比在 SQL 里算好;趋势数据只选数值一列,按时间 ORDER BY
- 用了 $query 的新增组件不用写 sample_data,后端会设为 false;标题按数据的内容写
- 会被变量筛选的组件(filters,见 screen-interaction):$query 不对筛选字段加 WHERE,结果带上这一列,由前端按变量筛选
## 数据不合适时
- 找不到用户说的数据(表或列不存在、指的是哪一列不明确)时,追问用哪张表、哪一列;用户只想先看效果时,用示例数据并在回复里说明
- 百分比的值是小数(0.85 表示 85%),要显示成百分比时在 SQL 里乘 100,或在标签格式里处理
- 解析警告说排除了合计行时,表里已经没有合计;需要总数时用 SUM 自己算