서로 다른 테이블을 할당하는 관계를 만들어 데이터 분석에 더 많은 기능을 추가합니다. 관계는 데이터를 포함하는 두 테이블 간의 연결입니다. 각 테이블의 한 열은 관계의 기초입니다. 관계의 유용성은 기업에서 고객 주문 데이터를 추적한다고 가정해 보면 알 수 있습니다. 다음과 같은 구조가 있는 단일 테이블의 모든 데이터를 추적할 수 있습니다.
고객 ID |
이름 |
전자 메일 |
할인율 |
주문 ID |
주문 날짜 |
제품 |
수량 |
---|---|---|---|---|---|---|---|
1 |
주 |
chris.ashton@contoso.com |
.05 |
256 |
2010-01-07 |
소형 디지털 |
11 |
1 |
주 |
chris.ashton@contoso.com |
.05 |
255 |
2010-01-03 |
SLR 카메라 |
15 |
2 |
이 |
michal.jaworski@contoso.com |
.10 |
254 |
2010-01-03 |
저예산 무비 메이커 |
27 |
이러한 방식도 문제는 없지만 각 주문에 대한 고객 전자 메일 주소 등 많은 데이터가 중복되어 저장됩니다. 저장소가 고가는 아니지만 전자 메일 주소가 변경될 경우 관련 고객에 해당하는 모든 행을 업데이트해야 합니다. 이와 같은 문제는 데이터를 여러 테이블에 분할하고 테이블 간에 관계를 정의하면 해결할 수 있습니다. 이는 SQL Server와 같은 관계형 데이터베이스에서 사용되는 방식입니다. 예를 들어 데이터를 가져오는 데이터베이스에서 세 개의 관련 테이블을 사용해 주문 데이터를 표시할 수 있습니다.
고객
[고객 ID] |
이름 |
전자 메일 |
---|---|---|
1 |
주 |
chris.ashton@contoso.com |
2 |
이 |
michal.jaworski@contoso.com |
고객 할인율
[고객 ID] |
할인율 |
---|---|
1 |
.05 |
2 |
.10 |
주문
[고객 ID] |
주문 ID |
주문 날짜 |
제품 |
수량 |
---|---|---|---|---|
1 |
256 |
2010-01-07 |
소형 디지털 |
11 |
1 |
255 |
2010-01-03 |
SLR 카메라 |
15 |
2 |
254 |
2010-01-03 |
저예산 무비 메이커 |
27 |
관계는 명시적으로 만든 데이터 모델 또는 여러 테이블을 동시에 가져올 때 자동으로 사용자를 대신하여 만드는 데이터 모델 내에 있습니다. 파워 피벗 추가 기능을 사용하여 데이터 모델을 만들거나 관리할 수도 있습니다. 자세한 내용은 Excel에서 데이터 모델 만들기를 참고하세요.
파워 피벗 추가 기능을 사용하여 동일한 데이터베이스에서 테이블을 가져오는 경우, 파워 피벗에서는 [대괄호] 안에 있는 열을 기준으로 테이블 간의 관계를 검색하여 백그라운드에서 만드는 데이터 모델의 해당 관계를 재현할 수 있습니다. 자세한 내용은 이 문서의 관계 자동 검색 및 유추를 참고하세요. 여러 원본에서 테이블을 가져오는 경우 두 테이블 간의 관계 만들기의 설명에 따라 수동으로 관계를 만들 수 있습니다.
관계는 각 테이블에서 동일한 데이터를 포함한 열을 기준으로 형성됩니다. 예를 들어 고객 ID를 저장하는 열이 각각 포함된 경우 Customers 테이블을 Orders 테이블과 연결할 수 있습니다. 예제에서는 열 이름이 동일하지만 반드시 같아야 할 필요는 없습니다. 주문 테이블의 모든 행에 포함되어 있는 ID가 고객 테이블에도 저장되어 있기만 하다면 고객 ID 및 고객 번호처럼 다르게 사용할 수도 있습니다.
관계형 데이터베이스에는 여러 유형의 키가 있습니다. 키는 일반적으로 특수 속성이 있는 열입니다. 각 키의 목적을 이해하면 피벗 테이블, 피벗 차트 또는 파워 뷰 보고서에 데이터를 제공하는 다중 테이블 데이터 모델을 관리하는 데 도움이 될 수 있습니다.
다양한 유형의 키가 있지만 여기서 가장 중요한 키는 다음과 같습니다.
-
기본 키: Customers 테이블의 CustomerID와 같은 테이블의 행을 고유하게 식별합니다.
-
대체 키(또는 후보 키): 고유한 기본 키가 아닌 열입니다. 예를 들어 직원 테이블에는 각기 고유한 직원 ID 및 주민 등록 번호가 모두 저장될 수 있습니다.
-
외래 키: Customers 테이블의 CustomerID를 참조하는 Orders 테이블의 CustomerID와 같은 다른 테이블의 고유 열을 참조하는 열입니다.
데이터 모델에서는 기본 키 또는 대체 키를 관련 열이라고 부릅니다. 테이블에 기본 키와 대체 키가 모두 있는 경우 둘 중 하나를 테이블 관계의 기준으로 사용할 수 있습니다. 외래 키는 원본 열 또는 그냥 열이라고 부릅니다. 이 예제에서는 Orders 테이블(열)의 CustomerID와 Customers 테이블(조회 열)의 CustomerID 간에 관계가 정의됩니다. 관계형 데이터베이스에서 데이터를 가져오는 경우 기본적으로 Excel에서는 한 테이블에서 외래 키를, 나머지 테이블에서 이에 상응하는 기본 키를 선택합니다. 하지만 조회 열로는 고유한 값을 갖는 열이라면 무엇이든지 사용할 수 있습니다.
고객과 주문 간의 관계는 일대다 관계입니다. 고객별로 여러 개의 주문을 포함할 수 있지만 한 주문에 고객이 여러 명일 수는 없습니다. 또 다른 중요한 테이블 관계는 일대일 관계입니다. 이 예제에서 각 고객에 대한 단일 할인율을 정의하는 CustomerDiscounts 테이블은 Customers 테이블과 일대일 관계를 맺습니다.
이 표에서는 세 테이블(Customers, CustomerDiscounts 및 Orders) 간의 관계를 보여 줍니다.
관계 |
종류 |
조회 열 |
열 |
---|---|---|---|
고객-고객 할인율 |
일대일 |
고객.고객 ID |
고객 할인율.고객 ID |
고객-주문 |
일대다 |
고객.고객 ID |
주문.고객 ID |
참고: 다대다 관계는 데이터 모델에서 지원되지 않습니다. 한 고객이 여러 제품을 구입할 수 있고 동일한 제품을 여러 고객이 구입할 수도 있는 제품과 고객 간의 직접적인 관계를 다대다 관계의 예로 들 수 있습니다.
관계를 만든 후에는 일반적으로 새로 만든 관계의 테이블에서 열을 사용하는 수식을 다시 계산해야 합니다. 처리에 소요되는 시간은 데이터 양과 관계의 복잡성에 따라 달라집니다. 자세한 내용은 수식 다시 계산을 참조하세요.
데이터 모델에서는 두 테이블 간에 여러 개의 관계를 만들 수 있습니다. 정확한 계산을 작성하려면 Excel에서 한 테이블에서 다음 테이블로 가는 단일 경로가 필요합니다. 따라서 각각의 테이블 쌍에 존재하는 관계는 한 번에 하나씩만 활성화됩니다. 다른 항목은 비활성 상태이지만 수식 및 쿼리에서 비활성 관계를 지정할 수 있습니다.
다이어그램 뷰에서 활성 관계는 실선이고 비활성 관계는 파선입니다. 예를 들어 AdventureWorksDW2012에서 DimDate 테이블에는 FactInternetSales: OrderDate, DueDate 및 ShipDate 테이블의 세 개의 서로 다른 열과 관련된 DateKey 열이 포함됩니다. DateKey 및 OrderDate 간의 관계가 활성 상태라면 달리 지정하지 않는 한 이 관계가 수식의 기본 관계로 사용됩니다.
다음 요구 사항을 충족하는 경우 관계를 만들 수 있습니다.
조건 |
설명 |
---|---|
각 테이블의 고유 식별자 |
테이블마다 테이블의 각 행을 고유하게 식별하는 열이 하나씩 있어야 합니다. 이 열을 대개 기본 키라고 합니다. |
고유 조회 열 |
조회 열의 데이터 값은 고유해야 합니다. 즉, 열에 중복 값이 포함될 수 없습니다. 데이터 모델에서 Null 및 빈 문자열은 빈 칸에 해당하여 별도의 데이터 값으로 인정됩니다. 따라서 조회 열에는 여러 개의 Null이 있을 수 없습니다. |
호환되는 데이터 형식 |
원본 열 및 조회 열의 데이터 형식은 호환되어야 합니다. 데이터 형식에 대한 자세한 내용은 데이터 모델에서 지원되는 데이터 형식을 참조하세요. |
데이터 모델에서 복합 키로는 테이블 관계를 만들 수 없습니다. 또한 일대일 및 일대다 관계만 만들도록 제한됩니다. 다른 관계 유형은 지원되지 않습니다.
복합 키 및 조회 열
복합 키는 둘 이상의 열로 구성됩니다. 데이터 모델은 복합 키를 사용할 수 없습니다. 테이블에는 항상 테이블의 각 행을 고유하게 식별하는 열이 정확히 하나 있어야 합니다. 복합 키를 기반으로 기존 관계가 있는 테이블을 가져오는 경우 Power Pivot의 테이블 가져오기 마법사는 모델에서 만들 수 없으므로 해당 관계를 무시합니다.
기본 키 및 외래 키가 여러 개의 열로 정의된 두 테이블 간에 관계를 만들려면 먼저 이 값들을 결합하여 하나의 키 열을 만든 후 관계를 만들어야 합니다. 데이터를 가져오기 전에 또는 파워 피벗 추가 기능을 사용하여 데이터 모델에서 계산 열을 만들어 이 작업을 수행할 수 있습니다.
다대다 관계
데이터 모델에서는 다대다 관계를 사용할 수 없습니다. 즉, 모델에 접합 테이블 을 추가할 수 없습니다. 하지만 DAX 함수를 사용해 다대다 관계를 모델링할 수는 있습니다.
자체 조인 및 루프
데이터 모델에서는 자체 조인이 허용되지 않습니다. 자체 조인이란 한 테이블에서 자체적으로 형성되는 재귀적 관계입니다. 자체 조인은 주로 부모-자식 계층을 정의하는 데 사용됩니다. 예를 들어 Employees 테이블을 자체 조인하면 기업의 관리망을 보여 주는 계층을 만들 수 있습니다.
Excel에서는 한 통합 문서의 여러 관계를 잇는 루프를 만들 수 없습니다. 즉, 다음과 같은 관계 집합은 금지됩니다.
테이블 1, 열 a - 테이블 2, 열 f
테이블 2, 열 f - 테이블 3, 열 n
테이블 3, 열 n - 테이블 1, 열 a
루프를 초래하는 관계를 만들려고 하면 오류가 발생합니다.
파워 피벗 추가 기능을 사용하여 데이터를 가져오는 경우 파워 피벗을 통해 Excel에서 만드는 데이터 모델에서 관계를 검색하고 새 관계를 만들 수도 있다는 이점이 있습니다.
여러 테이블을 가져오는 경우 파워 피벗에서는 테이블 간의 기존 관계를 모두 자동으로 검색합니다. 또한 피벗 테이블을 만들면 파워 피벗에서는 테이블의 데이터를 분석합니다. 정의되지는 않았지만 가능한 관계를 검색하고 이러한 관계에 포함하기에 적합한 열을 제안합니다.
검색 알고리즘은 열의 값과 메타데이터에 대한 통계 데이터를 사용하여 관계의 가능성을 유추합니다.
-
관련된 모든 열에 있는 데이터 형식은 서로 호환되어야 합니다. 자동 검색의 경우 정수 및 텍스트 데이터 형식만 지원됩니다. 데이터 형식에 대한 자세한 내용은 데이터 모델에서 지원하는데이터 형식을 참고하세요.
-
관계가 제대로 검색되려면 조회 열에 있는 고유한 키의 수가 관계의 "다" 쪽 테이블에 있는 값보다 많아야 합니다. 즉, 조회 테이블의 키 열에 없는 값이 관계에서 "다" 쪽에 해당하는 키 열에 있으면 안 됩니다. 예를 들어 제품과 제품 ID가 나열된 테이블(조회 테이블)이 있고 제품별 판매 정보가 나열된 판매 테이블(관계의 다 측)이 있다고 가정해 보겠습니다. 판매 레코드에 포함된 제품 ID가 제품 테이블에 없는 경우 관계를 자동으로 만들 수 없지만 이를 수동으로 만들 수는 있습니다. 이 관계를 Excel에서 검색할 수 있으려면 먼저 제품 조회 테이블에 누락된 제품의 ID를 업데이트해야 합니다.
-
"다" 쪽에 해당하는 키 열의 이름이 조회 테이블의 키 열 이름과 비슷해야 합니다. 이름은 완전히 같지 않아도 됩니다. 예를 들어 비즈니스 설정에서 Emp ID, EmployeeID, Employee ID, EMP_ID 등과 같은 데이터가 포함된 열 이름에 변형이 있는 경우가 많습니다. 알고리즘을 통해 비슷한 이름을 검색하여, 비슷하거나 정확히 일치하는 이름을 가진 열에 더 높은 확률을 할당합니다. 따라서 가져오는 데이터의 열 이름을 기존 테이블의 열과 비슷한 이름으로 바꾸면 관계가 만들어질 가능성이 높아집니다. 가능한 관계가 여러 개 검색된 경우에는 관계를 만들지 않습니다.
이 정보는 일부 관계가 검색되지 않는 이유 또는 필드 이름 및 데이터 형식 등의 메타데이터를 변경해 관계 자동 검색의 성능을 향상시키는 방법을 이해하는 데 도움이 됩니다. 자세한 내용은 관계 문제 해결을 참고하세요.
명명된 집합에 대한 자동 검색
명명된 집합과 피벗 테이블의 관련 필드 간에 존재하는 관계는 자동으로 검색되지 않습니다. 대신 이러한 관계를 수동으로 만들 수 있습니다. 자동 관계 검색을 사용하려면 명명된 집합을 모두 제거하고 명명된 집합의 개별 필드를 피벗 테이블에 직접 추가해야 합니다.
관계 유추
경우에 따라서는 테이블 간의 관계가 자동으로 연결됩니다. 예를 들어 아래에 있는 처음 두 테이블 집합 간에 관계를 만들면 다른 두 테이블 간에도 관계가 존재하는 것으로 유추되어 관계가 자동으로 만들어집니다.
제품과 범주 -- 수동으로 관계 생성
범주와 하위 범주 -- 수동으로 관계 생성
제품과 하위 범주 -- 관계가 유추됨
관계가 자동으로 연결되려면 위와 같이 관계가 한 방향으로 형성되어야 합니다. 예를 들어 처음에 판매와 제품 간에 관계를 만든 후 판매와 고객 간에 관계를 만들면 관계가 유추되지 않습니다. 제품과 고객 간에는 다대다 관계가 형성되기 때문입니다.