295. OLAP 연산 - 롤업, 드릴다운, 슬라이스, 다이스, 피벗
핵심 인사이트 (3줄 요약)
- 본질: OLAP 연산은 다차원 데이터 큐브(Multidimensional Cube)에서 데이터르切片(切片)하고聚合(ROLLUP)하며視点를 전환(피벗)하는 분석 전용 연산이다.
- 가치: 빠르게 다양한 각도에서 데이터를 분석하고, drill-down/roll-up으로 계층 구조를 탐색하며, slice/dice로 특정 영역을 확대inspection, 피벗으로 보고서 형태를 전환할 수 있다.
- 융합: 다차원 큐브, 스타 스키마, 차원 테이블, 계층 구조, Mondrian, MDX, BI 도구와 밀접하게 연관된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
개념 정의
OLAP(On-Line Analytical Processing) 연산은 다차원 분석 데이터 모델(주로 스타 스키마 기반의 데이터 큐브)에서 데이터를 효과적으로 분석하기 위해 정의된 special 연산들이다. 주요 OLAP 연산으로는 롤업(ROLLUP), 드릴다운(Drill-down), 슬라이스(Slice), 다이스(Dice), 피벗(Pivot)이 있다. 이 연산들은 사용자가 다양한 차원(Dimension)의 관점에서 데이터를 분석하고, 계층(Hierarchy)을 타고 올라가거나 내려가며, 특정 조건으로 데이터를 제한하고, 결과의배치을 변환하는 기능을 제공한다. OLAP의 핵심价值는 이러한 분석 연산들이 빨라야(수 초 내에) 실시간으로 수행되어야 한다는 점이다.
필요성
비즈니스 분석가는 "이번 분기 전체 매출은?", "서울 지역 냉난방기기 매출 추이는?", "제품 카테고리별 수익률 비교" 등 다양한 질문에서洞見을 얻어야 한다. 관계형 데이터베이스에서 이러한 분석을 수행하려면 복잡한 SQL JOIN과 집계 쿼리를 작성해야 하고, 성능도 느리다. OLAP 연산은 이러한 분석 패턴을 사전에建模하여 최적화된 구조(다차원 큐브)로 제공함으로써, 누구나 손쉽게 빠르게 분석할 수 있게 한다. Drill-down으로 상세로 파고들고, roll-up으로 요약으로 돌아오고, slice로 특정 조건을 제한하고, 피벗으로視界를 전환하는 상호적 분석이 가능하다.
배경
OLAP 개념은 1993년 Edgar F. Codd(Codd 관계형 데이터베이스 창립자)가,提出了 "OLAP는 관계형 데이터베이스를 넘어서는 12개의 기본 원칙"이라는 논문에서 처음 제시했다. 이후 OLAP Council이 이를 공식화하여 "FASMI" (Fast Analysis of Shared Multidimensional Information)라는OLAP의 정의를 만들었다. Microsoft의 Analysis Services, SAP BW, Oracle Essbase, Mondrian (OSS) 등OLAP 서버와 Microsoft Excel Pivot Table, Tableau, Power BI 등 BI 도구에서 이러한 OLAP 연산들을 지원한다.
비유
OLAP 연산은大型항공사 여객기 좌석 배치와 같다. 승객(데이터)은 좌석(차원)의 교차점에 있으며,,乘客수는_plane(큐브) 전체에分布되어 있다. 롤업은 좌석 등급(First→Business→Economy)별로合算了 보는 것이고, 드릴다운은 Economy 클래스 내에서 다시 좌석 위치(창측/복도측)별로세분화하여 보는 것이다. 슬라이스는 서울 출발 항공편만 대상으로 분석하는 것이고, 다이스는Economy + 서울 출발 + 6월달이라는 세 조건을 모두 만족하는 경우만抽出하는 것이다. 피벗은 행과 열에 올리는 차원을 서로 바꾸는 것이다(시간 vs 지역を入れ替える).
📢 섹션 요약: OLAP 연산은 다차원 데이터 분석을 위한 special 연산으로, 롤업/드릴다운으로 계층 탐색을, 슬라이스/다이스로 데이터Filter를, 피벗으로 뷰 전환을 수행한다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
OLAP 5대 연산 상세
┌─────────────────────────────────────────────────────────────────────────────┐
│ OLAP 5대 연산 상세 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ [1] 롤업 (ROLLUP) │
│ ───────────────── │
│ • 더 높은 수준(higher level)의 요약으로 올라가는 연산 │
│ • 계층 구조를 위로攀形 │
│ • 예:县市 →省 →国, 商品 → 카테고리 → 전체 │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 예시: 매출 데이터 │ │
│ │ ─────── │ │
│ │ │ │
│ │ [세분화レベル]县市別 매출 │ │
│ │ 서울 강남구: 100억 │ │
│ │ 서울 강북구: 80억 │ │
│ │ 부산 해운대구: 90억 │ │
│ │ ... │ │
│ │ │ │
│ │ ↓ ROLLUP (지역으로) │ │
│ │ │ │
│ │ [요약レベル]都市別 매출 │ │
│ │ 서울: 180억 │ │
│ │ 부산: 90억 │ │
│ │ ... │ │
│ │ │ │
│ │ ↓ ROLLUP (국가으로) │ │
│ │ │ │
│ │ [최상위 요약]국가別 매출 │ │
│ │ 한국: 270억 │ │
│ │ ... │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ [2] 드릴다운 (Drill-down) │
│ ───────────────────────── │
│ • 더 낮은 수준(lower level)의 상세로 내려가는 연산 │
│ • 롤업의 역방향 operation │
│ • 예:국가 →省 →县市, 年度 → 분기 → 月 │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 예시: 매출 데이터 │ │
│ │ ─────── │ │
│ │ │ │
│ │ [상위レベル]국가別 매출 │ │
│ │ 한국: 270억 │ │
│ │ │ │
│ │ ↓ DRILL-DOWN (국가 → 도시로) │ │
│ │ │ │
│ │ [중간レベル]도시別 매출 │ │
│ │ 서울: 180억 │ │
│ │ 부산: 90억 │ │
│ │ │ │
│ │ ↓ DRILL-DOWN (도시 → 구역으로) │ │
│ │ │ │
│ │ [세분化レベル]구역別 매출 │ │
│ │ 서울 강남구: 100억 │ │
│ │ 서울 강북구: 80억 │ │
│ │ 부산 해운대구: 90억 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ [3] 슬라이스 (SLICE) │
│ ────────────────── │
│ • 특정 차원에서 하나의 값을 선택하여 2차원 평면으로 자르는 연산 │
│ • 차원 하나를 고정하고 나머지 차원의 교차 분석 │
│ • "2024년 데이터만 보기" = 시간 차원에서 2024년을 slice │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 예시: 3차원 매출 큐브 (시간 × 지역 × 상품) │ │
│ │ ──────────────────────────────────────────────────────────────── │ │
│ │ │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 시간 차원 │ ← 2024년만 선택 (SLICE) │ │
│ │ └──────────┬───────────┘ │ │
│ │ ┌────────────────────┼────────────────────┐ │ │
│ │ │ │ │ │ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 지역1 │ │ 지역2 │ │ 지역3 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │ │ │ │
│ │ └────────────────────┼────────────────────┘ │ │
│ │ ▼ │ │
│ │ ┌──────────────────┐ │ │
│ │ │ 상품별 매출 합계 │ │ │
│ │ │ (2024년 + 전체 지역)│ │ │
│ │ └──────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ [4] 다이스 (DICE) │
│ ────────────── │
│ • 여러 차원에서 특정 값 범위를 선택하여 3차원 이상 부분 큐브를 추출 │
│ • 슬라이스가 平면切り이라면, 다이스는 立体的切り │
│ • 예: 2024년 + 서울/부산 + 가전/의류 = 3차원 큐브的部分集合 │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 예시: 3차원 매출 큐브에서 다이스 │ │
│ │ ──────────────────────────────────────────────────────────────── │ │
│ │ │ │
│ │ 원본 큐브: 시간(2023, 2024) × 지역(서울, 부산, 대구) × 상품(가전, 의류, 식품)│ │
│ │ │ │
│ │ 다이스 조건: │ │
│ │ • 시간 = 2024 │ │
│ │ • 지역 = 서울 OR 부산 │ │
│ │ • 상품 = 가전 │ │
│ │ │ │
│ │ 결과: 2024년 서울+부산 가전 매출 부분 큐브 │ │
│ │ ┌───────────────────────────────────────────────────────────────┐ │ │
│ │ │ │ 서울(가전) │ 부산(가전) │ │ │ │
│ │ │ 2024 │ 100억 │ 80억 │ │ │ │
│ │ └───────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ [5] 피벗 (PIVOT) │
│ ─────────────── │
│ • 행/열(차원)의 배치를 서로 교환하여 뷰 형태를 변환 │
│ • 교차표(Cross-tab)의 행과 열을 바꾸는 operation │
│ │ 예: 시간(행) × 지역(열) → 시간(열) × 지역(행) │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ [피벗 전] │ │
│ │ ─────── │ │
│ │ │ 서울 │ 부산 │ │ │
│ │ 2024 Q1 │ 30 │ 20 │ │ │
│ │ 2024 Q2 │ 35 │ 25 │ │ │
│ │ 2024 Q3 │ 40 │ 30 │ │ │
│ │ │ │
│ │ ↓ PIVOT (행←→열 교환) │ │
│ │ │ │
│ │ [피벗 후] │ │
│ │ ─────── │ │
│ │ │ 2024Q1 │ 2024Q2 │ 2024Q3 │ │ │
│ │ 서울 │ 30 │ 35 │ 40 │ │ │
│ │ 부산 │ 20 │ 25 │ 30 │ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
OLAP 큐브와 차원 모델
┌─────────────────────────────────────────────────────────────────────────────┐
│ OLAP 큐브 다차원 모델 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ [다차원 큐브 개념] │
│ ─────────────────── │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 3차원 큐브 예시: 시간 × 지역 × 상품 │ │
│ │ ──────────────────────────────────────────────────────────────── │ │
│ │ │ │
│ │ │←──── 시간 차원 (4분기) ────→│ │ │
│ │ │ │
│ │ ┌────┴────────────────────────────┴────┐ │ │
│ │ │ │ │ │
│ │ │ 각 cell = 매출金額 (Measure) │ │ │
│ │ │ │ │ │
│ │ │ (서울, 가전, 2024 Q1) = 30억 │ │ │
│ │ │ (부산, 의류, 2024 Q2) = 25억 │ │ │
│ │ │ (대구, 식품, 2024 Q3) = 15억 │ │ │
│ │ │ │ │ │
│ │ └────┬────────────────────────────┬────┘ │ │
│ │ │←─── 상품 차원 (3개) ────→│ │ │
│ │ │ │ │ │
│ │ └── 지역 차원 (3개) ──┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ [차원 계층 구조] │
│ ───────────────── │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 시간 차원 계층: │ │
│ │ ──────────── │ │
│ │ 年度 (Year) │ │
│ │ └── 분기 (Quarter) │ │
│ │ └── 月 (Month) │ │
│ │ └── 일 (Day) │ │
│ │ │ │
│ │ 지역 차원 계층: │ │
│ │ ──────────── │ │
│ │ 국가 (Country) │ │
│ │ └── 도시 (City) │ │
│ │ └── 구역 (District) │ │
│ │ └── 점포 (Store) │ │
│ │ │ │
│ │ 상품 차원 계층: │ │
│ │ ──────────── │ │
│ │ 카테고리 (Category) │ │
│ │ └── 상품군 (Product Group) │ │
│ │ └── 개별 상품 (Product) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
MDX 쿼리 예시
┌─────────────────────────────────────────────────────────────────────────────┐
│ MDX OLAP 쿼리 예시 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ MDX (Multidimensional Expressions)는 OLAP 서버용 표준 쿼리 언어이다. │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ -- 롤업: 모든 지역을 요약 │ │
│ │ SELECT │ │
│ │ {[Measures].[매출]} ON COLUMNS, │ │
│ │ {[Time].[2024].Children} ON ROWS │ │
│ │ FROM [SalesCube] │ │
│ │ WHERE {[Region].[한국]} │ │
│ │ │ │
│ │ -- 드릴다운: 지역 계층 하위로 내려가기 │ │
│ │ SELECT │ │
│ │ {[Measures].[매출]} ON COLUMNS, │ │
│ │ {[Region].[한국].Children} ON ROWS -- 市 → 郡·区 │ │
│ │ FROM [SalesCube] │ │
│ │ │ │
│ │ -- 슬라이스: 2024년 데이터만 │ │
│ │ SELECT │ │
│ │ {[Measures].[매출]} ON COLUMNS, │ │
│ │ {[Product].[가전].Children} ON ROWS │ │
│ │ FROM [SalesCube] │ │
│ │ WHERE {[Time].[2024]} │ │
│ │ │ │
│ │ -- 다이스: 2024 + 서울/부산 + 가전/의류 │ │
│ │ SELECT │ │
│ │ {[Measures].[매출]} ON COLUMNS, │ │
│ │ CrossJoin( │ │
│ │ {[Region].[서울], [Region].[부산]}, │ │
│ │ {[Product].[가전], [Product].[의류]} │ │
│ │ ) ON ROWS │ │
│ │ FROM [SalesCube] │ │
│ │ WHERE {[Time].[2024]} │ │
│ │ │ │
│ │ -- 피벗: 차원 배치 변환 │ │
│ │ SELECT │ │
│ │ {[Time].[2024].Children} ON COLUMNS, │ │
│ │ {[Region].[한국].Children} ON ROWS │ │
│ │ FROM [SalesCube] │ │
│ │ -- (기존과 행/열이 바뀐 상태) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] OLAP 5대 연산은 다차원 큐브 모델에서 작동한다. 롤업과 드릴다운은同一 차원의 계층 구조 내에서上下移动하는 연산이고, 슬라이스는 차원 하나를 고정하여 2차원 평면을 만드는 연산이며, 다이스는 여러 차원에서 값 범위를 선택하여 3차원 이상 부분 큐브를 추출하는 연산이다. 피벗은 차원의 배치를 행/열로 서로 교환하는 연산이다. MDX는 OLAP 서버를クエリする標準言語であり、BI 도구에서는 이 연산을 GUI로 쉽게 수행할 수 있다.
📢 섹션 요약: OLAP 5대 연산(롤업, 드릴다운, 슬라이스, 다이스, 피벗)은 다차원 큐브 모델을 기반으로 다양한 관점의 분석을 가능하게 하며, MDX 등의 언어 또는 BI 도구로 수행한다.
Ⅲ. 결론
OLAP 연산은 다차원 분석의 핵심 도구로, 비즈니스 분석가가 다양한 각도에서 데이터를 탐색하고洞見을 얻을 수 있게 한다. 롤업/드릴다운으로 계층 구조를 타고上下移動하고, 슬라이스/다이스로 조건에 맞는 데이터를抽出하며, 피벗으로 보고서 형태를 전환한다. 이러한 연산들은 OLAP 서버(Analysis Services, Essbase, Mondrian 등)와 BI 도구(Excel Pivot, Tableau, Power BI 등)에서 쉽게 수행할 수 있으며, MDX 등의 언어로程序적으로도控制可能하다. OLAP의 가치는 이러한 분석들이 수 초 내에 실시간으로 수행되어 즉각적 의사결정을 가능하게 하는 데 있다.
📢 섹션 요약: OLAP 5대 연산은 다차원 큐브 모델 위에서 작동하며, 계층 탐색(롤업/드릴다운), 데이터 필터링(슬라이스/다이스), 뷰 전환(피벗)을 통해 대화형 분석을 지원한다.
핵심 인사이트 ASCII 다이어그램 (Concept Map)
┌─────────────────────────────────────────────────────────────────────────────┐
│ OLAP Operations Concept Map │
│ │
│ ┌─────────────────────────────────┐ │
│ │ OLAP 5대 연산 │ │
│ └───────────────┬─────────────────┘ │
│ │ │
│ ┌────────────────────┼────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ ROLLUP │ │ DRILL-DOWN │ │ SLICE │ │
│ │ (요약上昇) │ │ (상세下降) │ │ (단면切削) │ │
│ │ │ │ │ │ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └────────────────────┼────────────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ DICE │ │
│ │ (立体切削) │ │
│ │ + PIVOT (배치전환) │ │
│ └─────────────────────┘ │
│ │
│ 기반: 다차원 큐브 | 차원 계층 | Measure (측정값) │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
참고
- OLAP 연산은 다차원 데이터 큐브에서 작동한다.
- 롤업은 요약 수준으로 올라가고, 드릴다운은 상세 수준으로 내려간다.
- 슬라이스는 차원 하나를 고정하여 2차원 평면으로 자른다.
- 다이스는 여러 차원에서 값 범위를 선택하여 부분 큐브를 추출한다.
- 피벗은 행/열의 차원 배치를 서로 교환한다.
- MDX는 OLAP 서버용 표준 쿼리 언어이다.
- BI 도구에서는 GUI로 OLAP 연산을 쉽게 수행할 수 있다.