차원 작업
별모양 스키마를 작성하는 경우 차원 테이블과 팩트 테이블을 갖게 됩니다. 팩트 테이블은 판매 주문, 배송 날짜, 재판매인, 공급업체와 같은 이벤트 관련 정보를 포함합니다. 차원 테이블은 제품이나 시간과 같은 사업체 관련 세부 정보를 저장하고 관계를 통해 팩트 테이블에 연결됩니다.
계층 구조를 하나의 원본으로 사용하여 차원 테이블에서 세부 정보를 찾을 수 있습니다. 이러한 계층 구조는 데이터의 기본 세그먼트를 통해 형성됩니다. 예를 들어 날짜를 연도, 월, 주, 일로 분할할 수 있는 날짜 계층 구조가 있을 수 있습니다. 계층 구조는 상위 수준에서만 데이터를 보는 대신 데이터의 고유 정보로 드릴다운하는 데 활용할 수 있으므로 유용합니다.
계층 구조
시각적 개체를 작성할 때 Power BI에서는 날짜 형식의 값이 계층 구조로 자동 입력됩니다(테이블이 날짜 테이블로 표시되지 않은 경우).
앞의 Date 열에서 날짜는 연도, 분기, 월, 일로 갈수록 점차 더 세부적으로 표시됩니다. 수동으로 계층 구조를 만들 수도 있습니다.
예를 들어 범주 및 하위 범주별 총 판매량의 누적 가로 막대형 차트를 만들려는 상황을 생각해 보겠습니다. Product 테이블에서 범주 및 하위 범주에 해당하는 계층 구조를 만들어 이 작업을 수행할 수 있습니다. 계층 구조를 만들려면 Power BI의 필드 창으로 이동한 후 계층 구조를 만들 열을 마우스 오른쪽 단추로 클릭합니다. 다음 그림과 같이 새 계층을 선택합니다.
다음으로, 새로 만든 이 계층 구조에 하위 범주 열을 끌어서 놓습니다. 이 열은 계층 구조상의 하위 수준으로 추가됩니다.
이제 시각화 창에서 누적 가로 막대형 차트를 선택하여 시각적 개체를 작성할 수 있습니다. 축 필드에서 범주 이름 계층 구조를 추가하고 값 필드에서 총 매출을 추가합니다.
시각적 개체를 드릴다운하여 표시하려는 내용에 따라 범주 및 하위 범주를 모두 볼 수 있습니다. 계층 구조를 사용하면 단일 뷰에서 점차 수준을 높이며 데이터를 볼 수 있습니다.
계층 구조에 대해 알아봤습니다. 이제 한 단계 더 나아가 부모-자식 계층 구조 및 팩트 테이블과 차원 테이블 간의 여러 관계에서 이 계층 구조의 역할을 검토하겠습니다.
부모-자식 계층 구조
다음 예는 데이터베이스 내에서 직원, 직원의 관리자 및 이들의 ID에 대한 중요 정보를 보여 주는 Employee 테이블입니다. 이 테이블을 살펴보면 Manager 열에서 Roy F가 여러 번 반복되어 있음을 볼 수 있습니다. 이미지에서 볼 수 있듯이 여러 직원이 동일한 관리자를 가질 수 있으며, 이 관계는 관리자와 직원 간의 계층 구조를 나타냅니다.
Manager 열은 계층 구조를 결정하므로 부모이고, 이에 대한 “자식” 계층은 직원입니다. 이 예에서는 이 계층 구조의 모든 수준을 볼 수 있습니다. Power BI에서는 계층 구조의 모든 수준을 표시하는 것이 기본값이 아닙니다. 따라서 이 계층 구조의 모든 수준을 표시하거나 “평면화”를 통해 데이터 세분성을 높여 표시하는 것은 분석가가 직접 해야 합니다.
부모-자식 계층 구조 평면화
최상위 부모를 기준으로 여러 자식 수준을 보는 프로세스를 ‘계층 구조 평면화’라고 합니다. 이 프로세스에서는 테이블에 여러 열을 만들어 부모의 계층 경로를 동일 레코드의 자식에 표시합니다. 각 직원에 대한 관리 경로의 텍스트 버전을 반환하는 간단한 DAX 함수인 PATH()와 PATHITEM()을 사용하여 이 경로를 관리 계층 구조의 각 수준으로 구분합니다.
중요
DAX에 대해서는 아직 다루지 않았지만 다른 모듈에서 설명합니다. 이 함수는 계층 구조를 설명하기 때문에 이 섹션에 포함되었습니다. 이런 방식으로 DAX를 사용하는 방법이 이해하기 어려우면 DAX 모듈을 참조한 후에 이 섹션으로 돌아오세요.
테이블에서 모델링 탭으로 이동하고 새 열을 선택합니다. 수식 입력줄이 나타나면 여기에 다음 함수를 입력합니다. 이 함수는 직원과 관리자 간의 텍스트 경로를 만듭니다. 이 작업은 DAX에서 계산 열을 만듭니다.
Path = PATH(Employee[Employee ID], Employee[Manager ID])
직원과 관리자 간의 완료된 경로는 다음 스크린샷과 같이 새 열에 표시됩니다.
Roger M을 살펴보면, ID의 경로가 1010 | 1011 | 1013입니다. 이 경로는 Roger M(ID 1013)보다 한 수준 높은 사람이 관리자 Pam H(ID 1011)이고 Pam H보다 한 수준 높은 사람이 관리자 Roy F(ID 1010)라는 것을 의미합니다. 이 경로 행에서 Roger M은 계층 구조의 아래쪽, 즉 자식 수준에 있고 Roy F는 계층 구조의 맨 위, 즉 부모 수준에 있습니다. 이런 경로는 모든 직원에 대해 만들어집니다. 계층 구조를 평면화하려면 PATHITEM 함수를 사용하여 각 수준을 구분할 수 있습니다.
계층 구조의 세 가지 수준을 개별적으로 보려면 다음 수식을 입력하여 이전에 수행한 것과 동일한 방식으로 4개의 열을 만들 수 있습니다. PATHITEM 함수를 사용하여 계층 구조의 해당 수준에 있는 값을 검색합니다.
- Level 1 = PATHITEM(Employee[Path],1)
- Level 2 = PATHITEM(Employee[Path],2)
- Level 3 = PATHITEM(Employee[Path],3)
완료되면 이제 테이블 내에서 계층 구조의 각 수준을 볼 수 있습니다. Roy F는 계층 구조의 맨 위에 있으며, 수준 2~3으로 진행하면 관리자와 직원이 서로 매핑되는 것을 볼 수 있습니다.
이전에 수행한 것처럼 이제 필드 창에서 계층 구조를 만들 수 있습니다. 첫 번째 계층 수준이므로 수준 1을 마우스 오른쪽 단추로 클릭한 다음, 새 계층을 선택합니다. 그런 다음, 수준 2 및 수준 3을 이 계층으로 끌어서 놓습니다.
이제 계층 구조를 평면화하여 개별 수준을 볼 수 있게 되었습니다.
앞에서는 팩트 테이블과의 관계가 하나뿐인 차원을 고려했습니다. 하지만 차원 테이블에 팩트 테이블과의 관계가 여러 개 있는 상황이 발생합니다.
롤플레잉 차원
롤플레잉 차원에는 팩트 테이블과의 유효 관계가 여러 개 있습니다. 다시 말해서, 동일한 차원을 사용하여 여러 개의 열이나 데이터 테이블을 필터링할 수 있습니다. 따라서 검색해야 하는 정보에 따라 다르게 데이터를 필터링할 수 있습니다. 이 내용은 복잡하므로 이 섹션에서는 소개만 합니다. 롤플레잉 차원을 작업하려면 복잡한 DAX 함수가 필요합니다. 이 함수에 대해서는 이후 섹션에서 다루겠습니다.
위의 시각적 개체는 Calendar, Sales, Order 테이블을 보여 줍니다. Calendar는 차원 테이블이고, Sales와 Order는 팩트 테이블입니다. 차원 테이블에는 두 개의 관계, 즉 Sales와의 관계와 Order와의 관계가 있습니다. Calendar 테이블을 사용하여 Sales와 Order 모두에서 데이터를 그룹화할 수 있으므로, 이 예제는 롤플레잉 차원입니다. Calendar 테이블이 Order 테이블과 Sales 테이블을 참조하는 시각적 개체를 작성하려는 경우에는 Calendar 테이블이 롤플레잉 차원으로 작용합니다.