Sprucely.io 渲染的每一个仪表板——无论是通过独立的 JavaScript 运行时、独立的 React 组件创建,还是保存在您的账户中——都遵循同一套底层 JSON 结构:一个用于设置仪表板整体样式的 config 对象,以及一个描述组件树的 data 对象。本参考文档完整说明了这套 JSON 结构,以及它所读取的数据集格式,还有针对特定列组合应选用哪种图表类型。如需了解嵌入方法,请参阅简单的仪表板集成说明。
仪表板 JSON
每个仪表板都是一个单一的 JSON 对象,包含两个顶层键:config,用于承载仪表板整体样式;以及 data,这是一棵从单一仪表板根节点出发、由多个带类型的组件节点构成的树。每个节点都有一个 type 字段,对于容器类型的节点,还包含一个 children 数组,用于存放嵌套的子节点。
dash- 仪表板的根节点。整棵树中有且只有一个,位于最顶层。dash_stacker_hor/dash_stacker_ver- 将其子节点按行或按列排列。dash_chart- 图表,使用下文所支持的某一种图表类型(见下文)。dash_table- 数据表格。dash_text- 文本块。dash_image- 已上传的图片。dash_spacer- 组件之间固定的空白间隔。
无论类型如何,每个组件都支持相同的外观样式字段:
size- 组件沿其容器主轴方向的尺寸:‘Auto’、‘<n>px’ 或 ‘<n>%’。padding- 内边距,例如 ‘10px’(dash_spacer 除外)。backgroundColor- CSS 颜色值,例如 ‘#FFFFFF’ 或 ‘transparent’。borderRadius/borderWidth- 圆角半径与边框粗细,例如 ‘10px’。borderColor- 边框的 CSS 颜色值。shadow- true 或 false;是否添加投影。
图表组件
每种图表共用同一套字段;具体使用 x、y、d 和 r 中的哪几个,以及每个字段接受何种类型的列,取决于图表类型——下文各小节分别介绍每一种受支持的图表类型,并配有基于同一个小型示例数据集渲染的实时示例。
datasetId- 该图表所读取的数据集——必须与某个数据集的名称一致。chartType- area, bar, cell, dot, hexbin or line。title- 可选的图表标题。dataFunction- 应用于d的聚合方式:count (default), sum, average, min, max, median or stddev。使用 count 时,d应保持未设置。x- X 维度对应的列(所有图表类型都必填)。y- Y 维度对应的列(仅适用于 cell、dot 和 hexbin,且这三种类型必填)。d- 聚合到图表数值/颜色维度中的列。r- 半径维度对应的列(仅适用于 dot,且为必填)。seasonX/seasonY- 将时间列按周期性时段分组:year, quarter, month, week, dayofyear, day, dayofweek, hour, minute or second。
维度列会依据其声明的类型被划分为分类型、时间型或连续型——详见下文的数据集 JSON 部分。当 dataFunction 为 count 时,d 维度应保持未设置——计数(count)不需要数值列。其他任何聚合方式(sum, average, min, max, median or stddev)都需要该列。
图表类型所需的维度必须填写:cell、dot 和 hexbin 缺少 y 就无法绘制,dot 缺少 r 同样无法绘制。缺少其中任何一项的请求都会被拒绝,因此如果数据集中没有合适的列,请改选不需要该维度的图表类型——area、bar 和 line 只需 x,hexbin 则无需半径列即可呈现两个维度。
柱状图
x 可接受分类型、连续型或时间型的列。d 必须是连续型,且仅在 dataFunction 不为 count 时使用。当 x 为时间列时,可设置 seasonX,将其按周期性时段(例如星期几)分组。y 和 r 不使用。
折线图
x 可接受连续型或时间型的列——不支持分类型。d 必须是连续型,仅在 dataFunction 不为 count 时使用。不支持季节性分组。y 和 r 不使用。
面积图
x 可接受连续型或时间型的列——不支持分类型。d 必须是连续型,仅在 dataFunction 不为 count 时使用。不支持季节性分组。y 和 r 不使用。
热力图
x 和 y 都需要分类型的列,或启用了季节性分组的时间列(x 对应 seasonX,y 对应 seasonY)。d 必须是连续型,仅在 dataFunction 不为 count 时使用。使用 seasonY 时,还要求 x 本身已解析为分类型维度——可以是真正的分类型列,也可以是设置了 seasonX 的时间列。r 不使用。
散点图
x 和 y 可接受连续型或时间型的列。r 和 d 必须均为连续型——不能是分类型或时间型。不支持季节性分组。散点图在数据行数不超过几百行时呈现效果最佳。
六边形分箱图
x 和 y 都可接受连续型或时间型的列——不支持分类型。d 必须是连续型,仅在 dataFunction 不为 count 时使用。不支持季节性分组。r 不使用。
其他组件
表格 (dash_table)
datasetId- 要显示的数据集。fontFamily- 默认 Arial;可选 Arial, Calibri, Cambria, Century Gothic, Courier New, Garamond, Helvetica, Consolas/Monaco (Monospace), Lucida Bright, Lucida Sans, Segoe UI, Tahoma, Verdana 之一。fontSize- 默认 12px;6-256px 或 1-10vw。color- 默认 inherit。bold/italic- true or false,默认 false。ratio- 宽高比,数值范围为 0.125 to 16。
文本 (dash_text)
text- 要显示的文本。fontFamily/fontSize(default 3vw) /color/bold/italic- 与表格组件相同。justifyContent/alignItems- ‘0’ start, ‘1’ center or ‘2’ end。
图片 (dash_image)
assetId- 已上传的图片资源。objectFit- 默认 none;none, contain, cover or fill。
间隔 (dash_spacer)
size- 必填;默认 100px;0-100% 或 30-1000px。
堆叠容器 (dash_stacker_hor, dash_stacker_ver)
children- 嵌套的子组件,按行(dash_stacker_hor)或按列(dash_stacker_ver)排列。gap- 默认 ‘10px’;子组件之间的间距。minHeight- 该堆叠容器的最小高度。
数据集 JSON
数据集是一个单一的 JSON 对象,包含名称、带类型的列以及行数据:
{
"name": "Orders",
"headers": ["region", "category", "amount", "quantity"],
"types": ["VARCHAR", "VARCHAR", "FLOAT", "INTEGER"],
"entries": [
["North", "Electronics", 120.50, 2],
["South", "Clothing", 89.95, 1],
["North", "Furniture", 432.00, 5],
["South", "Electronics", 74.50, 1]
]
}name- 数据集名称;图表和表格通过各自的datasetId字段引用它。headers- 各列的名称,顺序与 entries 中每行的顺序一致。types- 每个表头对应一个列类型——具体分类见下文。entries- 行数据,每一行是一个按表头顺序排列的值数组。
您可以选择使用 row_start、row_end、col_start 和 col_end 来指定要导入的 entries 子范围(从零开始计数,首尾均包含)——这在只需从更大的表格中追加新行时非常有用。这四个字段默认均为完整范围:
{
"name": "Orders",
"headers": ["region", "amount"],
"types": ["VARCHAR", "FLOAT"],
"entries": [ ["North", 120.50], ["South", 89.95], ["North", 432.00], ["South", 74.50] ],
"row_start": 0,
"row_end": 1,
"col_start": 0,
"col_end": 1
}每种列类型都被划分为分类型、时间型或连续型,这决定了它可以用于哪些图表维度——详见上文的图表组件部分:
- 分类型 -
BIT, BITSTRING, BOOLEAN, BOOL, LOGICAL, BLOB, BYTEA, BINARY, VARBINARY, UUID, VARCHAR, CHAR, BPCHAR, TEXT, STRING - 时间型 -
DATE, TIME, TIMESTAMP, DATETIME, TIMESTAMP WITH TIME ZONE, TIMESTAMPTZ - 连续型 - 其他所有类型,例如
INTEGER, FLOAT, DOUBLE, BIGINT, DECIMAL
图表中的列引用(x、y、d、r)必须与表头名称完全一致,并区分大小写。
样式与主题覆盖
仪表板级别的颜色只需在 config.style.widget 中设置一次,便会应用于所有未单独覆盖这些设置的组件:
color- 默认文字颜色。backgroundColor- 仪表板的默认背景色。primaryColor- 前景/激活系列颜色,用于标题以及交叉筛选后高亮的数据系列。primaryColorSubtle- cell、dot 和 hexbin 图表所使用的颜色渐变的低值端。secondaryColor- 背景/未筛选系列颜色。
任何组件都可以直接在其 JSON 节点上覆盖自身的样式——backgroundColor、color、padding、borderRadius、borderWidth、borderColor 和 shadow。下面的示例覆盖了某个图表自身的颜色与圆角,而仪表板的其余部分仍沿用共享主题:
{
"type": "dash_chart",
"datasetId": "Orders",
"chartType": "hexbin",
"x": "amount",
"y": "quantity",
"backgroundColor": "#F5F0FF",
"borderRadius": "12px",
"borderWidth": "1px",
"borderColor": "#6E2BDC",
"shadow": true
}完整示例
一个小型仪表板示例,包含一个标题、并排的两个图表以及一个表格,全部读取自同一个数据集:
{
"config": {
"type": "dashboard",
"style": {
"widget": {
"color": "#000000",
"backgroundColor": "#FFFFFF",
"primaryColor": "#6E2BDC",
"primaryColorSubtle": "#E2D5F8",
"secondaryColor": "#CCCCCC"
}
}
},
"data": {
"type": "dash",
"children": [
{ "type": "dash_text", "text": "Orders Overview", "fontSize": "2vw", "justifyContent": "0" },
{
"type": "dash_stacker_hor",
"children": [
{ "type": "dash_chart", "datasetId": "Orders", "chartType": "bar", "x": "region", "dataFunction": "count" },
{ "type": "dash_chart", "datasetId": "Orders", "chartType": "cell", "x": "region", "y": "category", "dataFunction": "count" }
]
},
{ "type": "dash_table", "datasetId": "Orders" }
]
}
}