ARIA · table fallback접근성
Canvas ARIA 메타데이터에 텍스트 요약과 표 대체 표현을 함께 제공합니다.
Graflume · Alpha
정확한 값을 비교하고 확인할 수 있도록 행과 열을 Scene 표로 렌더링합니다.
차트 계열 · 기본 차트 계열
정확한 값을 비교하고 확인할 수 있도록 행과 열을 Scene 표로 렌더링합니다.
table()graflumetable기본 구현
필수 데이터와 차트 고유 인코딩만 사용한 출발점입니다. 아래 코드를 펼치면 그대로 실행할 수 있습니다.
정확한 값을 비교하고 확인할 수 있도록 행과 열을 Scene 표로 렌더링합니다.
상태불러오는 중
minimal-implementation불러오는 중
행 데이터와 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 = {
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}공통 기능
기능 탭을 선택해 헤더, 도구 설명, 테마, 범례, 강조, 말풍선, 선택, 화면 제어와 접근성을 하나씩 적용한 결과와 코드를 비교하세요. 데이터 표식 위에 마우스를 올리세요. 지원하는 차트에서는 축을 따라 커서를 움직이면 가장 가까운 값을 볼 수 있습니다. 모든 정확한 값은 아래 표에서 확인할 수 있습니다.
차트 안에 제목과 보조 설명을 넣어 무엇을 보여주는지 먼저 밝힙니다.
상태불러오는 중
header불러오는 중
행 데이터와 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 = {
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"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);이식 가능한 스키마
{
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"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"
}
}마크 또는 축을 가리키면 정확한 값을 보여줍니다. 날짜·시간은 locale, 형식과 시간대를 사용자가 선언형 옵션으로 정할 수 있습니다.
상태불러오는 중
tooltip불러오는 중
행 데이터와 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 = {
"height": 620,
"interaction": {
"hover": true,
"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"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"interaction": {
"hover": true,
"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"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}상단 선택기의 현재 내장 테마를 옵션에 적용하고 모든 활성 예제를 함께 갱신합니다.
상태불러오는 중
theme불러오는 중
행 데이터와 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 = {
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"theme": "graflume-light",
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"theme": "graflume-light",
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}계열, 범주 또는 연속 값의 시각적 의미를 차트와 함께 설명합니다.
상태불러오는 중
legendlegend · explicit · 2 channels불러오는 중
행 데이터와 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 = {
"height": 620,
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table · 범례",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table · 범례",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}대표 데이터나 공간 위치를 시각적으로 강조해 읽을 지점을 안내합니다.
상태불러오는 중
highlighthighlights[] · datum · category불러오는 중
행 데이터와 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 = {
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
}
}
],
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
}
}
],
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}자동 충돌 회피와 다국어 줄바꿈을 사용하는 설명 말풍선을 표시합니다.
상태불러오는 중
calloutannotations[] · datum · category · callout · placement:auto불러오는 중
행 데이터와 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 = {
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
},
"text": "포인트·범위 하이라이트 · Alerts"
}
],
"height": 620,
"interaction": {
"controls": {
"annotations": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
}
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
},
"text": "포인트·범위 하이라이트 · Alerts"
}
],
"height": 620,
"interaction": {
"controls": {
"annotations": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
}
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}데이터를 선택하고 토글하며 배경이나 Esc 키로 안전하게 해제합니다.
상태불러오는 중
selectionselection · multiple · toggle불러오는 중
행 데이터와 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 = {
"height": 620,
"interaction": {
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"height": 620,
"interaction": {
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}확대, 이동, 초기화, 투영, 전체 화면과 PNG 내보내기 메뉴를 각각 표시하거나 숨깁니다. controls: false이면 제어 막대 전체를 제거합니다.
상태불러오는 중
controls불러오는 중
행 데이터와 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 = {
"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
},
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"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
},
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
}
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}ARIA 설명, 키보드 안내와 의미 있는 데이터 표를 함께 제공합니다.
상태불러오는 중
accessibility불러오는 중
행 데이터와 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,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"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,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}차트 고유 기능
기본 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"
}
}극단 사례
성공할 수 있는 유효 데이터 안에서 수치 범위, 희소 구조와 대용량 입력을 검증합니다. 각 탭은 필요할 때만 데이터를 만들며 잘못된 값은 조용히 보정하지 않습니다.
0과 매우 작은 유한값부터 매우 큰 유한값까지 함께 넣어 자동 도메인, 정밀도와 기하가 무너지지 않는지 확인합니다. NaN과 Infinity는 의도적으로 거부됩니다. 유한값과 축 도메인을 보존하는 데이터 무결성 규칙 2개를 적용합니다.
상태불러오는 중
extreme-rangeextreme-smallextreme-largezeromixed-signbudget:marks<=6불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
categoryordinal | valuequantitative | targetquantitative | previousquantitative |
|---|---|---|---|
| Insights | -1e+12 | -1e-09 | 74 |
| Dashboards | -1e-09 | 0 | 69 |
| Reports | 0 | 1e+12 | 65 |
| Alerts | 1e+12 | 1e-09 | 48 |
| Models | 1e-09 | 1e+06 | 41 |
| Exports | 1e+06 | -1e+12 | 34 |
브라우저 API
const data = [
{
"category": "Insights",
"previous": 74,
"target": -1e-9,
"value": -1000000000000
},
{
"category": "Dashboards",
"previous": 69,
"target": 0,
"value": -1e-9
},
{
"category": "Reports",
"previous": 65,
"target": 1000000000000,
"value": 0
},
{
"category": "Alerts",
"previous": 48,
"target": 1e-9,
"value": 1000000000000
},
{
"category": "Models",
"previous": 41,
"target": 1000000,
"value": 1e-9
},
{
"category": "Exports",
"previous": 34,
"target": -1000000000000,
"value": 1000000
}
];
const options = {
"accessibility": {
"description": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table"
},
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"title": {
"subtitle": "edge case · range",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"scale": {
"constant": 1,
"type": "symlog"
},
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table"
},
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"title": {
"subtitle": "edge case · range",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"scale": {
"constant": 1,
"type": "symlog"
},
"title": "Current value",
"type": "quantitative"
}
}중복, 결측, 희소성, 순서 뒤바뀜 중 이 계열에서 의미가 정의된 구조만 실행합니다. 잘못된 참조나 깨진 튜플을 성공 예제로 위장하지 않습니다. 결측·중복·순서의 의미를 보존하는 구조 규칙 3개를 적용합니다.
상태불러오는 중
irregular-structureduplicate-rowout-of-ordernulllong-labelbudget:marks<=7불러오는 중
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
categoryordinal | valuequantitative | targetquantitative | previousquantitative |
|---|---|---|---|
| Reports | 69 | 74 | 65 |
| Insights | — | 88 | 74 |
| Reports | 69 | 74 | 65 |
| Alerts | 61 | 66 | 48 |
| Models | 48 | 55 | 41 |
| Exports | 37 | 44 | 34 |
| Dashboards | 78 | 82 | 69 |
브라우저 API
const data = [
{
"category": "Reports",
"previous": 65,
"target": 74,
"value": 69
},
{
"category": "Insights",
"previous": 74,
"target": 88,
"value": null
},
{
"category": "Reports",
"previous": 65,
"target": 74,
"value": 69
},
{
"category": "Alerts",
"previous": 48,
"target": 66,
"value": 61
},
{
"category": "Models",
"previous": 41,
"target": 55,
"value": 48
},
{
"category": "Exports",
"previous": 34,
"target": 44,
"value": 37
},
{
"category": "Dashboards",
"previous": 69,
"target": 82,
"value": 78
}
];
const options = {
"accessibility": {
"description": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table · 희소·불규칙 구조"
},
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"title": {
"subtitle": "edge case · structure",
"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": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table · 희소·불규칙 구조"
},
"height": 620,
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"title": {
"subtitle": "edge case · structure",
"text": "Table · 희소·불규칙 구조"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}결정적인 압축 레시피를 탭을 열 때만 생성합니다. Graflume의 성능 프로필이 입력량에 맞춰 표식 수, 적중 검사와 애니메이션 비용을 제한합니다. 결정적 생성과 출력 제한을 보장하는 대용량 규칙 6개를 적용합니다. 이 계열은 논리 입력 100,000 행를 생성하고 표시 행 출력을 최대 5,000개로 제한합니다.
상태불러오는 중
high-row-cardinalityall-input-rows-generatedall-input-rows-processeddeterministic-generationbounded-renderinginput:100000zoom-pan-resetbudget:visible-rows<=5000legend · explicit · 2 channelshighlights[] · datum · valueannotations[] · datum · value · callout · placement:auto불러오는 중
브라우저 API
const recipe = {
"cardinality": {
"axes": {},
"sourceRows": 100000,
"unit": "rows"
},
"expectedInvariants": [
"finite-json",
"virtual-window-bounded"
],
"id": "multivariate-observations",
"initialView": {
"kind": "domain",
"zoom": 1
},
"outputBudget": {
"maximum": 5000,
"resource": "visible-rows"
},
"parameters": {
"explicitPerformance": true,
"family": "table",
"nullableFields": [
"value"
],
"positiveFields": [],
"scenario": "volume",
"valueFields": [
"value",
"target"
],
"valuePolicy": "signed"
},
"preview": {
"maximumRows": 12,
"method": "quantiles"
},
"reduction": {
"method": "stratified-observation-sample",
"stage": "sample"
},
"seed": 1344977113,
"shape": "rows",
"version": 2
};
const { data, previewRows, plan } = Graflume.materializeDemoRecipe(recipe);
const options = {
"accessibility": {
"description": "확대·이동은 화면을 살펴보기 위한 기능이며 데이터 축이나 값은 바꾸지 않습니다. 재생 조작이 보이는 차트에서는 원본 데이터에서 고유값이 처음 등장한 순서대로 실제 단계만 이동합니다.",
"label": "Table · 대용량 데이터"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "value",
"type": "datum",
"value": 127.182
},
"text": "포인트·범위 하이라이트 · Public"
}
],
"create": {
"adaptive": {
"environment": {
"rowCount": 100000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "value",
"type": "datum",
"value": 127.182
}
}
],
"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"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table · 대용량 데이터",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"performance": "ultra",
"theme": "graflume-light",
"title": {
"subtitle": "A compact operational scorecard with current, target, and previous values · 100,000 logical rows, screen-aware detail",
"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 · 대용량 데이터"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "value",
"type": "datum",
"value": 127.182
},
"text": "포인트·범위 하이라이트 · Public"
}
],
"create": {
"adaptive": {
"environment": {
"rowCount": 100000
},
"largeDataNavigation": true,
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "value",
"type": "datum",
"value": 127.182
}
}
],
"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"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table · 대용량 데이터",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"performance": "ultra",
"theme": "graflume-light",
"title": {
"subtitle": "A compact operational scorecard with current, target, and previous values · 100,000 logical rows, screen-aware detail",
"text": "Table · 대용량 데이터"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}극단 환경
기기 이름을 추측하지 않고 컨테이너 크기, 입력 방식, 표시 능력과 사용자 선호를 조합합니다. 모바일·워치·전자종이·흑백·도트 화면과 표준 기반 극단 환경을 같은 차트에서 비교하세요.
컨테이너 폭과 높이에 따라 축, 범례, 설명과 조작부를 자동 재배치합니다.
960×540 · adaptive.profiles=responsive-fluidzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial세로형 작은 화면에서 44px 터치 대상, 탭 도구 설명과 접힌 보조 정보를 우선합니다.
390×844 · adaptive.profiles=mobile-touchzoom-reflowcoarse-touchvirtual-keyboardshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial원형 또는 매우 작은 화면에서는 핵심 표식과 값, 단계형 조작만 남기고 나머지는 아래 설명으로 재배치합니다.
184×224 · adaptive.profiles=smartwatchzoom-reflowreduced-effectscoarse-touchlow-resourcecutout-roundshape-rounddisplay-colorinput-coarsemotion-reducedrenderer-canvas-spatialviewport-tiny낮은 갱신률과 잔상 가능성을 고려해 정적 상태, 높은 명암과 데이터 표를 우선합니다.
758×1024 · adaptive.profiles=ebook-paperprint-pagedreduced-effectslow-resourceshape-pageddisplay-e-inkinput-keyboardmotion-staticrenderer-canvas-spatial색만으로 계열을 구분하지 않고 선, 표식, 패턴, 라벨과 표를 함께 사용합니다.
640×400 · adaptive.profiles=monochromereduced-effectsshape-rectangledisplay-monochromeinput-finemotion-reducedrenderer-canvas-spatial낮은 해상도에서는 표식 수와 장식을 줄이고 굵은 선, 정수 라벨과 단계형 확대를 사용합니다.
320×240 · adaptive.profiles=dot-matrixzoom-reflowreduced-effectskeyboard-switchlow-resourceshape-rectangledisplay-gridinput-keyboardmotion-staticrenderer-canvas-spatialviewport-tiny320 CSS px 등가 폭에서 본문은 한 축으로 재배치하고 차트만 자체 확대·이동을 허용합니다.
320×480 · adaptive.profiles=zoom-reflowzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial힌지와 화면 분할 영역을 가로지르지 않도록 차트와 설명을 독립 세그먼트로 재배치합니다.
720×640 · adaptive.profiles=foldable-dualfoldable-dualshape-dualdisplay-colorinput-finemotion-fullrenderer-canvas-spatial호버가 없는 원거리 화면에서 큰 초점 표시와 방향키, Enter, Escape 조작을 제공합니다.
1920×1080 · adaptive.profiles=tv-remotetv-remoteshape-rectangledisplay-colorinput-remotemotion-fullrenderer-canvas-spatial조작부 대신 정적 차트, 설명과 표를 함께 배치하고 페이지 중간 분할을 피합니다.
794×1123 · adaptive.profiles=print-pagedprint-pagedshape-pageddisplay-colorinput-finemotion-staticrenderer-canvas-spatial시스템 색과 테두리를 존중하고 패턴, 표식과 텍스트를 중복 단서로 유지합니다.
640×400 · adaptive.profiles=forced-colorsforced-colorsshape-rectangledisplay-high-contrastinput-finemotion-fullrenderer-canvas-spatial전환을 즉시 끝내고 불투명 배경과 지연 로드를 사용해 움직임과 투명도 부담을 줄입니다.
640×400 · adaptive.profiles=reduced-effectsreduced-effectsshape-rectangledisplay-colorinput-finemotion-reducedrenderer-canvas-spatial호버 없이 탭으로 값을 확인하고 실제 조작 대상은 44px 이상, 확대·축소는 명시 버튼으로 제공합니다.
390×844 · adaptive.profiles=coarse-touchcoarse-touchshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial드래그 전용 기능 없이 Tab, 방향키, Enter, Space, Escape로 모든 조작에 도달합니다.
640×400 · adaptive.profiles=keyboard-switchkeyboard-switchshape-rectangledisplay-colorinput-keyboardmotion-fullrenderer-canvas-spatial적은 메모리와 느린 연결에서는 점진 렌더링, 샘플링, 취소 가능한 작업과 정적 대체를 우선합니다.
640×400 · adaptive.profiles=low-resourcelow-resourceshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial본문과 탭은 RTL 논리 방향을 따르되 축, 코드와 데이터 식별자는 기술적 LTR 순서를 유지합니다.
640×400 · adaptive.profiles=rtlrtlshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial세로쓰기 설명은 재배치하되 차트와 기술 표면은 독립적인 가로 패널로 유지합니다.
640×400 · adaptive.profiles=vertical-writingvertical-writingshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial차트를 무한히 늘이지 않고 읽기 가능한 최대 폭, 패널 분할과 큰 라벨을 사용합니다.
1920×720 · adaptive.profiles=ultrawide-projectionultrawide-projectionshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial짧고 긴 설명, 의미 있는 표와 상태를 제공해 Canvas나 색을 정보의 유일한 경로로 만들지 않습니다.
640×400 · adaptive.profiles=screenreader-braillescreenreader-brailleshape-nonvisualdisplay-colorinput-nonvisualmotion-fullrenderer-canvas-spatial스크립트가 꺼져도 검증된 정적 미리보기, 설명과 접힌 행 데이터 표가 핵심 정보를 보존합니다.
640×400 · adaptive.profiles=no-scriptno-scriptshape-nonvisualdisplay-colorinput-finemotion-staticrenderer-static-fallbackXR 전용 API가 없어도 일반 2D 또는 WebGL 패널로 안전하게 돌아가며 깊이 단서를 텍스트와 표로 중복합니다.
640×400 · adaptive.profiles=spatial-xrspatial-xrshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatialsafe-area와 원형 경계를 피해 제목, 표식, 조작부가 잘리지 않게 안쪽으로 재배치합니다.
184×224 · adaptive.profiles=cutout-roundcutout-roundshape-rounddisplay-colorinput-finemotion-fullrenderer-canvas-spatialviewport-tiny가상 키보드가 화면을 줄여도 초점 조작, 차트와 현재 설명이 가려지지 않게 다시 배치합니다.
390×560 · adaptive.profiles=virtual-keyboardvirtual-keyboardshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial위 프로필 탭을 선택하면 같은 데이터와 ChartSpec을 유지한 채 화면 크기, 입력 방식, 표시 능력과 사용자 선호에 맞춰 차트를 다시 구성합니다.
상태불러오는 중
adaptivecapability-drivenno-user-agent-branchinglegend · explicit · 2 channelshighlights[] · datum · categoryannotations[] · datum · category · callout · placement:autoselection · multiple · toggle불러오는 중
행 데이터와 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": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table chart: A compact operational scorecard with current, target, and previous values"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
},
"text": "포인트·범위 하이라이트 · Alerts"
}
],
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"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"
},
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
}
],
"title": "Table",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A compact operational scorecard with current, target, and previous values",
"text": "Table chart"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);이식 가능한 스키마
{
"accessibility": {
"description": "A compact operational scorecard with current, target, and previous values. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Table chart: A compact operational scorecard with current, target, and previous values"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
},
"text": "포인트·범위 하이라이트 · Alerts"
}
],
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Alerts"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"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"
},
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "열"
},
{
"field": "formatted",
"format": "auto",
"label": "표시 값"
}
],
"title": "Table",
"trigger": "mark"
}
},
"legend": {
"interactive": false,
"items": [
{
"id": "semantic-0",
"label": "값"
},
{
"id": "semantic-1",
"label": "대상"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Table",
"visible": true
},
"locale": "ko",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A compact operational scorecard with current, target, and previous values",
"text": "Table chart"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"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 프로필은 렌더링 작업량을 제한합니다.