ARIA · table fallback접근성
Canvas ARIA 메타데이터에 텍스트 요약과 표 대체 표현을 함께 제공합니다.
Graflume · Alpha
정확한 값을 비교하고 확인할 수 있도록 행과 열을 Scene 표로 렌더링합니다. Graflume 공개 카탈로그에 등록된 이 계열의 모든 실행 모드입니다. 각 탭은 독립 데이터, 옵션, Quick API와 지원 기능 근거를 가집니다.
차트 계열 · 기본 차트 계열
정확한 값을 비교하고 확인할 수 있도록 행과 열을 Scene 표로 렌더링합니다.
table()graflumetable차트 고유 기능
기본 Table 모드와 함께 열·레이아웃, 색상, 조건부 서식, 병합, 셀 안 시각화, 편집·검증, 날짜·시간, 정렬·필터, 그룹·피벗, 데이터·이력·내보내기와 가상화를 기능별 탭으로 실행합니다.
Table chart 모드가 실행 가능한 데이터와 옵션으로 보여주는 핵심 기능: Canvas header and cells · declarative column layout and locale-aware formatting.
상태불러오는 중
tableCanvas header and cellsdeclarative column layout and locale-aware formattinglayered table/header/row/column/cell stylesclosed conditional formattingexplicit and repeated-value mergesdata bar/heatmap/progress/sparkline/status-badge cellsexact cell hitbounded native semantic HTML mirrorroving keyboard navigation with focus, tooltip and selection synchronizationinteractive sort/filter/group/pivot controlsgrouped summaries and paging windowsvirtualization and frozen regionscell-level keyboard grid navigationtyped editing and validationimmutable view/source data APIsbounded reset/undo/redosafe CSV/JSON exportformatter registry불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
categoryordinal | valuequantitative | targetquantitative | previousquantitative |
|---|---|---|---|
| Insights | 86 | 88 | 74 |
| Dashboards | 78 | 82 | 69 |
| Reports | 69 | 74 | 65 |
| Alerts | 61 | 66 | 48 |
| Models | 48 | 55 | 41 |
| Exports | 37 | 44 | 34 |
브라우저 API
const data = [
{
"category": "Insights",
"high": 91,
"low": 81,
"previous": 74,
"target": 88,
"value": 86,
"width": 24
},
{
"category": "Dashboards",
"high": 84,
"low": 72,
"previous": 69,
"target": 82,
"value": 78,
"width": 21
},
{
"category": "Reports",
"high": 76,
"low": 63,
"previous": 65,
"target": 74,
"value": 69,
"width": 18
},
{
"category": "Alerts",
"high": 68,
"low": 55,
"previous": 48,
"target": 66,
"value": 61,
"width": 15
},
{
"category": "Models",
"high": 56,
"low": 42,
"previous": 41,
"target": 55,
"value": 48,
"width": 12
},
{
"category": "Exports",
"high": 45,
"low": 31,
"previous": 34,
"target": 44,
"value": 37,
"width": 10
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
}
],
"title": "Table",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Table chart 모드가 실행 가능한 데이터와 옵션으로 보여주는 핵심 기능: Canvas header and cells · declarative column layout and locale-aware formatting.",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
}
],
"title": "Table",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Table chart 모드가 실행 가능한 데이터와 옵션으로 보여주는 핵심 기능: Canvas header and cells · declarative column layout and locale-aware formatting.",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}열별 제목·너비·최소 너비·정렬·포매터와 행·헤더 높이, 셀 여백, 격자를 선언형 옵션으로 구성합니다.
상태불러오는 중
columns-layout불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 열과 레이아웃 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 열과 레이아웃",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellPadding": 11,
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"grid": {
"color": "#dbe4f0",
"columns": true,
"rows": true,
"width": 1
},
"headerHeight": 48,
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "열별 제목·너비·최소 너비·정렬·포매터와 행·헤더 높이, 셀 여백, 격자를 선언형 옵션으로 구성합니다.",
"text": "Table · 열과 레이아웃"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 열과 레이아웃 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 열과 레이아웃",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellPadding": 11,
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"grid": {
"color": "#dbe4f0",
"columns": true,
"rows": true,
"width": 1
},
"headerHeight": 48,
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "열별 제목·너비·최소 너비·정렬·포매터와 행·헤더 높이, 셀 여백, 격자를 선언형 옵션으로 구성합니다.",
"text": "Table · 열과 레이아웃"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}표 전체, 헤더, 열, 특정 행과 특정 셀의 배경·글자·테두리·굵기·정렬을 안전한 스타일 속성으로 겹쳐 적용합니다.
상태불러오는 중
cell-styles불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀·행·열 색상 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀·행·열 색상",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellStyles": [
{
"field": "status",
"row": 1,
"style": {
"fill": "#fff7ed",
"fontWeight": 700,
"textColor": "#c2410c"
}
}
],
"columnStyles": {
"actual": {
"fill": "#eff6ff",
"fontWeight": 700,
"textColor": "#1d4ed8"
}
},
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"headerStyle": {
"fill": "#172554",
"fontWeight": 800,
"textColor": "#ffffff"
},
"rowHeight": 43,
"rowStyles": [
{
"row": 0,
"style": {
"fill": "#ecfdf5",
"textColor": "#065f46"
}
}
],
"style": {
"stroke": "#dbe4f0"
}
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "표 전체, 헤더, 열, 특정 행과 특정 셀의 배경·글자·테두리·굵기·정렬을 안전한 스타일 속성으로 겹쳐 적용합니다.",
"text": "Table · 셀·행·열 색상"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀·행·열 색상 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀·행·열 색상",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellStyles": [
{
"field": "status",
"row": 1,
"style": {
"fill": "#fff7ed",
"fontWeight": 700,
"textColor": "#c2410c"
}
}
],
"columnStyles": {
"actual": {
"fill": "#eff6ff",
"fontWeight": 700,
"textColor": "#1d4ed8"
}
},
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"headerStyle": {
"fill": "#172554",
"fontWeight": 800,
"textColor": "#ffffff"
},
"rowHeight": 43,
"rowStyles": [
{
"row": 0,
"style": {
"fill": "#ecfdf5",
"textColor": "#065f46"
}
}
],
"style": {
"stroke": "#dbe4f0"
}
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "표 전체, 헤더, 열, 특정 행과 특정 셀의 배경·글자·테두리·굵기·정렬을 안전한 스타일 속성으로 겹쳐 적용합니다.",
"text": "Table · 셀·행·열 색상"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}값 비교, 범위, 포함, 결측 여부 같은 닫힌 조건으로 셀·행·열 스타일을 자동 적용하고 우선순위를 예측 가능하게 유지합니다.
상태불러오는 중
conditional-formatting불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 조건부 서식 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 조건부 서식",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"conditionalFormats": [
{
"style": {
"fill": "#fef2f2",
"textColor": "#991b1b"
},
"target": "row",
"when": {
"field": "status",
"operator": "equals",
"value": "At risk"
}
},
{
"field": "actual",
"style": {
"fill": "#dcfce7",
"fontWeight": 800,
"textColor": "#166534"
},
"target": "cell",
"when": {
"operator": "greater-or-equal",
"value": 90
}
},
{
"field": "actual",
"style": {
"fill": "#fee2e2",
"fontWeight": 800,
"textColor": "#b91c1c"
},
"target": "cell",
"when": {
"operator": "less",
"value": 75
}
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "값 비교, 범위, 포함, 결측 여부 같은 닫힌 조건으로 셀·행·열 스타일을 자동 적용하고 우선순위를 예측 가능하게 유지합니다.",
"text": "Table · 조건부 서식"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 조건부 서식 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 조건부 서식",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"conditionalFormats": [
{
"style": {
"fill": "#fef2f2",
"textColor": "#991b1b"
},
"target": "row",
"when": {
"field": "status",
"operator": "equals",
"value": "At risk"
}
},
{
"field": "actual",
"style": {
"fill": "#dcfce7",
"fontWeight": 800,
"textColor": "#166534"
},
"target": "cell",
"when": {
"operator": "greater-or-equal",
"value": 90
}
},
{
"field": "actual",
"style": {
"fill": "#fee2e2",
"fontWeight": 800,
"textColor": "#b91c1c"
},
"target": "cell",
"when": {
"operator": "less",
"value": 75
}
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "값 비교, 범위, 포함, 결측 여부 같은 닫힌 조건으로 셀·행·열 스타일을 자동 적용하고 우선순위를 예측 가능하게 유지합니다.",
"text": "Table · 조건부 서식"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}명시적 행·열 span과 연속 반복값 자동 병합을 사용합니다. 겹침, 범위 초과와 고정 경계 횡단은 오류로 거부됩니다.
상태불러오는 중
merged-cells불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀 병합과 반복값 묶기 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀 병합과 반복값 묶기",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fill": "#eef2ff",
"fontWeight": 800
},
"width": 120
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Score",
"width": 100
}
],
"mergeRepeats": [
"region"
],
"merges": [
{
"column": "team",
"columnSpan": 2,
"row": 0
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "명시적 행·열 span과 연속 반복값 자동 병합을 사용합니다. 겹침, 범위 초과와 고정 경계 횡단은 오류로 거부됩니다.",
"text": "Table · 셀 병합과 반복값 묶기"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀 병합과 반복값 묶기 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀 병합과 반복값 묶기",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fill": "#eef2ff",
"fontWeight": 800
},
"width": 120
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Score",
"width": 100
}
],
"mergeRepeats": [
"region"
],
"merges": [
{
"column": "team",
"columnSpan": 2,
"row": 0
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "명시적 행·열 span과 연속 반복값 자동 병합을 사용합니다. 겹침, 범위 초과와 고정 경계 횡단은 오류로 거부됩니다.",
"text": "Table · 셀 병합과 반복값 묶기"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}텍스트 값을 유지하면서 데이터 막대, 히트맵, 진행률, 스파크라인과 상태 배지를 셀 안에 함께 그립니다.
상태불러오는 중
in-cell-visuals불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀 안 시각화 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀 안 시각화",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellPadding": 9,
"columns": [
{
"field": "team",
"header": "Team",
"style": {
"fontWeight": 700
},
"width": 165
},
{
"field": "actual",
"formatter": "integer",
"header": "Actual",
"visual": {
"color": "#3b82f6",
"max": 100,
"min": 0,
"negativeColor": "#ef4444",
"type": "data-bar"
},
"width": 145
},
{
"field": "target",
"formatter": "integer",
"header": "Target",
"visual": {
"color": "#10b981",
"max": 100,
"min": 0,
"trackColor": "#d1fae5",
"type": "progress"
},
"width": 135
},
{
"field": "delta",
"formatter": "integer",
"header": "Delta",
"visual": {
"highColor": "#bbf7d0",
"lowColor": "#fecaca",
"max": 10,
"min": -20,
"type": "heatmap"
},
"width": 120
},
{
"field": "trend",
"header": "5-period trend",
"visual": {
"color": "#4f46e5",
"fill": "#e0e7ff",
"type": "sparkline"
},
"width": 180
},
{
"field": "status",
"header": "Status",
"visual": {
"colors": {
"At risk": "#dc2626",
"On track": "#15803d",
"Watch": "#d97706"
},
"defaultColor": "#64748b",
"type": "status-badge"
},
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 48
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "텍스트 값을 유지하면서 데이터 막대, 히트맵, 진행률, 스파크라인과 상태 배지를 셀 안에 함께 그립니다.",
"text": "Table · 셀 안 시각화"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 셀 안 시각화 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 셀 안 시각화",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"cellPadding": 9,
"columns": [
{
"field": "team",
"header": "Team",
"style": {
"fontWeight": 700
},
"width": 165
},
{
"field": "actual",
"formatter": "integer",
"header": "Actual",
"visual": {
"color": "#3b82f6",
"max": 100,
"min": 0,
"negativeColor": "#ef4444",
"type": "data-bar"
},
"width": 145
},
{
"field": "target",
"formatter": "integer",
"header": "Target",
"visual": {
"color": "#10b981",
"max": 100,
"min": 0,
"trackColor": "#d1fae5",
"type": "progress"
},
"width": 135
},
{
"field": "delta",
"formatter": "integer",
"header": "Delta",
"visual": {
"highColor": "#bbf7d0",
"lowColor": "#fecaca",
"max": 10,
"min": -20,
"type": "heatmap"
},
"width": 120
},
{
"field": "trend",
"header": "5-period trend",
"visual": {
"color": "#4f46e5",
"fill": "#e0e7ff",
"type": "sparkline"
},
"width": 180
},
{
"field": "status",
"header": "Status",
"visual": {
"colors": {
"At risk": "#dc2626",
"On track": "#15803d",
"Watch": "#d97706"
},
"defaultColor": "#64748b",
"type": "status-badge"
},
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 48
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "텍스트 값을 유지하면서 데이터 막대, 히트맵, 진행률, 스파크라인과 상태 배지를 셀 안에 함께 그립니다.",
"text": "Table · 셀 안 시각화"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}더블 클릭 또는 키보드로 편집하고 text pattern, number, integer, select, date, datetime, boolean 타입과 필수값·범위·허용 목록을 검증합니다. 아래 조작기로 같은 API를 실제 실행합니다.
상태불러오는 중
editing-validation불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Table · live API
현재 보이는 차트 인스턴스에만 검증된 편집·이력·데이터·내보내기 API를 실행합니다.
최근 결과
waiting
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 편집과 검증 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 편집과 검증",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner · text",
"validation": {
"maxLength": 24,
"minLength": 2,
"pattern": "^[A-Za-z][A-Za-z '-]{1,23}$",
"required": true
},
"width": 155
},
{
"align": "right",
"editable": true,
"editor": {
"type": "number"
},
"field": "target",
"formatter": "number",
"header": "Target · number",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 150
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 155
},
{
"editable": true,
"editor": {
"options": [
"On track",
"Watch",
"At risk"
],
"type": "select"
},
"field": "status",
"header": "Status · select",
"validation": {
"values": [
"On track",
"Watch",
"At risk"
]
},
"width": 165
},
{
"dateStyle": "medium",
"editable": true,
"editor": {
"type": "date"
},
"field": "reviewDate",
"formatter": "date",
"header": "Review · date",
"timeZone": "UTC",
"validation": {
"required": true
},
"width": 175
},
{
"dateStyle": "short",
"editable": true,
"editor": {
"type": "datetime"
},
"field": "updated",
"formatter": "datetime",
"header": "Updated · datetime",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"validation": {
"required": true
},
"width": 215
},
{
"editable": true,
"editor": {
"type": "boolean"
},
"field": "approved",
"header": "Approved · boolean",
"width": 175
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"rowHeight": 46
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "더블 클릭 또는 키보드로 편집하고 text pattern, number, integer, select, date, datetime, boolean 타입과 필수값·범위·허용 목록을 검증합니다. 아래 조작기로 같은 API를 실제 실행합니다.",
"text": "Table · 편집과 검증"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.on('tableeditchange', ({ field, newValue, valid, reason }) => {
console.log({ field, newValue, valid, reason });
});
// Programmatic edits use the same editor and validation contract.
chart.setTableCellValue('layer-0', { key: 'KR-01' }, 'actual', 97);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 편집과 검증 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 편집과 검증",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner · text",
"validation": {
"maxLength": 24,
"minLength": 2,
"pattern": "^[A-Za-z][A-Za-z '-]{1,23}$",
"required": true
},
"width": 155
},
{
"align": "right",
"editable": true,
"editor": {
"type": "number"
},
"field": "target",
"formatter": "number",
"header": "Target · number",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 150
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 155
},
{
"editable": true,
"editor": {
"options": [
"On track",
"Watch",
"At risk"
],
"type": "select"
},
"field": "status",
"header": "Status · select",
"validation": {
"values": [
"On track",
"Watch",
"At risk"
]
},
"width": 165
},
{
"dateStyle": "medium",
"editable": true,
"editor": {
"type": "date"
},
"field": "reviewDate",
"formatter": "date",
"header": "Review · date",
"timeZone": "UTC",
"validation": {
"required": true
},
"width": 175
},
{
"dateStyle": "short",
"editable": true,
"editor": {
"type": "datetime"
},
"field": "updated",
"formatter": "datetime",
"header": "Updated · datetime",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"validation": {
"required": true
},
"width": 215
},
{
"editable": true,
"editor": {
"type": "boolean"
},
"field": "approved",
"header": "Approved · boolean",
"width": 175
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"rowHeight": 46
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "더블 클릭 또는 키보드로 편집하고 text pattern, number, integer, select, date, datetime, boolean 타입과 필수값·범위·허용 목록을 검증합니다. 아래 조작기로 같은 API를 실제 실행합니다.",
"text": "Table · 편집과 검증"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}날짜 전용 값은 달력 날짜를 보존하고, 시각 값은 locale, dateStyle, timeStyle과 IANA timeZone을 사용자가 선택합니다.
상태불러오는 중
date-time-format불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 날짜·시간 표시 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 날짜·시간 표시",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "team",
"header": "Team",
"width": 175
},
{
"dateStyle": "long",
"field": "reviewDate",
"formatter": "date",
"header": "Review date",
"timeZone": "UTC",
"width": 180
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
},
{
"field": "status",
"header": "Status",
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "날짜 전용 값은 달력 날짜를 보존하고, 시각 값은 locale, dateStyle, timeStyle과 IANA timeZone을 사용자가 선택합니다.",
"text": "Table · 날짜·시간 표시"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 날짜·시간 표시 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 날짜·시간 표시",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "team",
"header": "Team",
"width": 175
},
{
"dateStyle": "long",
"field": "reviewDate",
"formatter": "date",
"header": "Review date",
"timeZone": "UTC",
"width": 180
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
},
{
"field": "status",
"header": "Status",
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "날짜 전용 값은 달력 날짜를 보존하고, 시각 값은 locale, dateStyle, timeStyle과 IANA timeZone을 사용자가 선택합니다.",
"text": "Table · 날짜·시간 표시"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}여러 열 안정 정렬과 닫힌 필터 연산을 적용하고, 헤더 클릭으로 오름차순·내림차순·원본 순서를 순환합니다.
상태불러오는 중
sort-filter불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 정렬과 필터 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 정렬과 필터",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "status"
},
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "여러 열 안정 정렬과 닫힌 필터 연산을 적용하고, 헤더 클릭으로 오름차순·내림차순·원본 순서를 순환합니다.",
"text": "Table · 정렬과 필터"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 정렬과 필터 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 정렬과 필터",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "status"
},
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "여러 열 안정 정렬과 닫힌 필터 연산을 적용하고, 헤더 클릭으로 오름차순·내림차순·원본 순서를 순환합니다.",
"text": "Table · 정렬과 필터"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}지역별로 묶은 뒤 합계·평균·최솟값·최댓값·개수 집계를 계산해 원본 행과 분리된 요약 표를 만듭니다.
상태불러오는 중
group-subtotal불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 그룹과 소계 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 그룹과 소계",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"group": {
"aggregates": [
{
"as": "average_score",
"field": "actual",
"op": "mean"
},
{
"as": "target_total",
"field": "target",
"op": "sum"
},
{
"as": "team_count",
"field": "actual",
"op": "count"
}
],
"fields": [
"region"
]
},
"rowHeight": 54,
"sort": [
{
"direction": "descending",
"field": "average_score"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "지역별로 묶은 뒤 합계·평균·최솟값·최댓값·개수 집계를 계산해 원본 행과 분리된 요약 표를 만듭니다.",
"text": "Table · 그룹과 소계"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 그룹과 소계 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 그룹과 소계",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"group": {
"aggregates": [
{
"as": "average_score",
"field": "actual",
"op": "mean"
},
{
"as": "target_total",
"field": "target",
"op": "sum"
},
{
"as": "team_count",
"field": "actual",
"op": "count"
}
],
"fields": [
"region"
]
},
"rowHeight": 54,
"sort": [
{
"direction": "descending",
"field": "average_score"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "지역별로 묶은 뒤 합계·평균·최솟값·최댓값·개수 집계를 계산해 원본 행과 분리된 요약 표를 만듭니다.",
"text": "Table · 그룹과 소계"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}행 차원, 열 차원, 값과 집계 방식을 선언해 긴 형식 데이터를 교차표로 변환합니다.
상태불러오는 중
pivot불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 피벗 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 피벗",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"headerHeight": 48,
"pivot": {
"column": "quarter",
"op": "mean",
"row": "region",
"value": "actual"
},
"rowHeight": 56
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "행 차원, 열 차원, 값과 집계 방식을 선언해 긴 형식 데이터를 교차표로 변환합니다.",
"text": "Table · 피벗"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 피벗 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 피벗",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"headerHeight": 48,
"pivot": {
"column": "quarter",
"op": "mean",
"row": "region",
"value": "actual"
},
"rowHeight": 56
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "행 차원, 열 차원, 값과 집계 방식을 선언해 긴 형식 데이터를 교차표로 변환합니다.",
"text": "Table · 피벗"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}현재 정렬·필터가 적용된 표와 원본 행을 각각 읽고, 검증된 값을 프로그램으로 수정하거나 되돌린 뒤 CSV·JSON으로 안전하게 내보냅니다.
상태불러오는 중
data-history-export불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Table · live API
현재 보이는 차트 인스턴스에만 검증된 편집·이력·데이터·내보내기 API를 실행합니다.
최근 결과
waiting
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 데이터·편집 이력·내보내기 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 데이터·편집 이력·내보내기",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "id",
"header": "ID",
"style": {
"fontWeight": 800
},
"width": 95
},
{
"field": "team",
"header": "Team",
"width": 175
},
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner",
"validation": {
"required": true
},
"width": 125
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual",
"validation": {
"max": 100,
"min": 0
},
"width": 115
},
{
"field": "status",
"header": "Status",
"width": 140
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 70
}
],
"rowHeight": 45,
"sort": [
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "현재 정렬·필터가 적용된 표와 원본 행을 각각 읽고, 검증된 값을 프로그램으로 수정하거나 되돌린 뒤 CSV·JSON으로 안전하게 내보냅니다.",
"text": "Table · 데이터·편집 이력·내보내기"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
const visibleRows = chart.getTableData('layer-0', 'view');
const sourceRows = chart.getTableData('layer-0', 'source');
chart.setTableCellValue('layer-0', { key: 'KR-02' }, 'actual', 86);
chart.undoTableEdit('layer-0');
chart.redoTableEdit('layer-0');
const csv = chart.exportTableCSV('layer-0', 'view');
const json = chart.exportTableJSON('layer-0', 'source');
chart.resetTableData('layer-0');
console.log({ visibleRows, sourceRows, csv, json });이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 데이터·편집 이력·내보내기 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 데이터·편집 이력·내보내기",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "id",
"header": "ID",
"style": {
"fontWeight": 800
},
"width": 95
},
{
"field": "team",
"header": "Team",
"width": 175
},
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner",
"validation": {
"required": true
},
"width": 125
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual",
"validation": {
"max": 100,
"min": 0
},
"width": 115
},
{
"field": "status",
"header": "Status",
"width": 140
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 70
}
],
"rowHeight": 45,
"sort": [
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "현재 정렬·필터가 적용된 표와 원본 행을 각각 읽고, 검증된 값을 프로그램으로 수정하거나 되돌린 뒤 CSV·JSON으로 안전하게 내보냅니다.",
"text": "Table · 데이터·편집 이력·내보내기"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}많은 행과 열에서는 현재 창만 그리면서 앞쪽 행·열을 고정합니다. offset과 limit으로 페이지 또는 연속 창을 제어합니다.
상태불러오는 중
virtual-freeze불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 가상화·고정·페이지 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 가상화·고정·페이지",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 2,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"delta",
"status",
"reviewDate",
"updated"
],
"frozenColumns": 2,
"frozenRows": 1,
"headerHeight": 47,
"rowHeight": 45,
"windowLimit": 7,
"windowOffset": 3
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "많은 행과 열에서는 현재 창만 그리면서 앞쪽 행·열을 고정합니다. offset과 limit으로 페이지 또는 연속 창을 제어합니다.",
"text": "Table · 가상화·고정·페이지"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 가상화·고정·페이지 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 가상화·고정·페이지",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 2,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"delta",
"status",
"reviewDate",
"updated"
],
"frozenColumns": 2,
"frozenRows": 1,
"headerHeight": 47,
"rowHeight": 45,
"windowLimit": 7,
"windowOffset": 3
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "많은 행과 열에서는 현재 창만 그리면서 앞쪽 행·열을 고정합니다. offset과 limit으로 페이지 또는 연속 창을 제어합니다.",
"text": "Table · 가상화·고정·페이지"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}문자열·수·정수·백분율·날짜·시간·날짜시간·JSON 포매터 ID를 열에 연결하고, 호스트 전용 포매터도 별도 RuntimeRegistry에 안전하게 등록할 수 있습니다.
상태불러오는 중
formatter-registry불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 포매터 레지스트리 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 포매터 레지스트리",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "team",
"formatter": "string",
"header": "Team · string",
"width": 155
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"width": 145
},
{
"align": "right",
"field": "target",
"formatter": "number",
"header": "Target · number",
"width": 150
},
{
"align": "right",
"field": "completion",
"formatter": "percent",
"header": "Complete · percent",
"width": 170
},
{
"field": "updated",
"formatter": "time",
"header": "Seoul time",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 155
},
{
"field": "trend",
"header": "Trend · JSON",
"width": 205
}
],
"formatters": {
"trend": "json"
},
"headerHeight": 47,
"rowHeight": 45
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "문자열·수·정수·백분율·날짜·시간·날짜시간·JSON 포매터 ID를 열에 연결하고, 호스트 전용 포매터도 별도 RuntimeRegistry에 안전하게 등록할 수 있습니다.",
"text": "Table · 포매터 레지스트리"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
console.log(Graflume.capabilities().tableFormatters);
// Hosts can create an isolated registry without putting callbacks in ChartSpec.
const registry = Graflume.createRegistry();
registry.registerTableFormatter('score-label', (value, row, locale) =>
new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(value) + ' pts'
);
console.log(registry.capabilities().tableFormatters);이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 포매터 레지스트리 example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 포매터 레지스트리",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "team",
"formatter": "string",
"header": "Team · string",
"width": 155
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"width": 145
},
{
"align": "right",
"field": "target",
"formatter": "number",
"header": "Target · number",
"width": 150
},
{
"align": "right",
"field": "completion",
"formatter": "percent",
"header": "Complete · percent",
"width": 170
},
{
"field": "updated",
"formatter": "time",
"header": "Seoul time",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 155
},
{
"field": "trend",
"header": "Trend · JSON",
"width": 205
}
],
"formatters": {
"trend": "json"
},
"headerHeight": 47,
"rowHeight": 45
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "문자열·수·정수·백분율·날짜·시간·날짜시간·JSON 포매터 ID를 열에 연결하고, 호스트 전용 포매터도 별도 RuntimeRegistry에 안전하게 등록할 수 있습니다.",
"text": "Table · 포매터 레지스트리"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}현재 표 상태를 읽고 필터·다중 정렬·그룹·피벗·행/열 창·포커스를 실행 중에 바꾸며 tablechange 이벤트와 초기화를 사용할 수 있습니다.
상태불러오는 중
live-runtime불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 라이브 표 상태 API example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 라이브 표 상태 API",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 1,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"status",
"quarter"
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"frozenColumns": 1,
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "region"
},
{
"direction": "descending",
"field": "actual"
}
],
"windowLimit": 8,
"windowOffset": 1
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "현재 표 상태를 읽고 필터·다중 정렬·그룹·피벗·행/열 창·포커스를 실행 중에 바꾸며 tablechange 이벤트와 초기화를 사용할 수 있습니다.",
"text": "Table · 라이브 표 상태 API"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.on('tablechange', ({ state, reason }) => console.log({ state, reason }));
chart.setTableFilters('layer-0', [
{ field: 'actual', operator: 'greater-or-equal', value: 80 },
]);
chart.setTableSort('layer-0', [
{ field: 'region', direction: 'ascending' },
{ field: 'actual', direction: 'descending' },
]);
chart.setTableGroup('layer-0', {
fields: ['region'],
aggregates: [{ field: 'actual', op: 'mean', as: 'average_score' }],
});
chart.setTablePivot('layer-0', {
row: 'region', column: 'quarter', value: 'actual', op: 'mean',
});
chart.setTableRuntimeState('layer-0', {
windowOffset: 1, windowLimit: 8, columnOffset: 1, columnLimit: 6,
});
chart.focusTableCell('layer-0', 0, 0);
console.log(chart.getTableRuntimeState('layer-0'));
chart.resetTableRuntime('layer-0');이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 라이브 표 상태 API example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 라이브 표 상태 API",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 1,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"status",
"quarter"
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"frozenColumns": 1,
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "region"
},
{
"direction": "descending",
"field": "actual"
}
],
"windowLimit": 8,
"windowOffset": 1
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "현재 표 상태를 읽고 필터·다중 정렬·그룹·피벗·행/열 창·포커스를 실행 중에 바꾸며 tablechange 이벤트와 초기화를 사용할 수 있습니다.",
"text": "Table · 라이브 표 상태 API"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}병합·포맷 결과를 그대로 보존하는 bounded native 표를 함께 노출하고, 셀 단위 포커스와 방향키·Home/End·PageUp/PageDown 탐색을 지원합니다.
상태불러오는 중
semantic-keyboard불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
브라우저 API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 접근 가능한 표와 키보드 example",
"maxRows": 12,
"navigation": true,
"table": "visible"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 접근 가능한 표와 키보드",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fontWeight": 800
},
"width": 125
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "status",
"header": "Status",
"width": 135
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
}
],
"mergeRepeats": [
"region"
],
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "병합·포맷 결과를 그대로 보존하는 bounded native 표를 함께 노출하고, 셀 단위 포커스와 방향키·Home/End·PageUp/PageDown 탐색을 지원합니다.",
"text": "Table · 접근 가능한 표와 키보드"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.focusTableCell('layer-0', 0, 0);
const semanticRows = chart.toAccessibleRows(12);
const accessibility = chart.getAccessibilityState();
console.log({ semanticRows, accessibility });이식 가능한 스키마
{
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 접근 가능한 표와 키보드 example",
"maxRows": 12,
"navigation": true,
"table": "visible"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · 접근 가능한 표와 키보드",
"trigger": "mark"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fontWeight": 800
},
"width": 125
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "status",
"header": "Status",
"width": 135
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
}
],
"mergeRepeats": [
"region"
],
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "병합·포맷 결과를 그대로 보존하는 bounded native 표를 함께 노출하고, 셀 단위 포커스와 방향키·Home/End·PageUp/PageDown 탐색을 지원합니다.",
"text": "Table · 접근 가능한 표와 키보드"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Catalog
The source-controlled catalog maps callable modes in this family and compatibility identifiers to their canonical modes. This table contains executable entries only.
1 modes · 0 compatibility identifiers
| ID | Name | Quick API | mode | mark | renderer |
|---|---|---|---|---|---|
table | Table chart | table() | default | table | canvas |
매뉴얼
ARIA · table fallbackCanvas ARIA 메타데이터에 텍스트 요약과 표 대체 표현을 함께 제공합니다.
standard · large · ultrastandard·large·ultra 프로필은 렌더링 작업량을 제한합니다.