Mọi dashboard được Sprucely.io hiển thị - dù được tạo qua JavaScript runtime độc lập, các thành phần React độc lập, hay được lưu trữ trong tài khoản của bạn - đều có chung một cấu trúc JSON cơ bản: một đối tượng config cho phần định dạng áp dụng cho toàn bộ dashboard, và một đối tượng data mô tả cây widget. Tài liệu tham khảo này trình bày đầy đủ cấu trúc JSON đó, cùng với định dạng dataset mà nó đọc dữ liệu và loại biểu đồ nên chọn cho một tổ hợp cột nhất định. Để biết hướng dẫn nhúng, xem ghi chú tích hợp dashboard đơn giản.
Dashboard JSON
Mỗi dashboard là một đối tượng JSON duy nhất với hai khóa cấp cao nhất: config, chứa phần định dạng áp dụng cho toàn bộ dashboard, và data, một cây các node widget có kiểu, bắt đầu từ một node gốc dashboard duy nhất. Mỗi node có một trường type và, đối với các loại container, một mảng children chứa các node lồng nhau.
dash- node gốc của dashboard. Luôn chỉ có đúng một, ở đỉnh của cây.dash_stacker_hor/dash_stacker_ver- sắp xếp các children của nó theo hàng hoặc theo cột.dash_chart- một biểu đồ, thuộc một trong các loại biểu đồ được hỗ trợ (xem bên dưới).dash_table- một bảng dữ liệu.dash_text- một khối văn bản.dash_image- một hình ảnh đã tải lên.dash_spacer- khoảng trống cố định giữa các widget.
Mọi widget đều chấp nhận cùng các trường trình bày, bất kể loại nào:
size- kích thước của widget theo trục chính của container: ‘Auto’, ‘<n>px’ hoặc ‘<n>%’.padding- khoảng đệm bên trong, ví dụ ‘10px’ (trừ dash_spacer).backgroundColor- một màu CSS, ví dụ ‘#FFFFFF’ hoặc ‘transparent’.borderRadius/borderWidth- bán kính góc và độ dày viền, ví dụ ‘10px’.borderColor- một màu CSS cho viền.shadow- true hoặc false; thêm hiệu ứng đổ bóng.
Các Widget Biểu Đồ
Mọi biểu đồ đều có chung các trường; trường nào trong số x, y, d và r được sử dụng, và loại cột mà mỗi trường chấp nhận, phụ thuộc vào loại biểu đồ - mỗi loại biểu đồ được hỗ trợ được trình bày trong một mục con riêng bên dưới, kèm theo ví dụ trực quan được dựng từ một dataset mẫu nhỏ dùng chung.
datasetId- dataset mà biểu đồ này đọc dữ liệu - phải khớp với tên của một dataset.chartType- area, bar, cell, dot, hexbin or line.title- tiêu đề biểu đồ, không bắt buộc.dataFunction- hàm tổng hợp áp dụng chod: count (default), sum, average, min, max, median or stddev. Không thiết lậpdkhi dùng count.x- cột cho chiều X (bắt buộc với mọi loại biểu đồ).y- cột cho chiều Y (chỉ áp dụng cho cell, dot và hexbin, và bắt buộc với ba loại này).d- cột được tổng hợp vào chiều giá trị/màu sắc của biểu đồ.r- cột cho chiều bán kính (chỉ áp dụng cho dot, và bắt buộc).seasonX/seasonY- nhóm một cột thời gian thành một chu kỳ lặp lại: year, quarter, month, week, dayofyear, day, dayofweek, hour, minute or second.
Các cột chiều được phân loại là phân loại, thời gian hoặc liên tục dựa trên kiểu đã khai báo của chúng - xem phần JSON dataset bên dưới. Khi dataFunction là count, chiều d được để trống - count không cần cột giá trị. Bất kỳ hàm tổng hợp nào khác (sum, average, min, max, median or stddev) đều yêu cầu chiều đó.
Các chiều mà một loại biểu đồ yêu cầu đều phải được điền: cell, dot và hexbin không thể vẽ nếu thiếu y, còn dot không thể vẽ nếu thiếu r. Yêu cầu bỏ sót một trong số đó sẽ bị từ chối, vì vậy nếu dataset không có cột phù hợp, hãy chọn loại biểu đồ không cần đến chiều đó - area, bar và line chỉ cần x, còn hexbin thể hiện hai chiều mà không cần cột bán kính.
Cột
x chấp nhận cột phân loại, liên tục hoặc thời gian. d phải là liên tục, và chỉ được dùng khi dataFunction không phải là count. seasonX được phép khi x là cột thời gian, để nhóm nó thành một chu kỳ lặp lại như ngày trong tuần. y và r không được sử dụng.
Đường
x chấp nhận cột liên tục hoặc thời gian - không chấp nhận phân loại. d phải là liên tục, chỉ được dùng khi dataFunction không phải là count. Không hỗ trợ tính theo mùa. y và r không được sử dụng.
Vùng
x chấp nhận cột liên tục hoặc thời gian - không chấp nhận phân loại. d phải là liên tục, chỉ được dùng khi dataFunction không phải là count. Không hỗ trợ tính theo mùa. y và r không được sử dụng.
Ô
x và y đều yêu cầu cột phân loại, hoặc cột thời gian có bật tính theo mùa (seasonX cho x, seasonY cho y). d phải là liên tục, chỉ được dùng khi dataFunction không phải là count. seasonY còn yêu cầu x đã phải quy về một chiều phân loại - hoặc là một cột thực sự phân loại, hoặc một cột thời gian có thiết lập seasonX. r không được sử dụng.
Điểm
x và y chấp nhận cột liên tục hoặc thời gian. r và d đều phải là liên tục - không bao giờ là phân loại hoặc thời gian. Không hỗ trợ tính theo mùa. Biểu đồ Điểm hiển thị tốt nhất với dataset có tối đa vài trăm dòng.
Hexbin
x và y đều chấp nhận cột liên tục hoặc thời gian - không chấp nhận phân loại. d phải là liên tục, chỉ được dùng khi dataFunction không phải là count. Không hỗ trợ tính theo mùa. r không được sử dụng.
Các Widget Khác
Bảng (dash_table)
datasetId- dataset cần hiển thị.fontFamily- mặc định Arial; một trong các font Arial, Calibri, Cambria, Century Gothic, Courier New, Garamond, Helvetica, Consolas/Monaco (Monospace), Lucida Bright, Lucida Sans, Segoe UI, Tahoma, Verdana.fontSize- mặc định 12px; 6-256px hoặc 1-10vw.color- mặc định inherit.bold/italic- true hoặc false, mặc định false.ratio- tỷ lệ chiều rộng/chiều cao, một số từ 0.125 to 16.
Văn Bản (dash_text)
text- nội dung văn bản cần hiển thị.fontFamily/fontSize(mặc định 3vw) /color/bold/italic- giống như widget bảng.justifyContent/alignItems- ‘0’ đầu, ‘1’ giữa hoặc ‘2’ cuối.
Hình Ảnh (dash_image)
assetId- một tài nguyên hình ảnh đã tải lên.objectFit- mặc định none; none, contain, cover or fill.
Khoảng Trống (dash_spacer)
size- bắt buộc; mặc định 100px; 0-100% hoặc 30-1000px.
Bộ Xếp Chồng (dash_stacker_hor, dash_stacker_ver)
children- các widget lồng nhau, được sắp xếp theo hàng (dash_stacker_hor) hoặc theo cột (dash_stacker_ver).gap- mặc định ‘10px’; khoảng cách giữa các children.minHeight- chiều cao tối thiểu cho stacker.
Dataset JSON
Một dataset là một đối tượng JSON duy nhất gồm tên, các cột có kiểu và các dòng dữ liệu:
{
"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- tên dataset; các biểu đồ và bảng tham chiếu đến nó qua trườngdatasetIdcủa chúng.headers- tên các cột, theo đúng thứ tự với mỗi dòng trong entries.types- một kiểu cột cho mỗi header - xem các nhóm bên dưới.entries- các dòng dữ liệu, mỗi dòng là một mảng giá trị theo thứ tự header.
Nếu muốn, row_start, row_end, col_start và col_end cho phép chọn một khoảng con của entries để nhập, được đánh chỉ số từ 0 và bao gồm cả hai đầu - hữu ích khi chỉ muốn thêm các dòng mới từ một bảng lớn hơn. Cả bốn tham số này mặc định là toàn bộ phạm vi:
{
"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
}Mỗi kiểu cột được phân loại là phân loại, thời gian hoặc liên tục, điều này quyết định cột đó có thể được dùng cho những chiều biểu đồ nào - xem các phần widget biểu đồ ở trên:
- Phân Loại -
BIT, BITSTRING, BOOLEAN, BOOL, LOGICAL, BLOB, BYTEA, BINARY, VARBINARY, UUID, VARCHAR, CHAR, BPCHAR, TEXT, STRING - Thời Gian -
DATE, TIME, TIMESTAMP, DATETIME, TIMESTAMP WITH TIME ZONE, TIMESTAMPTZ - Liên Tục - mọi kiểu khác, ví dụ
INTEGER, FLOAT, DOUBLE, BIGINT, DECIMAL
Các tham chiếu cột trong biểu đồ (x, y, d, r) phải khớp chính xác với tên header, phân biệt chữ hoa/thường.
Định Dạng và Ghi Đè Theme
Màu sắc ở cấp dashboard được thiết lập một lần trong config.style.widget và áp dụng cho mọi widget không ghi đè chúng:
color- màu chữ mặc định.backgroundColor- màu nền mặc định của dashboard.primaryColor- màu tiền cảnh/chuỗi dữ liệu đang hoạt động, dùng cho tiêu đề và chuỗi dữ liệu được lọc chéo.primaryColorSubtle- đầu thấp của dải gradient màu dùng cho biểu đồ cell, dot và hexbin.secondaryColor- màu nền/chuỗi dữ liệu chưa lọc.
Bất kỳ widget nào cũng có thể ghi đè cách trình bày riêng của nó trực tiếp trên node JSON - backgroundColor, color, padding, borderRadius, borderWidth, borderColor và shadow. Ví dụ bên dưới ghi đè màu sắc và góc của riêng một biểu đồ, trong khi phần còn lại của dashboard vẫn giữ theme dùng chung:
{
"type": "dash_chart",
"datasetId": "Orders",
"chartType": "hexbin",
"x": "amount",
"y": "quantity",
"backgroundColor": "#F5F0FF",
"borderRadius": "12px",
"borderWidth": "1px",
"borderColor": "#6E2BDC",
"shadow": true
}Ví Dụ Đầy Đủ
Một dashboard nhỏ kết hợp phần tiêu đề, hai biểu đồ đặt cạnh nhau và một bảng, tất cả đều đọc dữ liệu từ một dataset:
{
"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" }
]
}
}