본문으로 건너뛰기

03 · 행에 대한 집계

시나리오

데이터 블록 아래에 합계 푸터 행을 붙이거나, 회사 전체 합계처럼 원본 전체를 가로지르는 집계 값을 헤더 셀에 끌어옵니다.

대괄호 집계 — 데이터 블록을 대상으로

{{ SUM([갱신액]) }}
{{ COUNT([갱신액]) }}
{{ AVERAGE([갱신액]) }}
{{ MIN([갱신액]) }}
{{ MAX([갱신액]) }}

데이터 블록 안에서 쓰면 반복되는 원본 행 위에서 누적됩니다. 푸터 행(데이터 블록 아래쪽 행, 같은 데이터 블록 행에는 템플릿 블록이 없는 경우)에서 쓰면 방금 펼쳐진 블록의 결과를 가리킵니다.

| A1: 계정 | B1: 갱신액 |
| A2: {{ [계정] }}| B2: {{ [갱신액] }} | ← 데이터 블록
| A3: 합계 | B3: {{ SUM([갱신액]) }}| ← 푸터

원본 행 3개로 펼치면 3행이 5행으로 밀려나고, B5 에는 세 갱신액 값의 합이 들어갑니다.

원본 한정 집계 — 원본 전체를 대상으로

{{ SUM(갱신현황[금액]) }} # 활성 블록이 아니라 원본 전체
{{ COUNT(거래처[계정]) }}

SUM(SourceName[Column]) 으로 쓰면 xl3 는 이름으로 지정한 원본 전체를 합칩니다 — 필터나 조인을 거친 블록이 아닙니다. 블록이 필터되어도 값이 바뀌면 안 되는 헤더의 "전체 합계" 셀에서 이 형태를 씁니다.

갱신현황__sources__ 에서 선언한 이름입니다. Recipe 07 을 참고하세요.

필터는 블록만 바꾸고 원본은 건드리지 않음

{{ @filter [지역] = "서울" }}
{{ [계정] }} | {{ [갱신액] }}
합계: | {{ SUM([갱신액]) }} # 서울 행만
Overall: | {{ SUM(Source[갱신액]) }} # 전체 행

SUM([갱신액]) 은 필터 적용 후의 블록을 반영합니다. SUM(Source[갱신액]) 은 필터를 무시합니다.

동작하지 않는 것 — 집계 안의 산술식

SUM, AVERAGE, MIN, MAX, 그리고 1-arg COUNT 의 인자는 반드시 컬럼 참조([Column] 또는 Source[Column])여야 합니다. 행별 산술식, 리터럴, 함수 호출이 집계 안에 들어가면 파싱 시점에 xl3/eval/bad-aggregate-arg거부됩니다 (ADR-0059):

{{ SUM([수량] * [단가]) }} # ✗ 행별 산술 — 거부
{{ SUM(1 + 2) }} # ✗ 리터럴 식 — 거부
{{ SUM(IF([지역]="서울", [금액], 0)) }} # ✗ 함수 호출 — 거부
{{ AVERAGE([매출] - [원가]) }} # ✗ 행별 뺄셈 — 거부

의도된 동작입니다. 엑셀의 SUMPRODUCT / 배열 수식(행별로 계산한 뒤 집계) 의미는 XTL 0.x 범위 밖입니다 — ADR-0059 § "Why not allow SUM([a] + [b])" 참고.

해결: 원본에 헬퍼 컬럼 추가

"매출 = Σ 수량 × 단가" 같은 표준 패턴은 원본 워크북에 행별 곱을 컬럼으로 미리 만들어 두고, 그 컬럼을 합치는 방식으로 표현합니다:

# 원본 데이터에 "금액" 컬럼 추가:
| 수량 | 단가 | 금액 |
| 3 | 100 | =B2*C2 (또는 미리 계산된 300) |
| 2 | 150 | =B3*C3 (또는 300) |

# 템플릿에서:
{{ SUM([금액]) }} # ✓ — 미리 계산된 컬럼을 합산

원본이 프로그램으로 생성된다면 곱셈 결과를 컬럼에 직접 써넣고, 손으로 관리하는 워크북이라면 금액 컬럼에 평범한 엑셀 수식을 둡니다.

해결: 행 단위 셀 + 푸터 집계

행별 곱만 표시하면 되고 합계는 따로 필요 없을 때는 행 단위 템플릿 셀에서 계산합니다:

| {{ [수량] }} | {{ [단가] }} | {{ [수량] * [단가] }} | # ✓ 행 단위

{{ [수량] * [단가] }} 는 반복되는 각 행마다 평가되기 때문에 정상 동작합니다. 단, 이는 SUM([수량] * [단가]) 과 다릅니다 — 행별 곱의 푸터 합계까지 함께 필요하면 위의 헬퍼 컬럼 방식으로 돌아가거나, 푸터 셀에 네이티브 엑셀 SUMPRODUCT 수식을 넣습니다(ADR-0046 에 따라 xl3 가 보존).

참고

  • 집계는 ADR-0007 에 따라 빈 값을 건너뜁니다.
  • COUNT 는 비어 있지 않은 값만 셉니다. 빈 값을 포함한 전체 행 수가 필요하면, 절대 비지 않는 컬럼에 대해 COUNT(Source[any-required-col]) 을 쓰세요.
  • 비어 있지 않은 값이 0개인 상태에서 AVERAGE 는 에러 대신 빈 값을 돌려줍니다.
  • 집계 인자에 합성 표현식(리터럴, 산술, 함수 호출)을 넣으면 ADR-0059 에 따라 xl3/eval/bad-aggregate-arg 가 발생합니다.
  • 스펙 참고: spec/language.md 의 "Aggregates", 원본 의미론은 ADR-0012, 인자 형태 규칙은 ADR-0059.