그룹과 소계
필드 값으로 행을 묶고, 그룹 머리글·바닥글에 소계를 찍고, 그룹마다 새 페이지로 넘기고 머리글을 반복하는 방법입니다.
그룹은 값이 같은 연속한 행을 묶습니다. 그룹 머리글·바닥글의 집계는 그 그룹 범위이고, 페이지 바닥글에서는 페이지 범위로, 어디서든 보고서 전체 범위로 계산할 수 있습니다.
"groups": [{
"by": "region", "sort": "asc", "repeatHeader": true, "keepWithRows": 2,
"header": { "height": 7, "elements": [
{ "type": "text", "x": 0, "y": 0, "w": 180, "h": 7, "text": "■ {region} ({count()}건)", "style": { "bold": true } }
] },
"footer": { "height": 7, "elements": [
{ "type": "text", "x": 0, "y": 0, "w": 140, "h": 7, "text": "{region} 소계", "style": { "align": "center" } },
{ "type": "field", "x": 140, "y": 0, "w": 40, "h": 7, "expr": "sum(amount)", "format": "#,##0", "style": { "align": "right" } }
] }
}],
"pageFooter": { "height": 7, "elements": [
{ "type": "text", "x": 0, "y": 1, "w": 180, "h": 6, "text": "이 페이지 소계 {sum(amount, 'page'):#,##0}원 · 누계 {sum(amount, 'report'):#,##0}원" }
] }| 이름 | 타입 | 설명 |
|---|---|---|
by | Expr | 연속한 행을 묶는 수식. 예: "region". |
sort | 'asc' | 'desc' | 먼저 그룹 수식으로 정렬합니다(없으면 순서 유지). |
header / footer | Band | 그룹 앞/뒤에 찍힙니다. 집계는 그 그룹 범위입니다. |
newPage | boolean | 그룹마다 새 페이지에서 시작합니다. |
repeatHeader | boolean | 그룹이 다음 페이지로 이어지면 머리글을 다시 찍습니다. |
keepWithRows | number | 머리글을 최소 이만큼의 행과 같은 페이지에 둡니다(기본 1). |
resetPageNumber | boolean | 그룹마다 page / pages 번호를 새로 셉니다. |