차원용도

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 차원 용도에 대해서 알아 보도록 하겠습니다.

하나의 큐브 안에는 여러 개의 측정값 그룹이 포함될 수 있는데 측정값 그룹들은 차원들과의 관계가 서로 다르고 세분성도 서로 다를 수 있습니다.

팩트 테이블과 차원 테이블 사이의 관계가 많을 경우 큐브 마법사나 디자이너에서 작업하는 과정에서 자동으로 관계가 설정 됩니다. 큐브 디자이너 차원 용도에서 그러한 관계들을 확인하고 필요하면 수정도 할 수 있습니다.

 

솔루션 탐색기에서 [큐브] – [Adventure Works.cube]를 더블클릭 또는 마우스 오른쪽을 이용해서 [디자이너 보기]를 선택 합니다.

[차원 용도] 탭을 클릭 합니다.

 

Sales Quota 측정값 그룹의 경우 Time 큐브 차원과 별도로 관계를 가지고 있습니다. 그런데 Time 차원은 롤-플레잉 차원인 Time(Due Date), Time(Order Date), Time(ship Date)와 동일한 구조를 가집니다. 여기에서는 Sales Quota의 Time 차원이 Time (Order Date)와 같은 역할을 가지는 것으로 가정 합니다.

 

Time 차원에서 마우스 오른쪽을 클릭하여 [삭제]를 클릭 합니다.

 

Time(Order Date)와 Sales Quota의 교차 셀을 클릭하고 […]을 클릭 합니다.

 

 

[관계 정의] 창이 나타나면 관계 유형에서는 일반을 선택 합니다. 세분특성에서는 Calendar Quarter를 선택합니다. 이는 Sales Quota가 분기 수준에서 관리 되기 때문 입니다.

 

차원 열과 측정값 그룹열에 CalendarYear, CalendarQuarter를 설정합니다.

차원 열에 두 개의 열이 나타는 이유는 Time 차원에서 Calendar Quarter 특성의 MemberKeys 속성을 CalendarYear와 CalendarQuarter의 복합 키로 설정되어 있기 때문 입니다.

 

 

프로젝트를 처리하고 브라우저 탭을 클릭 합니다. Order Date 차원의 [Due Date.Calendar Quarter] 수준을 행 필드로 끌어다 놓습니다.

분기별로 Sales Amount Quota가 정상적으로 보이는 것을 확인 할 수 있습니다.

 

측정값 그룹

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 측정값 그룹에 대해서 알아 보도록 하겠습니다.

측정값 그룹은 분석의 대상이 되는 측정값 들의 모음 입니다. 동일한 측정값 그룹에 속하는 측정값들은 동일한 세분성(Granularity)를 가집니다. 측 하나의 팩트 테이블에서 관리가 가능 합니다. Analysis Services에서 하나의 측정값 그룹은 기본적으로 하나의 팩트 테이블로부터 구현되도록 설계되었습니다.

 

하나의 큐브는 여러 개의 측정값 그룹을 포함할 수 있습니다. 그리고 각 측정값 그룹의 세분성은 동일하지 않아도 됩니다. 하나의 큐브 안에는 임의의 측정값 그룹과 한번이라도 관계가 있는 모든 차원이 포함됩니다.(이를 큐브 차원이라 합니다.) 따라서 측정값 그룹별로 관계를 가지는 차원과 그렇지 않은 차원들을 구분해야 할 필요가 있습니다.

 

측정값 그룹에 속한 개별 측정값들은 속성 설정을 통해 집계 함수를 변경하거나 형식 문자열을 화면에 표시하기에 적합한 형태로 변경할 수 있습니다. 또한 계산을 위한 중간 단계 측정값들은 사용자에게 보이지 않게 설정할 수도 있습니다.

 

하나의 큐브는 최소한 하나의 측정값 그룹과 하나의 차원을 포함해야 합니다. 그리고 측정값 그룹은 최소한 하나의 측정값을 포함해야 합니다. 또한 해당 측정값 그룹과 차원을 생성하는데 필요한 팩트 테이블과 차원 테이블이 데이터 원본 뷰에 포함되어야 합니다.

 

 

[솔루션 탐색기]에서 Adventure Works DW.dsv를 더블클릭 또는 마우스 오른쪽을 이용해서 [디자이너 보기]를 선택 합니다.

 

 

다이어그램 창의 빈 공간을 마우스 오른쪽을 클릭하여 [테이블 추가/제거]를 선택 합니다.

 

 

테이블 추가 제거 창에서 [FactInternetSales], [FactSalesQuota]를 포함된 개체에 추가합니다,

 

 

솔루션 탐색기에서 Adventure Works.cube를 더블클릭 또는 마우스 오른쪽을 이용하여 디자이너보기를 선택 합니다.

 

 

[데이터 원본 뷰] 창의 빈 공간에서 마우스 오른쪽을 클릭하여 [테이블 표시]를 선택 합니다.

 

 

FactInternetSales, FactSalesQuota 테이블을 추가 합니다.

 

 

측정값 창의 임의 위치에서 마우스 오른쪽을 클릭하여 [새 측정값]을 선택합니다.

 

 

새 측정값에서 아래 그림과 같이 측정값 그룹을 추가 합니다.

 

 

FactInternetSales 측정값과 같은 방법으로 FactSalesQuota 측정값을 추가 합니다.

 

 

측정값 그룹에서 아래 그림과 같이 측정값 이름을 변경 합니다. 그리고 프로젝트를 배포 합니다.

 

측정값 그룹과 측정값의 속성 설정을 통하여 보다 세밀한 작업을 할 수 있습니다. 사용자에게 친숙하지 않는 이름에서 Name 속성을 통하여 친숙한 이름을 제공 할 수 있습니다.

 

측정값을 클라이언트 도구에 제공할 때 값과 함께 형식이 적용된 문자열을 제공해서 화면 표시를 수월하게 할 수 있습니다. 측정값의 형식화된 문자열 처리를 위해서 FormatString 속성을 통하여 별도의 형식 지정을 지원합니다.

Order Quantity, Internet Order Quantity 속성은 [#,#]으로 설정 합니다.

Sales Amount, Internet Sales Amount, Sales Amount Quota 속성을 [Currency]로 설정 합니다.

 

프로젝트를 배포 합니다.

 

브라우저 탭을 클릭하고 다시 연결을 클릭 합니다.

측정값에 Currency 형식이 적용된 것을 확인 할 수 있습니다.

넌리프 수준의 데이터 멤버

 

안녕하세요 강성욱 입니다. (www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 넌리프 수준의 멤버들을 적재해 보도록 하겠습니다.

일반 차원에서는 팩트 테이블로부터 데이터를 읽어와 리프 수준의 멤버들에 적재합니다. 그리고 넌리프 수준 멤버들의 데이터는 하위 수준의 멤버들로부터 집계 과정을 통해 계산됩니다. 즉 팩트 데이터를 넌리프 수준의 멤버들로 직접 적재하지 못합니다. 그러나 앞에서 생성한 Employee 차원의 경우 넌리프 수준의 사원 멤버들로 개인별로 실적 데이터를 부모-자식 차원의 MemberWithData 속성을 이용하여 이러한 요구를 쉽게 해결 할 수 있습니다.

 

모든 강좌의 실습은 순서대로 진행 됩니다. 반드시 앞의 강좌를 따라하시길 바랍니다.

 

[솔루션 탐색기]에서 Employee.Dim을 디자이너보기 또는 더블 클릭합니다.

 

 

특성 창의 Employee 특성을 선택한 후 MemberWithData 속성이 NonLeafDataVisible로 설정된 것을 확인하고 MemberWithDatacaption을 (*)로 설정 합니다.

 

프로젝트 배포후 브라이저 탭을 클릭 합니다. Employee 계층 구조를 보면, (Bradley), (Duffy)등과 같이 ()로 둘러쌓인 멤버들이 보입니다. 이 멤버들은 넌리프 멤버가 직접 데이터를 입력받지 못하기 때문에 데이터를 받아들일 수 있는 데이터 멤버를 생성해서 자식 멤버로 보이도록 처리한 것입니다. 데이터 멤버의 이름은 MembersWithDataCaption에서설정한 대로 보입니다. 참고로 MemberWithDataCaption 설정에서 * 은 부모 멤버의 이름으로 대체 됩니다.

 

 

솔루션 탐색기에서 [Adventure Works.cube]를 더블클릭 또는 [디자이너 보기]를 선택 합니다.

 

큐브 구조 탭의 차원 창에서 오른쪽 클릭 후 큐브 차원 추가를 클릭합니다,.

 

 

[큐브 차원 추가] 창에서 Employee를 선택합니다.

 

 

새로운 큐브 차원으로 Employee 차원이 보입니다. 그리고 프로젝트를 배포 합니다.

 

 

브라우저 탭을 보면 부모와 자식의 합계를 확인 할 수 있습니다.

 

앞의 예제를 보면 Sanchez의 경우 최상위 멤버로서 더 이상 부모 멤버가 의미 없습니다. 따라서 최상위 수준으로 All 수준을 관리할 필요가 없습니다. 또한 차원의 수준명이 Level02, Level03이런식으로 나타는데 사용자에게 의미있는 이름을 보여줄 필요가 있습니다.

 

특성창에서 Employee 특성을 선택한 후 속성창에서 IsAggregatable 속성을 false로 설정합니다, 이 설정은 All 수준을 제거하는 효과를 가집니다.

 

 

 

속성창에서 [NamingTemplate]를 선택 합니다. 수준명명 템플릿 창에서 다음과 같이 입력합니다,

 

 

프로젝트를 배포하고 브라우저탭으로 이동하여 다시 연결을 클릭 합니다. 이전 화면과 달리 All멤버에 해당하는 총 합계 부분이 사라집니다.

 

차원을 펼침에 따라 나타나는 수준명이 사용자들에게 CEO, 임원, 중간관리자, 실무자 등과 같이 의미있는 이름으로 나타남을 확인할 수 있습니다.

 

 

부모-자식 차원

 

안녕하세요 강성욱 입니다.(www.sqltag.org, www.sqler.com, http://blog.naver.com/jevida)

이번 시간에는 차원에 대해서 (그 중에 부모-자식 차원)알아 보도록 하겠습니다. 일반 차원의 경우 차원의 각 특성은 차원 테이블이 각 열에 대응되며 동일한 세분성을 가지는 멤버들을 포함하합니다. 이 때 하나의 차원 테이블을 기반으로 하는 경우 스타 스키마 차원이라 하고 두 개 이상의 차원 테이블들을 기반으로 하는 경우 스노우 플레이크 스키마 라고 합니다.

부모-자식 차원은 하나의 차원 테이블을 기반으로 합니다. 스타 스키마 차원과 다른 점은 won기 참조 관계를 이용하여 계층 구조를 생성한다는 것입니다. 즉 키 특성에 해당하는 열과 그 열을 참조하는 다른 열 등 두개의 열을 이용하여 차원의 전체 계층 구조를 만들어 냅니다.

 

이번 실습에서는 부모-자식 차원을 생성해 보도록 하겠습니다.

 

[솔루션 탐색기]에서 [데이터 원본 뷰]에서 [Adventure Works DW.dsv]에서 마우스 오른쪽을 클릭하여 [디자이너 보기]를 선택 또는 원본 뷰를 더블 클릭 합니다.

 

다이어그램 창의 빈 곳을 오른쪽을 클릭하여 [테이블 추가/제거]를 선택 합니다.

 

 

[테이블 추가/제거] 창에서 [DimEmployee]를 포함된 개체에 추가하고 확인을 클릭 합니다.

 

 

새로 추가된 DimEmplpoyee 차원을 보면 재귀 참조를 하고 있음을 확인 할 수 있습니다.

[솔루션 탐색기]-[차원]에서 마우스 오른쪽을 클릭하여 [새 차원]을 선택 합니다.

 

 

차원 마법사의 원본 정보 지정에서 다음과 같이 설정 합니다.

 

 

차원 특성 단계에서는 Parent Employee Key, Title, Gender를 선택 합니다.

 

 

마법사를 완료하고 차원 디자이너 특성 창에서 Parent Employee Key 특성을 클릭하고 [속성]창에서 [Usage] 속성이 Parent 임을 확인 합니다.

차원 특성 창에서 [Parent Employee Key] 이름을 [Employee]로 변경 합니다.

 

 

프로젝트를 배포하고 [브라우저]탭을 클릭 합니다.

Employee 계층을 펼쳐보면 차원 구조에 포함되는 사원 멤버들의 수준 깊이가 다양한 것을 볼 수 있습니다. 부모-자식 차원은 이러한 비정형 계층(Ragged Hierachy)을 구현할 때 유용합니다.

 

 

+ Recent posts