피벗 테이블

**피벗 테이블**(pivot table)은 하나 이상의 불연속 범주 내에서 더 광범위한 표(데이터베이스, 스프레드시트, 또는 비즈니스 인텔리전스 프로그램 등)의 개별 값 그룹을 합산한 값의 표이다. 개별 항목 그룹의 합계 또는 요약에는 합계, 평균, 개수 또는 기타 통계가 포함될 수 있다. 피벗 테이블은 표로 정리된 원시 데이터를 통계적으로 처리한 결과이며 의사 결정에 사용될 수 있다.

피벗 테이블은 일반적인 용어이지만, 마이크로소프트는 1994년부터 2020년까지 미국에서 이 용어에 대한 상표권을 보유했다.

## 역사
빌 젤렌과 마이크 알렉산더는 자신들의 저서 'Pivot Table Data Crunching'에서 피토 살라스를 "피벗 테이블의 아버지"라고 불렀다. 훗날 로터스 임프로브가 될 새로운 프로그램의 개념을 작업하는 동안, 살라스는 스프레드시트에 데이터 패턴이 있다는 점에 주목했다. 사용자가 이러한 패턴을 인식하도록 돕는 도구는 고급 데이터 모델을 빠르게 구축하는 데 도움이 될 것이다. 임프로브를 통해 사용자는 범주 집합을 정의하고 저장한 다음, 마우스로 범주 이름을 드래그하여 보기를 변경할 수 있었다. 이 핵심 기능은 피벗 테이블의 모델을 제공했다.

로터스 디벨롭먼트는 1991년 NeXT 플랫폼에서 임프로브를 출시했다. 임프로브 출시 몇 달 후, 브리오 테크놀로지(Brio Technology)는 DataPivot이라는 독립형 매킨토시 구현체를 발표했다(이 기술은 결국 1999년에 특허를 받았다). 볼랜드는 1992년에 DataPivot 기술을 인수하여 자사의 스프레드시트 애플리케이션인 쿼트로 프로에 구현했다.

1993년에는 임프로브의 마이크로소프트 윈도우 버전이 등장했다. 1994년 초 마이크로소프트 엑셀 5는 "PivotTable"이라는 새로운 기능을 시장에 선보였다. 마이크로소프트는 이후 버전의 엑셀에서 이 기능을 더욱 개선했다.

* 엑셀 97에는 새롭고 개선된 피벗 테이블 마법사, 계산된 필드를 생성하는 기능, 개발자가 피벗 테이블을 생성하고 수정하기 위해 비주얼 베이직 포 애플리케이션 매크로를 작성할 수 있게 해주는 새로운 피벗 캐시 개체가 포함되었다.
* 엑셀 2000은 피벗 테이블 데이터를 그래픽으로 표현하기 위해 "피벗 차트"를 도입했다.
* 오피스 365는 엑셀에 PIVOTBY 함수를 추가하여 사용자가 피벗 테이블을 구축하는 대신 함수를 통해 데이터 요약을 생성할 수 있도록 했다.

2007년 오라클 코포레이션은 오라클 데이터베이스 11g에서 `PIVOT` 및 `UNPIVOT` 연산자를 사용할 수 있게 했다.

## 메커니즘
일반적인 데이터 입력 및 저장의 경우, 데이터는 일반적으로 평면 테이블에 나타난다. 즉, 셔츠 유형에 대한 데이터를 보여주는 다음 샘플 스프레드시트의 일부와 같이 열과 행으로만 구성된다.

이와 같은 테이블에는 많은 데이터 항목이 포함될 수 있지만, 여기에서 요약된 정보를 얻기는 어려울 수 있다. 피벗 테이블은 데이터를 빠르게 요약하고 원하는 정보를 강조하는 데 도움이 된다. 피벗 테이블의 용도는 매우 광범위하며 상황에 따라 달라진다. 먼저 던져야 할 질문은 "내가 무엇을 찾고 있는가?"이다. 여기서 예시를 들어, "각 배송일별로 각 지역에서 몇 개의 수량을 판매했는가?"라고 물어보자.

피벗 테이블은 일반적으로 행, 열 및 데이터(또는 팩트) 필드로 구성된다. 이 경우 열은 배송일이고 행은 지역이며 보고 싶은 데이터는 수량(의 합계)이다. 이러한 필드는 합계, 평균, 표준 편차, 개수 등을 포함한 여러 종류의 집계 함수를 허용한다. 이 예시에서는 배송된 총 수량이 합계 집계를 사용하여 여기에 표시된다.

## 구현
위의 예시를 사용하면 소프트웨어는 지역(Region)에 대한 모든 고유 값을 찾는다. 이 경우 북부, 남부, 동부, 서부이다. 또한 배송일(Ship date)에 대한 모든 고유 값을 찾는다. 집계 유형인 합계(sum)에 따라 팩트인 수량(Unit)을 요약하여 다차원 차트에 표시한다. 위의 예시에서 첫 번째 데이터는 66이다. 이 숫자는 지역이 동부이고 배송일이 2005-01-31인 모든 레코드를 찾아 해당 레코드 컬렉션(즉, 셀 E2에서 E7)의 수량을 합산하여 최종 결과를 얻은 것이다.

피벗 테이블은 자동으로 생성되지 않는다. 예를 들어, 마이크로소프트 엑셀에서는 먼저 원본 테이블의 모든 데이터를 선택한 다음 삽입 탭으로 이동하여 "피벗 테이블"(또는 "피벗 차트")을 선택해야 한다. 그런 다음 사용자는 피벗 테이블을 기존 시트에 삽입하거나 피벗 테이블을 담을 새 시트를 만들 수 있는 옵션을 가진다. 데이터에 존재하는 모든 열 머리글을 나열하는 피벗 테이블 필드 목록이 사용자에게 제공된다. 예를 들어, 테이블이 회사의 매출 데이터를 나타내는 경우 판매 날짜, 영업 사원, 판매 품목, 품목 색상, 판매 수량, 단위당 가격 및 총 가격이 포함될 수 있다. 이를 통해 데이터에 더 쉽게 접근할 수 있다.

섬네일|upright=2|리브레오피스 캘크 피벗 테이블과 검사된 필드가 원으로 표시된 대화 상자
생성될 필드는 워크시트의 오른쪽에 표시된다. 기본적으로 피벗 테이블 레이아웃 디자인은 이 목록 아래에 나타난다.

피벗 테이블 필드는 피벗 테이블의 빌딩 블록이다. 목록의 각 필드를 네 가지 옵션이 있는 이 레이아웃으로 드래그할 수 있다.
# 필터
# 열
# 행
# 값

피벗 테이블의 일부 용도는 선택적 응답이 있는 설문지 분석과 관련이 있지만, 일부 피벗 테이블 구현에서는 이러한 사용 사례를 허용하지 않는다. 예를 들어, 2012년 이후 리브레오피스 캘크의 구현은 빈 셀을 처리할 수 없다.

### 필터
보고서 필터는 전체 테이블에 필터를 적용하는 데 사용된다. 예를 들어 "품목 색상" 필드를 이 영역으로 드래그하면 생성된 테이블 위에 보고서 필터가 삽입된다. 이 보고서 필터에는 드롭다운 옵션(위의 예에서 검정, 빨강, 흰색)이 있다. 이 드롭다운 목록에서 옵션(이 예에서는 "검정")을 선택하면 표시되는 테이블에는 "품목 색상=검정"인 행의 데이터만 포함된다.

### 열
열 레이블은 피벗 테이블에 표시되어야 하는 하나 이상의 열에 필터를 적용하는 데 사용된다. 예를 들어 "영업 사원" 필드를 이 영역으로 드래그하면 생성된 테이블에 "영업 사원" 열의 값이 표시된다. 즉, "영업 사원"의 수와 동일한 수의 열이 생성된다. 또한 총계 열이 하나 추가된다. 위의 예에서 이 지침은 테이블에 5개의 열(영업 사원당 하나씩)과 총계를 생성한다. 데이터 위에는 특정 영업 사원을 피벗 테이블에서 선택하거나 해제할 수 있는 필터(열 레이블)가 있다.

수치 필드가 선택되지 않았으므로 이 테이블에는 수치 값이 없지만, 수치 필드를 선택하면 "총계" 열에 값이 자동으로 업데이트된다.

### 행
행 레이블은 피벗 테이블에 표시되어야 하는 하나 이상의 행에 필터를 적용하는 데 사용된다. 예를 들어 "영업 사원" 필드를 이 영역으로 드래그하면 생성된 다른 출력 테이블에 "영업 사원" 열의 값이 표시된다. 즉, "영업 사원"의 수와 동일한 수의 행이 생성된다. 또한 "총계" 행이 하나 추가된다. 위의 예에서 이 지침은 테이블에 5개의 행(영업 사원당 하나씩)과 총계를 생성한다. 데이터 위에는 특정 영업 사원을 피벗 테이블에서 선택하거나 해제할 수 있는 필터(행 레이블)가 있다.

수치 필드가 선택되지 않았으므로 이 테이블에는 수치 값이 없지만, 수치 필드를 선택하면 "총계" 행에 값이 자동으로 업데이트된다.

### 값
이 영역은 일반적으로 다양한 유형의 계산에 사용할 수 있는 수치 값이 있는 필드를 사용한다. 그러나 텍스트 값을 사용하는 것도 틀린 것은 아니며, 이 경우 합계 대신 개수를 제공한다. 따라서 위의 예에서 "판매 수량" 필드를 "영업 사원" 행 레이블과 함께 이 영역으로 드래그하면 각 영업 사원에 대한 값을 갖는 "판매 수량 합계"라는 새 열이 추가된다.

## 애플리케이션 지원
피벗 테이블 또는 피벗 기능은 많은 스프레드시트 애플리케이션과 일부 데이터베이스 소프트웨어의 필수적인 부분이며, 다른 데이터 시각화 도구 및 비즈니스 인텔리전스 패키지에서도 찾아볼 수 있다.

### 스프레드시트
* 마이크로소프트 엑셀은 피벗 차트를 통해 시각화할 수 있는 피벗 테이블을 지원한다.
* 아파치 POI
* 리브레오피스 캘크 및 Openoffice 캘크는 피벗 테이블을 지원한다. 버전 3.4 이전에는 이 기능의 이름이 "데이터파일럿"(DataPilot)이었다.
* 캘크라 시츠는 피벗 테이블을 지원한다.
* 구글 시트는 기본적으로 피벗 테이블을 지원한다.
* 애플의 넘버스는 버전 11.2에서 피벗 테이블 지원 기능이 추가되었다.

### 데이터베이스 지원
* 객체 관계 데이터베이스 관리 시스템인 PostgreSQL은 tablefunc 모듈을 사용하여 피벗 테이블 생성을 허용한다.
* MySQL 포크인 MariaDB는 CONNECT 스토리지 엔진을 사용하여 피벗 테이블을 허용한다.
* 마이크로소프트 액세스는 "크로스탭"(crosstab) 쿼리라는 이름으로 피벗 쿼리를 지원한다.
* 마이크로소프트 SQL 서버는 SQL 서버 2016부터 FROM...PIVOT 키워드를 통해 피벗을 지원한다.
* 오라클 데이터베이스는 PIVOT 연산을 지원한다.
* SQLite와 같이 피벗 기능을 직접 지원하지 않는 일부 대중적인 데이터베이스는 일반적으로 내장 함수, 동적 SQL 또는 하위 쿼리를 사용하여 피벗 기능을 시뮬레이션할 수 있다. 이러한 경우 피벗의 문제는 일반적으로 쿼리가 실행을 시작할 때 출력 열의 수를 알아야 한다는 것이다. 피벗의 경우 열의 수가 데이터 자체에 기반하므로 이것이 불가능하다. 따라서 이름은 하드 코딩되거나 실행될 쿼리 자체가 데이터에 따라 동적으로(즉, 각 사용 전에) 생성되어야 한다.

### 웹 애플리케이션
여러 자바스크립트 UI 프레임워크 및 웹 애플리케이션 라이브러리는 웹 애플리케이션에 피벗 테이블을 내장하기 위한 구성 요소를 제공한다.

* Ajax 프레임워크인 ZK는 웹 애플리케이션에 피벗 테이블 내장을 허용한다.
* Webix 자바스크립트 UI 라이브러리에는 웹 애플리케이션에 대화형 피벗 테이블 기능을 내장하기 위한 피벗 구성 요소가 포함되어 있다.

### 프로그래밍 언어 및 라이브러리
표 형식의 데이터 작업에 적합한 프로그래밍 언어 및 라이브러리에는 피벗 테이블의 생성 및 조작을 허용하는 함수가 포함되어 있다.
* 파이썬 데이터 분석 툴킷인 Pandas에는 `pivot_table` 함수와 피벗 테이블의 섹션을 얻는 데 유용한 `xs` 메서드가 있다.
* R에는 피벗 테이블 기능을 제공하는 도구 모음이 포함된 Tidyverse 메타 패키지와 pivottabler 패키지가 있다. 이 문서의 예시는 `pivot_wider` 함수를 통해 (Tidyverse 메타 패키지의) tidyr에서 직접 구현할 수 있다.

## 온라인 분석 처리
엑셀 피벗 테이블에는 엑셀 스프레드시트에서 데이터를 가져오는 대신 데이터를 검색하기 위해 온라인 분석 처리(OLAP) 서버에 직접 쿼리하는 기능이 포함되어 있다. 이 구성에서 피벗 테이블은 OLAP 서버의 단순한 클라이언트이다. 엑셀의 피벗 테이블은 마이크로소프트의 분석 서비스(Analysis Service)뿐만 아니라 모든 XML for Analysis(XMLA) OLAP 표준 준수 서버에 연결할 수 있다.

## 같이 보기
* 오피스 제품군 비교
* 데이터 마이닝
* 데이터 웨어하우스
* 추출, 변환, 적재
* Fold (고차 함수)
* 관계대수

## 각주

분류:데이터 분석
분류:인포그래픽
분류:마이크로소프트 오피스
분류:스프레드시트 소프트웨어
분류:1991년 도입