Business Intelligence: 첫 큐브 작성

Stacia Misner

 

필자는 사람들에게 Microsoft SQL Server Analysis Services를 소개할 때면 그곳에 있는 사람들의 데이터를 샘플로 하는 간단한 큐브를 만드는 방법을 즐겨 사용합니다. 그런데 이렇게 할 때는 조심해야 합니다. 시연 장면을 보고 흥분한 사용자가 과거에는 생각지도 못했던 새로운 방법으로 데이터를 직접 탐색해보기 위해 필자를 의자에서 밀쳐내는 경우가 몇 번 있었기 때문입니다. 여러분 자신의 데이터를 더 쉽게 탐색하려는 경우든, 여러분이 지원해야 할 데이터 지향적인 사용자 커뮤니티가 있는 경우든 SSAS(SQL Server Analysis Services)는 필요한 도구를 제공합니다.

이 기사는 연재 기사의 세 번째 기사입니다. 앞의 두 기사는 2009년 8월호에 나왔으며 technet.microsoft.com/magazine/ee263919.aspx에서 볼 수 있습니다. 이 연재 기사에서는 간단한 BI 솔루션을 구축하면서 Microsoft SQL Server 2008에 제공되는 구성 요소를 사용하여 BI(비즈니스 인텔리전스)에 대한 이해를 도모합니다. 앞선 두 기사에 소개된 개념과 용어를 사용할 것이므로 아직 이 두 기사를 읽지 않았다면 먼저 읽어 두는 것이 좋습니다.

"첫 BI 솔루션 계획"에서 필자는 회사 데이터베이스에서 직접 데이터를 검색하는 방법과 비교하여 데이터 마트를 구축하는 방법의 장점을 설명했습니다. 또한 이러한 기사에 설명된 단계를 따르는 데 필요한 샘플 데이터베이스를 다운로드하는 방법도 설명했습니다. 그리고 Derek Comingore가 "BI 솔루션을 위한 데이터 기반 구축"에서는 Integration Services를 사용하여 회사 데이터베이스의 데이터로 데이터 마트를 채우는 방법을 설명했습니다. 이 기사에서는 비슷한 데이터 마트 디자인을 기반으로 큐브를 구축하는 방법을 알아봅니다.

큐브를 구축해야 하는 이유

필자의 첫 번째 기사에서는 회사 데이터베이스에서 데이터 마트라고 하는 구조로 데이터를 옮기는 것이 좋은 이유를 요약해서 살펴보았습니다. 데이터 마트를 쿼리하는 방법에는 확실히 장점이 있고, 일부 시나리오에서는 그것으로 충분하겠지만 이 데이터를 큐브라는 구조로 한 번 더 패키징할 경우 더욱 큰 장점을 얻을 수 있습니다. 사실 데이터 마트는 데이터가 큐브의 최종 목적지로 가는 길의 중간 정거장이므로 전체적인 솔루션에서 여전히 중요합니다.

데이터를 넣을 큐브를 구축해서 얻는 부가적인 이점은 관계형 데이터 마트에는 쉽게 저장할 수 없는 계산용 비즈니스 규칙을 중앙화할 수 있다는 것입니다.. 게다가 큐브는 그 구조 덕분에 연간 데이터를 비교하는 쿼리 또는 연초대비 영업 현황과 같은 누적 값을 작성하는 쿼리를 훨씬 더 쉽게 작성할 수 있습니다.

또한 큐브에 집계된 데이터를 투명하게 관리할 수 있습니다. 데이터베이스 관리자는 많은 양의 데이터가 포함된 관계형 데이터 마트에서 쿼리 성능을 개선하기 위해 요약 테이블을 만들어 트랜잭션 수준의 세부 정보가 필요 없는 쿼리를 위한 데이터를 준비하는 경우가 많습니다. SSAS는 요약 테이블의 논리적 등가인 집계를 만들고 이를 최신 상태로 유지합니다.

이 기사에서는 첫 번째 기사에서 소개한 시나리오를 계속 진행하겠습니다. 이러한 시나리오는 이 연재 기사를 통해 구축하는 BI 솔루션의 기본적인 분석 목표를 정의합니다. 솔루션은 Adventure Works에게 인터넷 판매와 대리점 판매 중 어느 판매 채널의 수익성이 더 높은지, 그리고 판매 추세상 특정 제품에 대한 수요가 증가하는지 감소하는지를 보여 줄 수 있어야 합니다. BI 솔루션을 위한 원본 데이터는 AdventureWorksDW2008 데이터베이스이며, 이 데이터베이스는 Derek의 기사에 설명된 차원 모델링과 ETL 원칙을 적용합니다.

Adventure Works에 대한 솔루션을 구축하는 데 사용되는 샘플 데이터베이스는 CodePlex(msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18407)에서 다운로드할 수 있습니다. 데이터 마트를 원본으로 사용할 수 있게 되면 Analysis Services 2008 데이터베이스를 구축할 준비가 된 것입니다.

Analysis Services 데이터베이스 준비

첫 번째 단계는 BIDS(Business Intelligence Development Studio)에서 프로젝트를 만드는 것입니다. Microsoft SQL Server 2008 프로그램 그룹에서 BIDS를 시작하고 파일 | 새로 만들기 | 프로젝트를 클릭합니다. 새 프로젝트 대화 상자에서 Analysis Services 프로젝트를 선택합니다. 이름 입력란에 ssas_TECHNET_AW2008을 입력하고 원할 경우 프로젝트 위치를 변경합니다. 확인을 클릭하여 프로젝트를 만듭니다.

이제 데이터 원본을 추가하여 데이터 마트에 대한 연결 문자열을 정의합니다. 솔루션 탐색기에서 데이터 원본을 마우스 오른쪽 단추로 클릭하고 새 데이터 원본을 클릭합니다. 데이터 원본 마법사에서 시작 페이지가 표시되는 경우 다음을 클릭합니다. 연결 정의 방법 선택 페이지에서 새로 만들기를 클릭하여 새 연결을 설정합니다. 연결 관리자에서 기본값은 SQL Server Native Client이며, 이 프로젝트에는 이 기본값을 사용하지만 OLE DB 또는 .NET 공급자를 사용하여 다른 유형의 데이터에 액세스할 수 있습니다.

연결을 정의하려면 서버 이름 입력란에 서버 이름을 입력하거나 드롭다운 목록에서 선택한 다음 데이터베이스 드롭다운 목록에서 AdventureWorksDW2008을 선택하고 확인을 클릭합니다. 데이터 원본 마법사로 돌아오면 다음을 클릭합니다. 가장 정보 페이지에서 서비스 계정 사용 옵션을 선택합니다. 서비스 계정은 SSAS 데이터베이스로 데이터를 로드할 때 원본에서 데이터를 읽는 데 사용되며 이를 위해 읽기 권한이 있어야 합니다. 다음을 클릭한 후 마침을 클릭하여 마법사를 완료합니다.

데이터 원본 뷰 만들기

다음으로, 차원과 큐브를 정의하는 데 사용하려는 데이터 원본에서 테이블(또는 뷰) 추상화로 DSV(데이터 원본 뷰)를 만듭니다. 기본 데이터 원본을 수정하지 않고 DSV를 변경할 수 있으며 이는 데이터 마트에 대한 읽기 권한만 있어 원본에서 변경 작업을 할 수 없는 경우 유용합니다. 솔루션 탐색기에서 데이터 원본 뷰를 마우스 오른쪽 단추로 클릭한 다음 새 데이터 원본 뷰를 클릭합니다.

필요한 경우 시작 페이지에서 다음을 클릭합니다. 데이터 원본 선택 페이지에서 프로젝트에 방금 추가한 데이터 원본을 선택하고 다음을 클릭합니다. 필요한 각 테이블 또는 뷰를 두 번 클릭하여 DSV에 개체를 추가합니다. 이 기사의 서두에 나온 BI 질문에 대한 답을 찾는 데 도움이 되는 DSV를 만들려면 DSV에 DimDate, DimProduct, DimProductCategory, DimProductSubcategory, FactInternetSales 및 FactResellerSales 테이블을 추가합니다. SSAS 사용 방법을 익히는 동안에는 이와 같은 단순한 DSV부터 시작하는 것이 좋습니다. BI 솔루션으로 다른 질문에 대한 답을 찾아야 하는 경우 나중에 테이블을 더 추가하면 됩니다. 테이블을 모두 추가했으면 데이터 원본 뷰 마법사에서 다음을 클릭하고 마침을 클릭합니다.

DSV 디자이너의 테이블 창에서 각 테이블을 선택하고 각 테이블의 FriendlyName 속성에서 Dim 및 Fact 접두사를 제거하여 테이블 이름을 간소화하는 것이 좋습니다. 그러면 차원 및 큐브를 만드는 데 사용되는 마법사에서 FriendlyName 속성의 값을 사용하여 개체에 이름을 할당합니다. 전체 DSV는 그림 1에 나와 있습니다.

Figure 1: Data Source View

그림 1: 데이터 원본 뷰

DSV에서 테이블의 속성을 변경하는 것 외에, 실제 원본에서 아직 정의되지 않은 경우 테이블 간의 논리적 관계 또는 논리적 기본 키를 정의할 수 있습니다. 데이터 계층에 물리적으로든 DSV에 논리적으로든 이러한 정의가 없으면 SSAS에서는 데이터를 올바르게 표시할 수 없습니다. 또한 명명된 계산을 추가하거나(뷰에 파생 열을 추가하는 것과 비슷함) 명명된 쿼리로 테이블 개체를 대체할 수 있습니다(뷰를 만드는 것과 비슷함).

SSAS에서 Date 차원을 구축하기 위한 준비 작업으로 두 개의 명명된 계산을 Date 테이블에 추가하여(Quarter 및 Month) 연도 열을 분기 및 월 열과 연결해야 합니다. 그렇지 않으면 요약된 데이터를 보려고 할 때 데이터가 월, 분기 및 연도별로 올바르게 롤업되지 않습니다. Quarter에 대해 명명된 계산을 추가하려면 디자이너나 테이블 창에서 Date 테이블을 마우스 오른쪽 단추로 클릭하고 새 명명된 계산을 클릭합니다. 열 이름 입력란에 Quarter를 입력합니다. 식 입력란에 다음 식을 입력합니다.

'Qtr ' + convert(char(1), CalendarQuarter) + ' ' + convert(char(4), CalendarYear)

확인을 클릭하고 위 단계를 반복하여 다음 식으로 Month에 대한 명명된 계산을 추가합니다.

left(EnglishMonthName, 3) + ' ' + convert(char(4), CalendarYear)

디자이너의 Date 테이블에서(그림 2 참조) 명명된 계산과 테이블의 열과 구분하기 위한 계산기 아이콘을 볼 수 있습니다. 테이블을 마우스 오른쪽 단추로 클릭하고 데이터 탐색을 클릭하면 명명된 계산을 추가함에 따른 영향을 검토할 수 있습니다. BIDS에 새 창이 열려 원본 테이블의 데이터를 보여 줍니다.

오른쪽 끝으로 스크롤하면 명명된 계산에 대한 값을 볼 수 있습니다. 계속 진행하여 차원을 구축하기 전에 항상 데이터 탐색 명령을 사용하여 명명된 계산이 원하는 대로 표시되는지 확인해야 합니다.

Analysis Services에서 차원 정의

DSV에 차원 테이블을 추가했으면 이제 SSAS 데이터베이스에서 차원을 만들 준비가 된 것입니다. 거듭 말하지만 차원은 사람, 장소, 물건과 같은 비즈니스 엔터티에 대한 정보를 저장합니다. 이 기사의 도입부에 언급한 BI 질문에 답할 수 있으려면 Date 및 Product에 대한 차원을 만들어야 합니다.
프로젝트에 차원을 추가하려면 솔루션 탐색기에서 차원 폴더를 마우스 오른쪽 단추로 클릭한 다음 새 차원을 선택하여 차원 마법사를 시작합니다. DSV에 DimDate 테이블이 포함되어 있으므로 생성 방법 선택 페이지에서 기본 선택 항목(기존 테이블 사용)을 그대로 둡니다. 날짜가 포함된 작은 트랜잭션 테이블을 기반으로 단순한 데이터베이스를 구축하는 경우에는 데이터 마트를 구축하기 않고 대신 이 페이지의 다른 옵션 중 하나를 사용하여 데이터 원본 또는 서버에 시간 테이블을 생성할 수 있습니다.

Figure 2 Date Table with Named Calculations

그림 2 명명된 계산이 있는 Date 테이블

어느 경우든 트랜잭션 테이블의 데이터에 대한 시작 날짜와 종료 날짜를 지정합니다. SSAS는 SSAS 데이터베이스에 유지 관리되는 차원을 채우는 데 사용할 데이터 원본에 실제 테이블을 만들고 채우거나, 그냥 SSAS 데이터베이스에서 단독으로 차원을 유지 관리할 수 있습니다.

데이터 원본에 대한 관계형 쿼리를 지원해야 할 경우 실제 테이블을 생성하는 방법을 선택할 수 있습니다. 다음를 클릭하여 계속합니다.

원본 정보 지정 페이지의 주 테이블 드롭다운 목록에서 Date를 선택합니다. 키 열은 DateKey입니다. 쿼리 결과를 반환할 때 SSAS에서 올바르게 데이터를 집계하거나 그룹화할 수 있도록 키 열은 테이블의 각 레코드를 고유하게 식별해야 합니다. 그런 다음 이름 열 드롭다운 목록에서 FullDateAlternateKey를 선택합니다. SSAS에서는 사용자에게 키 열을 표시하는 대신 이름 열을 사용하여 레이블로 표시합니다.

다음을 클릭합니다.

차원 특성 선택 페이지에서 차원에 포함할 특성을 선택합니다. 이는 계층을 정의하거나 추가 그룹 레이블을 정의할 때 사용합니다.

차원 테이블의 모든 특성을 포함할지 여부는 BI 솔루션에서 지원해야 하는 질문의 유형에 따라 결정됩니다. 저장소 공간을 불필요하게 낭비하지 않고 너무 많은 옵션으로 사용자에게 혼란을 주지 않으려면 SSAS의 작동을 최적화하는 데 필요한 만큼만 추가하십시오. 이 차원의 경우 Calendar Year, Quarter 및 Month를 선택합니다. 다음을 클릭하고 마침을 클릭합니다.

각 특성이 고유하게 식별될 수 있도록 KeyColumn 속성을 업데이트합니다. 이 속성을 키 열로 설정하면 Month가 월 이름별 사전순(기본값)이 아닌 숫자 순서에 따라 올바르게 정렬됩니다.

KeyColumn 속성을 업데이트하려면 왼쪽 특성 창에서 Month를 선택합니다. 속성 창에서 KeyColumns 속성을 클릭한 다음 줄임표 단추를 클릭합니다. 키 열 대화 상자에서 왼쪽 화살표를 클릭하여 현재 할당을 지운 다음 CalendarYear 및 MonthNumberOfYear를 두 번 클릭합니다. 이제 NameColumns 속성 상자에서 줄임표 단추를 클릭하여 이 특성에 레이블을 할당합니다. EnglishMonthName을 선택하고 확인을 클릭합니다.

위 단계를 반복하여 Quarter 특성의 KeyColumns 속성을 CalendarYear 및 CalendarQuarter로 설정하고 NameColumns 속성을 Quarter로 설정합니다.
이제 솔루션 탐색기에서 차원이 Date.dim으로 표시되고 차원 디자이너(그림 3 참조)가 BIDS의 기본 작업 영역에 표시됩니다.

Date Dimension

그림 3 디자이너에 표시된 Date 차원

왼쪽 특성 창에서 키 특성을 비롯한 연결된 특성과 함께 차원을 볼 수 있습니다. 나중에 특성을 더 추가하려는 경우 데이터 원본 뷰 창에서 특성 창으로 하나씩 끌어오면 됩니다. 차원 마법사는 새 차원을 시작할 때만 사용할 수 있지만 이후 차원 디자이너에서 필요한 변경 작업을 수행할 수 있습니다.

이제 차원 마법사에서 Product를 주 테이블로, EnglishProductName을 이름 열로 사용하여 Product 차원을 만듭니다. Product 차원은 눈송이 스키마이므로 관련 테이블 ProductSubcategory 및 ProductCategory를 포함할지 확인하기 위한 추가 페이지가 마법사에 포함됩니다.

다음으로 차원에 Color 및 Size 특성을 추가합니다. 마법사에서 눈송이 테이블에 대한 키 열이 자동으로 선택됩니다(Product Subcategory Key 및 Product Category Key). 이러한 특성에 대한 해당 이름 열을 추가해야 하지만 특성 속성을 수정할 수 있도록 먼저 마법사를 완료해야 합니다.

차원 디자이너가 표시되면 특성 창에서 Product Category Key를 선택합니다. 속성에서 Name 속성을 찾아 이름을 Category로 변경합니다. 속성 창에서 아래로 스크롤하여 NameColumn 속성을 찾습니다.

속성 입력란을 클릭하여 줄임표 단추가 표시되면 이 단추를 클릭하고 EnglishProductCategoryName을 선택한 다음 확인을 클릭합니다. 위 단계를 반복하여 Product Subcategory Key 이름을 Subcategory로 변경하고 EnglishProductSubcategoryName을 이름 열로 지정합니다. 마지막으로 Product Key 특성 이름을 Product로 변경합니다.

계층 추가

특성 창에서 차원 이름 Product 아래에 파란색 물결 모양 선이 표시됩니다. 줄 위로 커서를 올리면 "부모-자식 차원이 아닌 차원에 계층을 만드십시오."라는 경고 메시지가 표시됩니다. 이 메시지는 SSAS 데이터베이스를 올바르게 구축하는 데 도움을 제공하기 위해 SSAS 2008에 포함된 최선의 방법 경고 중의 한 예입니다. 문서 작업 영역에서 해당 탭을 클릭하거나 솔루션 탐색기에서 Date.dim을 두 번 클릭하여 Date 차원 디자이너로 돌아오면 같은 경고를 여기서도 볼 수 있습니다.

차원에 계층을 추가하는 것은 여러 가지 이유로, 특히 사용자 친화성과 최적화를 위한 최선의 방법으로 간주됩니다. 구체적으로 말하자면 계층은 사용자가 요약된 데이터에서 세부적인 데이터로 탐색해 나갈 수 있는 경로를 제공합니다. 또한 계층을 통해 SSAS에서 사용자 쿼리 전에 집계를 계산하여 저장할 수 있으므로 쿼리 성능이 개선됩니다.

예를 들어 사용자가 연도별로 대리점 판매를 보려는 경우, Date 차원의 계층이 키 특성(Date Key)에서 Calendar Year 특성으로의 롤업 경로를 정의한다면 SSAS는 처리 중에 연도별로 판매 데이터를 계산한 다음 영구 저장소에 결과를 저장할 수 있습니다. 이러한 집계 저장소 덕분에 쿼리 시 각 연도의 판매를 계산할 필요가 없으며, 이는 데이터를 관계형 데이터 마트에서 검색할 때와 SSAS와 같은 다차원 데이터베이스에서 검색할 때의 핵심적인 차이입니다.

Date 차원에 계층을 추가하려면 특성 창의 Calendar Year 특성을 차원 디자이너의 계층 창으로 끌어옵니다. 첫 번째 특성을 추가하면 방금 추가한 특성 아래에 빈 수준이 있는 계층 개체가 표시됩니다. Quarter 및 Month 특성을 빈 수준에 대한 공간으로 끌어와서 계층에 추가합니다. 다음으로 계층을 마우스 오른쪽 단추로 클릭한 후 이름 바꾸기를 클릭하고 Year를 입력하여 계층의 이름을 변경합니다.

계층을 추가했지만 Date 차원에 대해 여전히 경고가 표시됩니다. 커서를 줄 위로 올리면 "사용자 정의 계층에서 수준으로 사용되는 특성에 대해 표시되는 특성 계층을 사용하지 마십시오."라는 새 경고 메시지를 볼 수 있습니다. 이 메시지가 의미하는 것은 특성이 계층에 포함된 경우 사용자가 해당 특성을 그 자체로 볼 수 없도록 하라는 것입니다. 즉, 사용자는 계층 내에서 탐색할 때만 특성을 볼 수 있어야 합니다.

필자의 경험으로 보면 이 설정은 사용자와 관련하여 꼭 필요합니다. 이 경고를 받아들이려면 특성 창에서 Quarter를 선택한 다음 속성 창에서 AttributeHierarchyVisible 값을 False로 변경합니다.

특성 관계

계층 자체에도 또 다른 경고가 표시됩니다. 이 경우 계층에서 하나 이상의 수준 사이에 특성 관계가 누락되었기 때문에 성능 문제가 발생할 수 있음을 경고하는 메시지가 표시됩니다. 특성 관계는 SSAS에서 쿼리 성능과 집계 디자인을 최적화하고 차원에 필요한 저장소 크기를 줄이고 데이터베이스 처리 시간을 빠르게 하기는 데 사용됩니다.

차원 디자이너에서 특성 관계 탭을 클릭합니다. 이 탭은 Analysis Services 2008을 사용하는 경우에만 제공됩니다. 기본적으로 모든 특성은 키 특성인 Date Key에 직접 관련되어 있습니다. 관계를 재할당하여 디자인을 최적화하려면 Month 개체를 Quarter 개체로 끌어온 다음 Quarter 개체를 Year 개체로 끌어옵니다. 이제 디자이너에서 각 수준 사이의 관계가 왼쪽에서 오른쪽으로 다 대 일 관계로 올바르게 표시됩니다(그림 4 참조).

Attribute Relationships

그림 4 특성 관계

다음으로, 위에서부터 아래로 Category, Subcategory 및 Product를 포함하는 Categories라는 계층을 Product 차원에 추가합니다. 계층을 만들고 나면 수준 간의 특성 관계를 수정할 필요가 없음을 확인할 수 있습니다. 테이블 간의 외래 키 관계가 이미 DSV에 설정되어 있기 때문입니다. 원할 경우 AttributeHierarchyVisible 속성 값을 False로 설정할 수 있습니다.

이제 프로젝트에 계층과 특성 관계가 올바르게 정의된 두 개의 차원이 포함됩니다. 차원 디자인에 대해 더 배우다 보면 사용자 인터페이스에서 성능을 조정하고 특정 동작을 제어하기 위한 여러 가지 속성이 있음을 알게 됩니다.

또한 더 복잡한 BI 솔루션에는 차원도 더 많을 가능성이 높습니다. 그러나 현재 시점에서 여러분은 차원의 기본 사항을 파악했고, 큐브를 만들어서 유용한 솔루션을 구축하는 데 필요한 지식을 얻었습니다.

큐브 만들기

차원 마법사를 사용하여 차원 정의 프로세스를 시작하듯이 큐브 마법사를 사용하여 큐브 만들기를 시작할 수 있습니다. 솔루션 탐색기에서 큐브 폴더를 마우스 오른쪽 단추로 클릭하고 새 큐브를 클릭한 다음 시작 페이지가 표시되는 경우 다음을 클릭합니다. 생성 방법 선택 페이지에서 기본 옵션을 그대로 둡니다. 수동으로 또는 템플릿을 사용하여 만들려는 디자인이 있는 경우 다른 두 옵션을 사용할 수 있으며, 그러면 SSAS에서 해당 디자인을 기반으로 데이터 원본에 테이블을 생성합니다. 큐브를 탐색하려면 먼저 Integration Services를 사용하여 이 데이터 원본에 데이터를 입력해야 합니다. 다음을 클릭합니다.

측정값 그룹 테이블 선택 페이지에서 Internet Sales 및 Reseller Sales를 선택하고 다음을 클릭합니다. 측정값 그룹 테이블은 팩트 테이블과 같은 의미입니다. 그러면 선택한 측정값 그룹 테이블에서 발견된 모든 숫자 열이 마법사에 표시됩니다. 지금까지 해왔듯이 단순한 방식을 취하기 위해 페이지 맨 위의 측정값 확인란 선택을 취소하여 모든 측정값을 지운 후 각 그룹(Internet Sales 및 Reseller Sales)에서 측정값으로 Order Quantity, Total Product Cost 및 Sales Amount를 선택합니다.

또한 이 페이지에서 측정값 이름을 변경할 수 있습니다. 측정값 이름을 마우스 오른쪽 단추로 클릭하고 새 이름을 입력하면 됩니다. 단, 각 측정값 이름은 고유해야 합니다. 측정값 이름은 짧아야 하지만 의미를 알 수 없을 정도로 짧으면 안 됩니다. Internet Sales 그룹의 측정값 이름을 Internet Order Quantity, Internet Cost 및 Internet Sales로 변경합니다. 마찬가지로 Reseller Sales 측정값 이름을 Reseller Order Quantity, Reseller Cost 및 Reseller Sales로 변경합니다. 다음을 클릭합니다.

마법사의 기존 차원 선택 페이지에 이미 만든 차원이 표시됩니다. 다음을 클릭합니다. DSV에 아직 측정값 그룹 테이블로 참조되지 않았거나 기존 차원에 의해 참조되지 않은 테이블이 있는 경우 필요한 다른 차원을 신속히 추가할 수 있도록 새 차원 선택 페이지가 표시됩니다. 이 경우 Internet Sales와 Reseller Sales 테이블은 차원으로 만들 필요가 없으므로 지웁니다. 기술적으로 이러한 테이블은 측정값 그룹 테이블이지만 테이블에 판매 주문 번호가 있으면 판매 주문 번호별로 보고하거나 판매를 분석하도록 지원하기 위한 차원을 만들 수 있습니다.

다음을 클릭하고 큐브의 이름을 Sales로 변경한 다음 마침을 클릭합니다. 축하합니다.

이렇게 해서 간단한 큐브를 구축했습니다. 그림 5에서 볼 수 있듯이 큐브 디자이너에 측정값 그룹이 표시되고, 큐브에 추가된 차원은 왼쪽 창에, 원본 DSV는 오른쪽에 표시됩니다.

Cube Designer Showing Measure Groups and Dimensions

그림 5 측정값 그룹과 차원이 표시된 큐브 디자이너

큐브를 구축한 후에 수행할 첫 번째 단계는 큐브 브라우저에서 보다 쉽게 값을 볼 수 있도록 각 측정값의 FormatString 속성을 설정하는 것입니다. 가장 빠른 방법은 표로 측정값을 보는 것입니다. 큐브 디자이너의 도구 모음에서 왼쪽 5번째 단추를 클릭하여 트리 뷰를 표 뷰로 전환합니다. 표 뷰에서 Ctrl 키를 사용하여 여러 측정값을 한꺼번에 선택할 수 있습니다. Internet Order Quantity와 Reseller Order Quantity를 선택합니다. 속성 창의 FormatString 드롭다운 목록에서 Standard를 선택합니다. 그런 다음 FormatString 속성을 Currency로 설정할 나머지 측정값을 모두 선택합니다.

계산 추가

SSAS의 강력한 기능은 MDX(다차원 식 언어)를 사용하여 계산을 추가하는 기능입니다. Excel에서 공식을 작성할 수 있다면 간단한 MDX 식을 사용하여 큐브에서 계산을 만들 수 있습니다. 더 복잡한 식을 사용하려면 공부와 많은 연습을 통해 MDX에 대해 더 익혀야 합니다.

이 솔루션의 디자인 목표 중 하나는 판매 채널별 수익성을 측정하는 것임을 상기하십시오. 이제 큐브에 수익성을 계산하는 데 필요한 측정값인 Internet Cost, Internet Sales, Reseller Cost 및 Reseller Sales가 포함되어 있습니다. 판매와 비용의 차이가 총이익이지만 이 계산은 절대 달러를 제공하며, 이는 채널 간 비교에는 쓸모가 없습니다. 총이익 외에 총이익을 판매액으로 나누어 총이익률을 계산해야 합니다.

큐브 디자이너에서 계산 탭(왼쪽에서 세 번째 탭)을 클릭합니다. 그런 다음 도구 모음에서 새 계산 멤버 단추(왼쪽에서 5번째 단추)를 클릭합니다. 이름 입력란에 [Internet Gross Margin]을 입력합니다.

이름에 공백이 포함되는 경우 대괄호를 사용해야 합니다. 식 입력란에 [Internet Sales] - [Internet Cost]을 입력한 다음 형식 문자열 드롭다운 목록에서 "Currency"를 선택합니다. 위 단계를 반복하여 그림 6에 나온 계산을 추가합니다.

이름 형식 문자열
[Reseller Gross Margin] [Reseller Sales] - [Reseller Cost] "Currency"
[Internet Gross Margin Pct] [Internet Gross Margin] / [Internet Sales] "Percent"
[Reseller Gross Margin Pct] [Reseller Gross Margin] / [Reseller Sales] "Percent"

그림 6 큐브에 계산 추가

BIDS에서 Analysis Services 데이터베이스 배포

지금까지 서버에 SSAS 데이터베이스를 만드는 데 필요한 개체를 구축했지만 데이터베이스 자체는 아직 존재하지 않습니다. BIDS에서 디자인 작업을 수행하면 서버에 배포해야 하는 XML 파일이 생성됩니다.

이러한 파일을 배포하고 나면 데이터베이스를 처리할 수 있으며, 이로써 지정된 데이터 원본에 대한 쿼리를 실행하여 XML 파일에 정의된 저장소 구조를 구축하고 이러한 구조를 채우는 데 필요한 명령이 실행됩니다.

BIDS 내에서 이러한 작업은 모두 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 배포를 클릭하여 시작합니다. 배포 진행률 창이 열리고, 수행되는 각 단계와 해당 단계의 성공 또는 실패 여부가 이 창에 표시됩니다.

프로젝트를 배포한 후에도 디자이너에서 변경 작업을 수행할 수 있습니다. 앞서 설명한 대로 프로젝트를 다시 배포하여 변경 내용을 서버로 보내고 처리 작업을 시작하면 됩니다. 데이터베이스를 덮어쓴다는 메시지가 표시될 경우 여러분 외에는 데이터베이스를 변경하는 사람이 없다고 확신한다면 예를 클릭합니다.

변경하더라도 배포 후 데이터베이스를 처리하기 위한 명령이 트리거되지 않는 경우가 가끔 있습니다. 이 경우 변경한 차원 또는 큐브를 마우스 오른쪽 단추로 클릭하고 처리, 실행을 차례로 클릭하면 됩니다. 전체 처리 옵션을 사용하여 차원을 처리하는 경우(차원의 구조를 대폭 변경한 경우 이 옵션이 필요함) 큐브도 처리해야 할 수 있습니다.

BIDS에서 큐브 탐색

솔루션을 성공적으로 배포 및 처리했다면 각 개발 단계에서 사용자 관점으로 진행 상태를 검토할 수 있습니다. 큐브 디자이너에서 브라우저 탭을 클릭합니다. 왼쪽 창에 SSAS 데이터베이스의 개체가 메타데이터 트리에 표시됩니다(그림 7 참조). 트리의 최상위 노드가 큐브입니다. 측정값 노드와 포함된 폴더를 확장하여 사용 가능한 모든 측정값을 보고, Order Date 및 Product 노드를 확장하여 이러한 차원의 특성을 볼 수 있습니다.

Sales cube

그림 7 Sales 큐브 메타데이터 트리

Date 차원만 만들었는데 큐브에 Due Date, Order Date 및 Ship Date가 포함된 이유가 궁금할 것입니다. 이러한 큐브 차원들은 동일한 차원의 서로 다른 논리적 버전을 나타내므로 롤플레잉 차원이라고 합니다.

팩트 테이블에는 Date 차원에서 주문, 운송 및 기한 이벤트를 각각 추적하는 데 사용하는 하나의 테이블과 관련된 세 가지 외래 키 열이 포함되므로 Date 차원을 포함할 경우 이러한 차원들이 자동으로 큐브에 표시됩니다. 롤플레잉 날짜가 분석에 필요 없는 경우 디자이너의 큐브 구조 페이지에서 필요 없는 항목을 삭제할 수 있습니다.

큐브 데이터를 보려면 메타데이터 트리에서 디자이너 가운데의 표로 개체를 끌어옵니다. 먼저 Internet Sales를 ‘합계 또는 세부 정보 필드를 여기로 끌어옵니다.’ 레이블이 표시된 영역으로 끌어옵니다.

그런 다음 이 프로세스를 반복하여 Internet Gross Margin Pct, Reseller Sales 및 Reseller Gross Margin Pct를 표에 추가합니다. 이제 이 간단한 쿼리의 결과가 큐브 브라우저에 표시되면(그림 8 참조) Internet Sales가 Reseller Sales보다 수익성이 훨씬 더 높다는 것을 알 수 있습니다.

Query result

그림 8 큐브 브라우저의 쿼리 결과

행, 열 또는 필터(통칭하여 축이라고 함)에 대한 표 섹션으로 특성을 끌어오거나 특성과 측정값을 표 밖으로 끌어내서 결과를 계속 살펴볼 수 있습니다. BI 사용자들이 조각내고 돌리기(slice and dice)라고 하는, 축에 개체를 추가하여 쿼리를 구체화하는 프로세스는 코드를 작성하지 않고도 매우 빠르게 데이터를 쿼리하는 방법입니다. 예를 들어 연도별로 조각내려면 Order Date.Year를 ‘행 필드를 여기로 끌어옵니다.’ 레이블이 표시된 섹션으로 끌어옵니다.

Order Date.Year는 계층이므로(피라미드 모양의 아이콘을 통해 알 수 있음) 하나 이상의 연도를 확장하여 분기별 조각으로 드릴다운할 수 있습니다. 비슷한 방법으로 Categories를 측정값 위의 열 축으로 끌어와서 돌려볼 수 있습니다.

행 또는 열에 개체를 배치하고 나면 캡션의 화살표를 클릭하여 항목 목록을 필터링할 수 있습니다. 표에서 구성 요소를 제거하려면 범주 캡션의 화살표를 클릭하고 구성 요소 확인란의 선택을 취소한 다음 확인을 클릭합니다. 다음으로, 뷰를 간소화하기 위해 Internet Sales 및 Reseller Sales를 표 밖으로 끌어냅니다. 이제 인터넷과 대리점 채널의 수익성을 연도별, 분기별 및 제품 범주별로 쉽게 비교할 수 있습니다(그림 9 참조).

Profitability

그림 9 판매 채널의 연도, 분기 및 범주별 수익성

사용자와 큐브 공유

기본적으로 큐브에는 서버 관리자만 액세스할 수 있습니다. 그러나 분석 서버에 큐브를 배포하고 나면 사용자에게 액세스 권한을 부여하도록 설정해서 사용자가 선호하는 도구로 큐브를 탐색하도록 할 수 있습니다. Microsoft Excel 2007은 대화형 탐색을 위해 많이 사용되는 프로그램이지만 Reporting Services를 사용하여 큐브 데이터를 기반으로 보고서를 배포할 수도 있습니다. 이에 대해서는 이후 기사에서 살펴보겠습니다.

새로운 기술 적용

샘플 AdventureWorks 데이터를 사용하여 작은 데이터베이스를 구축했으므로 이제 간단한 큐브를 구축하여 지금까지 배운 내용을 여러분 자신의 데이터에 적용해야 합니다. 디자인이 단순하고 데이터 집합의 크기가 비교적 작다면(예를 들어 포함된 행 수가 몇백만 개 정도인 경우) 데이터 마트를 구축하고 유지 관리하는 수고를 할 필요 없이 데이터베이스를 구축하면 됩니다. 데이터를 별모양 스카마에 최대한 가깝게 구조화하는 명명된 쿼리를 사용하여 원본을 쿼리할 데이터 원본 뷰를 설정하십시오. 데이터 원본에 새 데이터가 생기면 SSAS 데이터베이스 전체를 처리하여 데이터 원본과 같은 최신 상태로 유지할 수 있습니다.

이 기사에서는 간단한 큐브를 구축하기 위해 알아야 할 매우 기본적인 사항만 설명하므로, 큐브에 넣을 데이터가 많은 경우에는 온라인 설명서 및 다른 리소스에서 SSAS에 대해 더 읽어야 합니다. 예를 들어 이 기사의 도입부에서 필자는 SSAS의 한 가지 장점으로 집계 관리를 언급했지만 이 주제에 대한 더 자세한 설명은 이번 기사의 범위를 벗어납니다.

필자의 친구로 오래 전에 필자와 함께 비즈니스 인텔리전스 분야로 뛰어든 Scott Cameron이 최근 출간한 "Microsoft SQL Server 2008 Analysis Services Step by Step"(Microsoft Press, 2009)이라는 책을 읽으면 집계 및 기타 고급 항목에 대해 더 자세히 알아볼 수 있습니다. 이제 첫 큐브를 구축했으니 계속 기술을 쌓아 더 고급 큐브를 개발하고 Microsoft BI 플랫폼을 최대한 활용해 보시기 바랍니다.

Stacia Misner는 BI 컨설턴트, 교육자 및 저자이며 Data Inspirations의 설립자이자 회장이기도 합니다. IT 업계에서 25년 동안 일했으며 이 중 9년은 Microsoft BI 스택을 집중적으로 다루었습니다. Misner는 BI 및 SQL Server에 대한 여러 권의 책을 저술했습니다. 최근에 저술한 “Microsoft SQL Server 2008 Reporting Services Step by Step”(Microsoft Press, 2009)은 올해 초에 출간되었습니다. 문의 사항이 있으면 smisner@datainspirations.com으로 연락하시기 바랍니다.

 

추가 리소스

Analysis Services 개발(온라인 설명서)
msdn.microsoft.com/library/bb500183.aspx

Analysis Services 보안(온라인 설명서)
msdn.microsoft.com/library/ms175386.aspx

Analysis Services 2008 비디오(온라인 설명서)
msdn.microsoft.com/library/dd299422.aspx