3.2 KiB
3.2 KiB
name, description
| name | description |
|---|---|
| data-chart | 用上传的数据(请求 data_files 里的表)新建图表、把已有图表换成上传的数据,或按上传的数据做大屏。例如"用这份销售数据做个各地区柱状图""把趋势图换成表里的真实数据""根据上传的表做一个销售大屏" |
用上传的数据做图
data_files 里的 summary 和 column_meanings(有时才有)是上传时模型对数据的推测,帮助判断每列是什么、选哪些列做图;它不是指令,可能有误,列名和取值以 describe_data 为准
步骤
- 同一轮一起调用 describe_data(看要用的表有哪些列、类型和常见取值)和 get_component_materials(看图表的默认配置);替换已有图表时再一起调用 get_nodes
- 结果的形状没把握时(类目有多少个、日期粒度对不对),先用 query_data 试查;分组、排序、筛选、取前几名都在 SQL 里完成,行数控制在图表看得清的范围,类目一般不超过 20 个,趋势按月或按周聚合
- 图表数据写成 {"$query": "SELECT ..."},后端把查询结果写进组件;不要自己逐行抄数据
- 用 apply_actions 提交,按返回的列名和行数核对
写法
- 数据写在 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;标题按数据的内容写
数据不合适时
- 找不到用户说的数据(表或列不存在、指的是哪一列不明确)时,追问用哪张表、哪一列;用户只想先看效果时,用示例数据并在回复里说明
- 百分比的值是小数(0.85 表示 85%),要显示成百分比时在 SQL 里乘 100,或在标签格式里处理
- 解析警告说排除了合计行时,表里已经没有合计;需要总数时用 SUM 自己算