SSAS Backup자동화 하기

   

-      Version : SQL Server 2005, 2008, 2008R2, 2012

   

SQL Server Analysis Services는 백업을 자동화할 수 있는 방법은 무엇이 있을까?

아쉽게도 SQL Server의 유지관리계획에는 Analysis Services에 대한 백업기능은 제공하지 않는다.

또한 분석 서비스의 백업 기능에서도 자동 백업 기능은 없다. 스크립트를이용하여 자동으로 백업 받는 트릭을 사용해 보자.

   

   

SSMS를 실행 하여 분석서버에 접속 한다. 백업하려는 데이터베이스를 선택하고 마우스 오른쪽을 클릭한다. [백업]을 선택 한다.

      

   

   

백업 속성이 나타나면 필요한 설정을 한다. 기존 파일을 덮어 쓸 것인지, 백업 파일을 암호화 할 것인지 등을 설정.

   

   

백업 창의 상단에 [스크립트]를클릭하여 [새 쿼리창 동작 스크립팅]을 선택 한다.

   

   

다음과 같이 SSMS의 쿼리창에SSAS의 백업 스크립트 구문이 출력되는 것을 확인 할 수 있다.

   

   

SSMS에서 [데이터베이스엔진]으로 접속하여 SQL Server Agent에서 작업을추가한다.

   

   

작업 단계에서 아래 그림처럼 유형을 [SQL Server AnalysisServices 명령]을 선택 한다.

명령에는 위에서 생성한 스크립트를 복사해서 붙여 넣는다.

   

   

나머지 일정과 오류 처리 등인 기존의 데이터베이스 백업과 동일 하다.

   

   

현업에서는 큐브의 크기가 매우 커서 실제 백업 및 유지 관리를 어떻게 하는지 모르지만 작은 규모의 경우에는 위의방법을 사용하면 주기적으로 백업을 할 수 있어 관리에 편리할 듯 하다.

   

2013-02-01 / 강성욱 / http://sqlmvp.kr

'SQL Server > SSAS 강좌' 카테고리의 다른 글

27 - SSAS - MDX 스크립트  (0) 2015.07.22
26 - SSAS - MDX 쿼리  (0) 2015.07.15
25 - SSAS - MDX 활용  (0) 2015.07.15
24 - SSAS - 집계 최적화  (0) 2015.07.15
23 - SSAS - 사용자 계층 설계  (0) 2015.07.15

MDX 스크립트

   

MDX 스크립트는 큐브를 통하여 다양한 관점의 다양한 수준에서 데이터 분석하기 위하여 분석 요구 조건에 따라 복잡한 규칙을계산 멤버나 별도의 추가적인 계산을 위한 MDX 표현식이나 구문들의 모음 입니다.

큐브의집계 작업 지정, 계산 멤버, 명명된 집합의 정의 등이 포함됩니다. 또한 큐브의 특정 부분에 대한 값 할당 처리 스크립트를 통해 특정한 셀의 값을 덮어 쓰거나색상과 같은 셀의 속성을 변경 할 수도 있습니다.

   

[CALCUATE]

CALCUATE는 큐브를 처리하는 시점에서 하위 수준에서 상위 수준으로 집계 작업을 수행할지 여부를 결정 합니다. 큐브 처리 작업시 집계 설계에 따라 집계한 데이터를 큐브에 저장합니다. 그러나 CALCUATE를 생략하면 큐브처리를 하더라도 데이터를 상위 수준으로 집계하지 않고 데이터를 큐브에 초기 적재한상태로 남아 있습니다.

MDX 스크립트는 선언문적인 성격을 가져 MDX 스크립트 내에 정의된 모든 계산관련 로직이 큐브처리 시점에서 모두 계산되는 것이 아니라 조회를 하는 시점에 계산 됩니다. 즉, 계산 멤버나 값 할당 등의 작업이 모두 실시간으로 처리 됩니다.

   

[계산 순서 제어하기]

큐브에계산 멤버를 추가하면 계산 멤버의 순서대로 MDX 스크립트에 정의가 추가 됩니다. 이때 계산 멤버를 서로 다른 2개 이상의 차원에 정의하면 계산 멤버들이서로 교차하는 큐브 내의 셀에 대해서 어느 계산 멤버의 정의를 적용해야 하는가 하는 문제가 발생 합니다.

셀의계산 순서는 MDX 스크립트에 기술된 계산 멤버의 순서와 동일 합니다.계산순서를 바꾸려면 계산 멤버의 정의 위치를 바꾸면 됩니다.

CREATE MEMBER [ADVENTURE WORKS].[PRODUCT].[CATEGORY].[ALL PRODUCTS].[BIKES + CLOTHING]

AS [PRODUCT].[BIKES] + [PRODUCT].[CLOTHING];

   

CREATE MEMBER [ADVENTURE WORKS].[MEASURES].[AVG RESELLER SALES]

AS [MEASURES].[RESELLER SALES AMOUNT]/[MEASURES].[RESELLER ORDER QUANTITY],

FORMAT_STRING="$#,#";

   

   

SELECT

    {[RESELLER SALES AMOUNT], [RESELLER ORDER QUANTITY],

    [AVG RESELLER SALES]}ON COLUMNS,

    {[PRODUCT].[CATEGORY].MEMBERS} ON ROWS

FROM

[ADVENTURE WORKS]

  

 

 

   

위와같이 두 개의 계산 멤버가 정의되어 있으면 먼저 Product 차원의[Bikes + Clothing]를 계산한 후 측정값 차원의 [Avg Reseller Sales]를계산합니다. 따라서 두 계산 멤버의 정의가 중첩되는 위치의 셀들은 최종적으로 [Bikes]와 [Clothing]의 더한 값을 이용하여 평균을 구한 [Avg Reseller Sales]의 값을 가지게 됩니다.

만약 [Avg Seller Sales]를 먼저 계산한 후 [Bikes +Clothing]를 계산하도록 원하면 간단히 두 계산 멤버의 정의 순서를 변경해 주면 됩니다.

   

[값할당]

큐브의특정 부분의 값을 집계된 값이 아닌 다른 비즈니스 로직에 따라 덮어써야 하는 경우가 있을때(CALCULATE 명령을통해 큐브의 집계가 일어난 후에 다른 적절한 값으로 덮어써야 할 경우) 사용합니다.

예를들어 Bikes 제품 카테고리에 속하는 모든 멤버들의 모든 측정값을NULL로 덮어쓸 수 있습니다.

SCOPE([MEASURES].MEMBERS);

DESCENDANTS([PRODUCT].[PRODUCT CATEGORIES].[CATEGORY].[BIKES]) = NULL;

END SCOPE;

   

MDX 스크립트에 위의 구문을 추가하면 Bikes 관련 제품들의 값이 보이지 않습니다. 주의할 점은 SCOPE이 적용된 상위 레벨의 집계 값에서도 해당값들이 제외된다는 것입니다. 즉 [Bikes]의 부모 멤버인 [All Products]는 [Bikes]의 값이 제외된 집계값으로보입니다.

만약 [All Products]가 [Bikes]의 값도 포함된 원래의 집계값을보고자 한다면 다음과 같이 FREEZE를 활용할 수 있습니다.

SCOPE([MEASURES].MEMBERS);

FREEZE;

   

DESCENDANTS([PRODUCT].[PRODUCT CATEGORIES].[CATEGORY].[BIKES]) = NULL;

END SCOPE;

   

FREEZE에 의해서 [BIKES]의 상위 수준에 속하는 멤버의 값은 원래의 집계 값을반환 합니다.

   

2012-08-06/ 강성욱 / http://sqlmvp.kr

'SQL Server > SSAS 강좌' 카테고리의 다른 글

SSAS Backup자동화 하기  (0) 2015.07.22
26 - SSAS - MDX 쿼리  (0) 2015.07.15
25 - SSAS - MDX 활용  (0) 2015.07.15
24 - SSAS - 집계 최적화  (0) 2015.07.15
23 - SSAS - 사용자 계층 설계  (0) 2015.07.15

MDX 쿼리

 

MDX 쿼리의 기본 문법 및 사용 법을 알아 보도록 하겠습니다.

 

[MDX 쿼리 기본]

MDX의 쿼리 기본 구조는 다음과 같습니다.

SELECT [<축지정>], [<축지정>]..

FROM [<큐브지정>]

WHERE [슬라이서지정]

 

<축 지정>은 같은 차원성을 가지는 튜플들의 모임인 집합으로 기술하여 128개 까지 지정이 가능 합니다. 축은 AXIS(0), AXIS(1)등과 같이 기술하며 COLUMNS, ROWS와 같은 별칭을 쓰기도 합니다. 이때 축을 지정하는 순서는 상관 없으나 높은 번호의 축을 지정하는 경우 그보다 낮은 번호의 축을 지정해야 합니다.

 

Sales 큐브에서 데이터를 읽어오는데 축정의를 하지 않아 이때에는 모든 차원의 기본 멤버들로 구성되는 튜플에 해당하는 값을 반환 합니다. 현재 실습중인 [Adventure Works]큐브의 Measures 차원의 기본 멤버는 [Reseller Sales Amount]입니다.

SELECT FROM [ADVENTURE WORKS]

 

 

 

Measure 차원은 [Sales Amount]에 해당하고 나머지 차원은 기본 멤버에 해당하는 튜플의 값을 반환 합니다.

SELECT

    {[SALES AMOUNT]} ON COLUMNS FROM [ADVENTURE WORKS]

 

 

 

제품 카테고리를 구성하는 각각의 멤버들에 대하여 Measures 차원은 [Sales Amount]에 해당하고 나머지 차원은 기본 멤버에 해당하는 튜플의 값을 반환 합니다.

SELECT

    {[SALES AMOUNT]} ON COLUMNS,

    {[PRODUCT].[CATEGORY].[CATEGORY].MEMBERS} ON ROWS

FROM [ADVENTURE WORKS]

 

 

 

제품 카테고리를 구성하는 각각의 멤버들에 대하여 Measures 차원은 [Sales Amount], Sales Channel 차원은 [Internet]에 해당하고 나머지 차원은 기본 멤버에 해당하는 튜플의 값을 반환 합니다. WHERE 절을 통하여 축에서 지정하지 않는 차원에 대하여 기본 멤버 대신 다른 멤버를 참조하도록 할 수 있습니다.

SELECT

    {[SALES AMOUNT]} ON COLUMNS,

    {[PRODUCT].[CATEGORY].[CATEGORY].MEMBERS} ON ROWS

FROM [ADVENTURE WORKS]

WHERE ([SALES CHANNEL].[SALES CHANNEL].&[INTERNET])

 

 

 

ROW라는 높은 번호의 축을 지정하려면 반드시 COLUMNS라고 하는 더 낮은 번호의 축을 지정해 주저야 합니다. 그렇지 않으면 오류가 발생 합니다.

SELECT

    {[SALES AMOUNT]} ON ROWS

FROM [ADVENTURE WORKS]

 

 

 

[MDX 쿼리에서의 계산 멤버 활용]

빈번하게 사용하는 계산 멤버는 서버의 큐브에 미리 정의해 놓을 수 있습니다. 그러나 필요한 경우에만 WITH 키워드를 사용하여 쿼리를 실행하는 시점에 런-타임으로 정의해서 활용할 수도 있습니다.

WITH MEMBER MEASURES.[%OFTOTAL]

AS [SALES AMOUNT] / ([SALES AMOUNT], [ALL PRODUCTS]), FORMAT_STRING = 'PERCENT'

SELECT {[SALES AMOUNT], [%OFTOTAL]} ON COLUMNS,

{[PRODUCT].[CATEGORY].[CATEGORY].MEMBERS} ON ROWS

FROM [ADVENTURE WORKS]

 

제품 카테고리의 각 멤버들에 대하여 전체 제품 대비 매출 기여도를 확인 할 수 있습니다.

 

 

[MDX 쿼리에서의 명명된 집합 활용]

제품 서브 카테고리의 각 멤버들을 대상으로 매출액 상위 10에 해당하는 멤버들의 집합을 런-타임으로 생성하여 처리 합니다.

WITH SET TOP10OFSUBCATEGORY

    AS TOPCOUNT([PRODUCT].[SUBCATEGORY].[SUBCATEGORY].MEMBERS,

        10, [SALES AMOUNT])

SELECT {[SALES AMOUNT]} ON COLUMNS,

    TOP10OFSUBCATEGORY ON ROWS

FROM [ADVENTURE WORKS]

 

 

SELECT 문에서 WITH 사용시 해당 쿼리를 실행하는 시점에서 런-타임으로 실행 후 바로 소멸 됩니다. 만약 현재 세션에서 반복적으로 사용하고자 한다면 CREATE MEMBER나 CREATE SET 으로 먼저 한번 정의해 주면 이어지는 추가 SELECT 쿼리문에서 반복 참조가 가능 합니다.

 

 

[WHERE 절에서의 집합 활용]

판매 채널의 멤버들에 대하여 Bikes와 Clothing의 합에 해당하는 매출액과 세금액을 반환 합니다.

SELECT {[SALES AMOUNT], [TAX AMOUNT]} ON COLUMNS,

{[SALES CHANNEL].[SALES CHANNEL].MEMBERS} ON ROWS

FROM [ADVENTURE WORKS]

WHERE {[BIKES],[CLOTHING]}

 

 

-- SSAS 2000 방법.

WITH MEMBER [PRODUCT].[CATEGORY].[BIKES+CLOTHING] AS AGGREGATE({[BIKES],[CLOTHING]})

SELECT {[SALES AMOUNT], [TAX AMOUNT]} ON COLUMNS,

{[SALES CHANNEL].[SALES CHANNEL].MEMBERS} ON ROWS

FROM [ADVENTURE WORKS]

WHERE {[BIKES],[CLOTHING]}

 

 

[서브 쿼리 활용]

SELECT 쿼리의 FROM절에 큐브 뿐만 아니라 서브쿼리에 의해 생성되는 서브큐브를 사용할 수 있습니다. 서브쿼리를 먼저 실행하여 Bikes와 Clothing만을 포함하는 가상의 서브큐브를 만들어 처리 하므로 [Bikes]+[clothing]에 해당하는 결과를 얻을 수 있습니다.

SELECT {[SALES AMOUNT], [TAX AMOUNT]} ON COLUMNS,

{[SALES CHANNEL].[SALES CHANNEL].MEMBERS} ON ROWS

FROM (SELECT {[BIKES],[CLOTHING]}ON COLUMNS FROM [ADVENTURE WORKS])

 

 

 

[CrossJoin 활용]

하나의 축에 2개 이상의 차원을 중첩시키고자 하는 경우 유용합니다. 판매 채널별로 제품 카테고리별 매출액과 세금액을 반환 합니다.

SELECT {[SALES AMOUNT], [TAX AMOUNT]} ON COLUMNS,

    CROSSJOIN ([SALES CHANNEL].[SALES CHANNEL].MEMBERS,

        [PRODUCT].[CATEGORY].[CATEGORY].MEMBERS) ON ROWS

FROM [ADVENTURE WORKS]

 

 

 

[Generate 활용]

멤버 집합에 대하여 반복 처리를 하는 경우에 유용합니다. 판매 채널의 각 채널별로 손익이 상위 3위 안에 드는 제품 서브 카테고리들에 대한 매출 금액과 세금 금액을 반환 합니다.

SELECT {[SALES AMOUNT], [TAX AMOUNT]} ON COLUMNS,

    GENERATE ([SALES CHANNEL].[SALES CHANNEL].[SALES CHANNEL].MEMBERS,

    CROSSJOIN ({[SALES CHANNEL].[SALES CHANNEL].CURRENTMEMBER},

        TOPCOUNT([PRODUCT].[SUBCATEGORY].[SUBCATEGORY].MEMBERS, 3, [GROSS PROFIT]

                )

             )

             )ON ROWS

FROM [ADVENTURE WORKS]

 

 

 

계산 멤버는 주로 측정값 차원에 정의하여 사용 합니다. 하지만 일반 차원에서도 자유롭게 정의하여 사용할 수 있습니다. 또한 차원 계층구조 내에서 어떤 멤버 아래에 위치할 지도 지정 할 수 있습니다.

측정값이 아닌 일반 차원에 계산 멤버를 지정하는 경우 합계, 평균, 최대, 최소 등과 같이 어떤 대상 집합에 대한 계산을 하는 경우가 많습니다.

합계나 평균을 구하는 경우 계산의 대상을 먼저 결정해야 합니다. MDX계산에서느 이러한 계산 대상을 서브 쿼리를 통해 집합을 생성한 후 해당 집합에 대하여 계산을 수행 합니다.

 

[평균 구하기]

 

AVG([PRODUCT].[CATOGORY].[CATEGORY].MEMBERS,[SALES AMOUNT])

 

 

[시계열 계산]

 

SUM(YTD([DATE].[CALENDAR].CURRENTMEMBER),[SALES AMOUNT])

 

 

2012-08-02 / 강성욱 / http://SQLMVP.KR

'SQL Server > SSAS 강좌' 카테고리의 다른 글

SSAS Backup자동화 하기  (0) 2015.07.22
27 - SSAS - MDX 스크립트  (0) 2015.07.22
25 - SSAS - MDX 활용  (0) 2015.07.15
24 - SSAS - 집계 최적화  (0) 2015.07.15
23 - SSAS - 사용자 계층 설계  (0) 2015.07.15

MDX 활용

 

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

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

 

MDX – Multidimensional Expressions는 관계형 데이터베이스의 SQL에 해당.

 

다차원 큐브 공간은 해당 큐브를 구성하는 차원들에 의하여 구조가 결정됩니다. 큐브를 구성하는 차원들의 교차점에는 셀이라고 하는 단위 공간이 위치하며 분석의 대상이 되는 측정값이 들어 있습니다.

큐브 공간 임의의 위치에 있는 측정값들을 참조하려면 우선 해당 셀들의 주소를 알아야 합니다. 튜블(Tuple)은 다차원 큐브 공간의 주소를 나타내는 좌표를 의합니다.

 

기하학의 경우 2차원 공간에서는 (X, Y)와 같은 형태로 3차원의 공간은 (X, Y, Z)와 같은 형태로 좌표를 나타냅니다. N차원의 큐브로 확장이 가능하며 기하학에서의 좌표와 다른점은 기하학에서는 X, Y의 순서에 따라 서로 다른 위치를 참조 하지만 튜블의 경우에는 순서에 상관없이 모두 동일한 좌표를 가리킵니다. 이는 어떠한 멤버를 지정할 때 그 멤버가 속한 차원까지 함께 결정이 되기 때문입니다.

 

[특정 멤버의 전체 대비 비율 계산]

가장 많이 사용하는 계산중 하나가 전체 대비 비율계산입니다. 제품 전체 판매액 대비 특정 제품이 차지하는 판매 기여도를 보고 싶을 때 튜플을 이용하여면 이러한 요구를 쉽게 해결할 수 있습니다.

 

예를들어 양주(Alcohol)가 제품 전체에서 차지하는 판매 기여도를 구해 보겠습니다. 요구사항은 (양주 판매액) / (제품 전체 판매액)이 됩니다. 이제 큐브내에서 분자, 분모에 해당하는 좌표를 찾아서 참조하면 됩니다. 구체적으로 표현하면 (판매액, 양주) / (판매액, 제품 전체)가 됩니다. 튜플들을 각 차원 멤버들을 이용하여 기술하면 다음과 같이 정의 됩니다.

([Sales Amount], [Alcohol]) / ([Sales Amount], [AllProducts])

 

큐브 또는 차원에서 멤버 자신만으로 유일성을 보장하지 못하면 최소한 유일성을 보장하는 조상 멤버들을 포함하여 기술해야 하며 필요한 경우 차원(또는 계층 구조)까지 포함하여 기술 하기도 합니다.

([Measures].[Sales Amount], [Product].[[ProductCategories].[Alcohol]) / ([Sales Amount], [AllProducts])

 

 

[임의 멤버의 전체 대비 비율 계산]

전체 대비 비율 계산은 항상 제품 전체에 대한 품목 제품군의 매출기여도를 계산합니다. 왜냐하면 분자와 분모 모두 특정 셀만을 참조하도록 명시되었기 때문입니다. 그렇지만 많은 경우 제품 전체에 대하여 현재 참조하고 있는 제품 멤버들의 매출 기여도를 보고 싶어 합니다. 이런 경우 분자가 자동으로 현재 제품 멤버를 참조하도록 변경되어야 합니다.

(판매액, 현재 제품 멤버) / (판매액, 제품 전체의 판매액)

([Sales Amount], [Product].[Product Categories], CurrentMember) / (Sales Amount], [All Products])

 

튜플에서 기술하지 않는 차원은 해당 차원의 현재 멤버를 자동으로 참조 합니다. 따라서 다음과 같이 단순화 시킬 수 있습니다.

([Sales Amount]) / ([Sales Amount], [All Products])

 

두개 이상의 차원으로 확장하여 쿼리를 작성할 수도 있습니다.

([Sales Amount]) / ([Sales Amount], [All Products], [All Customers])

 

 

[부모 대비 비율 계산]

현재 보고 있는 제품 멤버의 부모 멤버에 대한 매출 기여도 입니다. (매출액, 현재 제품 멤버) / (매출액, 현재 제품 멤버의 부모 멤버)가 됩니다.

([Sales Amount], [Product].[Product Categories].CurrentMember) /

([Sales Amount], [Product].[Product Categories].CurrentMember.Parent)

위의 쿼리를 단순화 시킬 수 있습니다.

([Sales Amount]) / ([Sales Amount], [Product].[Product Categories].Parent)

 

현재 멤버가 [All Product]인 경우는 부모 멤버가 존재하지 않기 때문에 분모가 NULL이 됩니다. 이 때 NULL은 0으로 치환 됨으로 [1.#NF]와 같은 오류 값이 반환됩니다. 따라서 필요에 따라 다음처럼 조건부 처리를 해야 합니다.

IIF(IsEmpty(([Sales Amount], [Product].[Product Categories].Parent)), 1, ([Sales Amount]) /

([Sales Amount], [Product].[Product Categories].Parent))

 

집계 최적화

 

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

이번 시간에는 [집계 최적화]에 대해서 알아 보도록 하겠습니다.

 

집계 디자인 마법사는 큐브의 각 부분에 대한 조회가 균일하다는 전제하게 유용합니다. 개발 내지는 운영 초기 단계에서는 사용자의 큐브에 대한 쿼리 패턴을 알지 못하기 때문에 이러한 접근이 유용 합니다. 물론 필요시 특성들의 AggregationUsage 속성 설정과 특성들의 특성관계, 사용자 계층 구성 등을 통해 최적화를 도모할 수 있습니다.

하지만 실제 사용자 쿼리에 최적화 되지 않은 설계일 수 있기 때문에 사용자가 운영하는 환경에서 큐브에 대한 사용자가 실제로 요청한 쿼리와 빈도 등을 집계 설계에 반영하는 것이 필요 합니다.

 

[쿼리 로그 설정]

사용자의 쿼리 로그를 관계형 데이터베이스나 파일에 저장할 수 있습니다. 로그는 기본적으로 10번째마다 요청되는 쿼리를 기록 합니다. 이 때 쿼리는 실제 쿼리문을 기록하는 것이 아니라 큐브 내의 어떤 파티션을 조회하는지 기록합니다. 사용자의 쿼리 패턴을 파악하려면 로그 빈도수를 한시적으로 늘려 줄 필요가 있습니다. 로그 빈도 수 변경은 SSMS에서 QueryLogSampling 서버 속성을 변경하면 됩니다.

 

SSMS를 실행하여 test1이라는 데이터베이스를 생성 합니다.

 

 

SSMS에서 Analysis Services를 접속 합니다.

 

 

Analysis Services에서 마우스 오른쪽을 클릭하여 [속성]을 선택 합니다.

 

 

[분석 서버 속성] 창이 나타나면 다음과 같이 설정 합니다.

  • LogQueryLog\CreateLogTable 값을 Ture로 설정
  • Log\QueryLog\QueryLogConnectionString의 값 셀을 클릭합니다.

 

Log\QueryLog\QueryLogConnectionString을 클릭하여 [연결 관리자] 속성 창이 나타나면 서버이름은 (Local)로 설정하고 데이터베이스는 앞에서 생성한 [test1]을 선택합니다.

 

 

[분서 서버 속성]에서 Log\QueryLog\QuerySampling의 값을 1로 설정 합니다.

쿼리 로그의 테이블이름은 Log\QueryLog\QueryLogTableName에서 확인 합니다. 기본값 이름은 OlapQueryLog 입니다.

 

 

[사용 빈도 기반 최적화 마법사]

사용자의 쿼리 로그 기반으로 마법사를 사용해 집계 설계를 최적화 할 수 있습니다.

 

SSMS에서 [Analysis Services] – [데이터베이스] – [큐브] – [Adventure Works]에서 마우스 오른쪽을 클릭하여 [찾아보기]를 선택 합니다.

 

 

임의로 차원과 측정값들을 그리드 위로 끌어다 놓고 [드릴다운]이나 피벗을 합니다. 큐브를 여러 번 조회 합니다. 이러한 과정을 통하여 쿼리 로그가 기록 됩니다.

(test1 데이터베이스에 OlapQueryLog 테이블이 생성되지 않는다면 조금전 실행한 큐브 조회화면에서 [처리]를 클릭 합니다.)

 

 

[솔루션 탐색기]에서 [Adventure Works.cube]를 더블클릭 또는 [디자이너 보기]를 선택 합니다. [집계]탭에서 [사용 빈도 기반 최적화] 버튼을 클릭 합니다.

 

 

[수정할 파티션 선택]에서 파티션을 선택 합니다.

 

[쿼리 조건 지정]탭에서는 최적화할 쿼리의 필터 옵션을 설정 할 수 있습니다.

 

 

[최적화될 쿼리 확인]에서 최적화할 쿼리를 선택 합니다.

 

이후 단계는 [집계 디자인 마법사]와 동일 합니다. 취소를 클릭하여 작업을 마칩니다.

 

[집계 디자인 마법사]는 매우 많은 수의 후보자중에 일부를 선정하는 작업으로 성능 향상 정도를 20-30정도로 많이 설정하지만 사용 빈도 기반 최적화는 실제로 사용자의 큐브 접근 로그를 기반으로 소수의 집계 후보들만 추출해서 작업하므로 90 이상으로 크게 설정해서 가능한 많이 반영하도록 유도 합니다.

 

 

http://SQLMVP.KR

사용자 계층 설계

 

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

이번 시간에는 [사용자 계층 설계]에 대해서 알아 보도록 하겠습니다.

 

브라우저에서 큐브를 조회할 때 특성 계층을 행이나 열 필드에 중첩하면 하나의 특성에서 다른 특성으로의 드릴다운 및 드릴업 효과를 낼 수 있습니다. 사용자 계층은 특성 계층을 그대로 활용하면서 사용자 편의를 위해서 별도로 정의하는 계층 입니다. 예를 들어 기간 차원의 경우 년도-분기-월-일에 해당하는 계층구조를 미리 정의해서 사용하면 편리합니다.

 

[사용자 계층구조 추가하기]

사용자 계층은 차원 디자이너에서 계층 및 수준 창으로 특성들을 마우스로 끌어다 원하는 위치에 놓음으로써 쉽게 생성 할 수 있습니다.

 

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

 

 

특성창의 Promotion Type을 마우스를 이용하요 계층 창으로 끌어다 놓습니다. 특성창의 Promotion 특성을 마우스로 새로 생성한 사용자 계층의 Promotion Type아래 끌어다 놓습니다.

사용자 계층의 헤더 부분을 마우스 오른쪽을 클릭하여 [Type]으로 이름 바꾸기를 합니다.

이처럼 차원 디자이너의 차원 구조 탭에서 사용자 계층 구조 작업을 쉽게 할 수 있습니다.

위에서 생성한 Type의 계층을 삭제 합니다.

 

 

 

[사용자 계층 집계]

하나의 차원 내에는 키 특성 외에 많은 특성들이 존재 합니다.이 때 키 특성은 모든 특성들과 특성 관계를 가집니다. 그러나 다른 특성들 사이에는 특성 관계를 가지기도 하고 그렇지 않기도 합니다.

차원에 특성을 추가하면 해당 특성은 키 특성의 특성 관계에 자동으로 추가 됩니다. 그러나 다른 특성들과의 특성 관계를 정의하려면 따로 설정해 주어야 합니다. 사용자 계층을 구성하는 특성들이 특성 관계들로 연결되어 있으면 해당 특성들을 집계 설계 후보 특성에 포함시킵니다.

 

[특성 관계]탭에서 Promotion Category를 마우스로 끌어서 Promotion Type 특성위에 놓습니다. 이때 양방향 화살표가 나타납니다.

(양방향 화살표가 나타나지 않으면 특성 관계를 참고하여 특성을 생성 합니다.)

이는 해당 계층을 구성하는 모든 특성들이 서로 연쇄적으로 특성관계를 가지고 있음을 의미 합니다. 이러한 계층을 자연 계층(Natural Hierachy)라고 합니다.

 

 

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

[집계]탭에서 [집계 디자인]을 클릭 합니다.

 

 

[수정할 파티션 선택]에서 파티션을 선택 합니다.

 

 

[개체 수 지정]에서 계산을 클릭 합니다.

Promotion, Promotion Type, Promotion Category 특성 모두 굵은 글씨로 표시되어 집계 설계 후보 특성임을 나타냅니다. Promotion 특성은 키 특성이기 때문에 Promotion Category는 사용자 계층의 최상위 계층이기 때문에 Promotion Type은 Promotion Category를 특성 관계로 가지고 있기 때문에 포함된 것을 알 수 있습니다.

 

 

집계 설계 이해 – (3)집계 마법사에 특성 추가

 

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

이번 시간에는 [집계 마법사에 특성 추가]를 하도록 하겠습니다.

 

집계에 쓰이는 후보 특성을 추가함으로써 집계 설계에 영향을 줄 수 있습니다. 큐브 디자이너의 [큐브 구조] 탭에서 큐브 차원의 특성 들에 대하여 AggregationUsage 속성 설정을 통해서 집계 설계 참여 여부를 제어할 수 있습니다.

 

 

차원을 큐브에 포함 시키면 해당 차원의 모든 특성들의 AggregationUsage 속성은 Default로 설정 됩니다. 이런 경우 기본적으로 키 특성은 Unrestricted로 적용되므로 집계 설계 후보가 됩니다. 참고로 All 수준도 Unrestricted로 적용되나 특성 리스트에는 보이지는 않습니다. 나중에 소개하는사용자 계층에 포함된 특성들의 경우 최상위 수준, 그리고 최상위 수준과 직간접적으로 특성 관계가 존재하는 하위 수준의 특성들도 Unrestricted로 적용되므로 집계 설계 후보가 됩니다. 그러나 사용자 계층에 포함되지 않은 나머지 특성들은 None이 적용됩니다. 필요하다면 AggregationUsage 속성을 Full로 설정하여 해당 특성은 집계 설계시 반드시 포함하도록 할 수 있습니다.

 

다대다, 참고, 데이터 마이닝 차원에 포함되는 특성들은 None이 적용되어 집계 설계 후보가 되지 못합니다.

 

[솔루션 탐색기]에서 [차원] –[Promotion.dim]을 더블클릭 또는 [디자이너 보기]를 선택합니다.

계층 및 수준 창에 Category-Type-Promotion의 계층 구조를 가지는 Promotions라는 사용자 계층이 보입니다. 특성 창에서 각각의 특성을 살펴보면 Promotion 특성은 키 특성으로서 Promotion Category와 Promotion Type모두와 특성 관계를 가지고 있습니다. 그러나 Promotion Category와 Promotion Type은 어떠한 특성 관계도 가지고 있지 않습니다. 따라서 Promotion 사용자 계층에서 Type 수준과 Category 수준 사이엔 어떠한 직간접적인 특성 관계도 가지고 있지 않습니다.

 

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

 

 

[수정할 파티션 선택]에서 [Intetnet_Sales_2005]를 선택 합니다.

 

 

[개체 수 지정] 단계에서 Promotion 차원 아래의 Promotion과 Promotion Category가 굵은 글씨로 보입니다.

굵은 글씨는 보통 해당 특성이 집계 설계 후보 특성에 포함됨을 의미합니다. Promotion은 키 특성이기 때문에 포함되었고 Promotion Category는 사용자 계층의 최상위 수준에 위치하기 때문에 포함되었습니다.

 

 

[취소]를 클릭하고 [큐브 구조]탭으로 이동하여 차원 특성 탭에서 [Promotion]을 확장합니다. [Promotion Type]을 클릭하고 [속성]창에서 [AggregationUsage]속성을 Default에서 Full로 변경 합니다.

 

 

[집계] 탭으로 이동하여 [집계 디자인]을 클릭 합니다. 파티션을 지정합니다.

 

 

[개체 수 지정]단계에서 계산을 클릭합니다. Promotion Type이 굵은 글씨로 보입니다.

[Promotion Type]특성이 집계 설계시 포함됨을 의미 합니다. AggregationUsage 속성을 Full로 설정하면 해당 특성은 집계 설계시 반드시 포함됩니다.

 

취소를 클릭하고 큐브 구조 창으로 이동하여 Promotion Type의 AggregationUsage 속성을 Default로 원상 복귀 합니다.

집계 설계 이해 - (2)파티션 수 변경

 

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

이번 시간에는 집계 설계 이해(파티션 수 변경)에 대해서 알아 보도록 하겠습니다.

 

집계 설계시 집계 디자인 마법사는 팩트 테이블의 행 수와 각 차원의 세분성 특성(Granular Attribute)의 행 수를 참고 합니다. 그러한 값들은 BIDS에서 처음 작업을 할 때 사용되는 데이터 원본에 의해서 자동으로 초기 설정됩니다. 따라서 실제로 운영될 환경에 맞는 근사치를 수작업으로 설정할 필요가 있습니다.

 

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

 

 

[수정할 파티션 선택]에서 [Internet_Sales_2005]를 선택 합니다.

 

 

[개체 수 지정]에서 팩트 테이블과 Promotion 차원에 각각의 예상 개수와 파티션 수를 설정 합니다.

 

 

[집계 옵션 설정]에서 성능 향상 정도를 100으로 설정하고 시작 합니다.

 

 

작업이 끝나면 설계돈 집계 수와 크기를 기록 합니다. 그림을 보면 111개를 집계하고 예상 크기는 7.4M 입니다.

뒤로 클릭하여 [개체 수 지정]단계로 이동 합니다.

 

 

개체 수 지정에서 Intertnet Sales의 파티션 수를 1013에서 1,000,000,000으로 매우 큰 값으로 변경합니다,

 

 

집계 옵션 설정에서 [다시 설정]을 클릭하고 성능 향상을 100으로 설정하여 시작을 클릭 합니다. 그림을 보면 278개를 집계 설계하고 예상 실행 크기가 13.7M입니다.

 

이전의 집계 설계 111개에서 278개로, 예상 크기는 7.4M에서 13.7로 증가 하였습니다.

결과를 보면 파티션 수 값을 늘리면 집계 가능한 후보 수가 더 늘어나는 것을 확인 할 수 있습니다.

 

[뒤로]를 클릭해서 [개체 수 지정]으로 이동 합니다. Internet Sales의 파티션 수를 1013으로 설정하고 Promotion차원의 Promotion 특성의 파티션 수를 10,000,000,000로 변경합니다.

 

 

[다시 설정]을 클릭하고 성능 향상 정도를 100으로 설정하여 시작을 클릭 합니다. 그림을 보면 102개를 집계 설계하고 예상 크기는 4.9M입니다.

집계 설계는 159에서 102로 감소하였습니다.

결과를 보면 차원 특성의 파티션 수 값을 늘리면 집계 가능한 후보 수가 더 줄어드는 것을 알 수 있습니다.

 

취소를 클릭하여 마법사를 작업을 종료 합니다.

 

집계 설계시 내부적으로는 집계 설계에 포함되는 차원 특성들의 조합별로 파티션 수를 곱해서 예상되는 집계 크기를 구합니다. 그리고 그 크기를 팩트의 파티션 수와 비교 합니다. 겅험치로 집계 크기가 팩트의 파티션 수의 30% 이하가 되면 집계 후보로 사용 됩니다. 해당 후보들이 우선 순위별로 집계 설계에 포함되기 때문에 성능 향상 정도를 어떻게 설정하였느냐에 따라 최종적으로 포함 여부가 결정 됩니다. 참고로 파티션 수 값이 없으면 예상 개수의 값이 사용 됩니다.

집계 설계 이해 – (1)집계 디자인 마법사

 

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

이번 시간에는 집계 설계 이해(집계 디자인 마법사)에 대해서 알아 보도록 하겠습니다.

 

집계와 사용자 계층 구조를 생성하는 과정과 특징을 이해하면 측정값과 차원을 최적으로 설계하는데 많은 도움이 됩니다.

 

집계 특성을 잘 이해하면 큐브 데이터를 저장하기 위한 디스크 공간을 최소로 하면서 조회 성능을 향상 시킬 수 있습니다. 또한 사용자 계층을 활용하여 더 효율적으로 큐브를 조회 하도록 할 뿐만 아니라 조회 성능을 개선할 수 있습니다.

 

큐브 최적화는 일회성이 아니고 진행형 입니다. SSAS는 사용자의 쿼리 로그를 관리함으로써 많이 사용하는 쿼리를 중심으로 최적화하도록 집계 디자인을 세밀하게 조정 할 수 있습니다.

 

큐브는 모든 차원의 모든 특성에 대해 존재 가능한 모든 값을 보여 줍니다. 상위 수준의 집계 데이터는 미리 계산하여 저장된 값을 사용하기도 하고 저장된 값이 없는 경우는 쿼리 시점에 실시간으로 계산하여 반환하기도 합니다. 예를들어 All 수준 집계값이 저장되어 있으면 바로 그 값을 사용합니다. 그렇지 않으면 팩트 수준 집계로부터 실시간으로 계산하여 사용합니다. 이는 대량 데이터를 처리해야 하기 때문에 비효율이 발생합니다. 따라서 중간 집계가 존재하면 그 데이터를 이용하여 계산하여 처리할 수 있으므로 훨씬 효과 적입니다.

 

 

상위 수준의 집계 데이터를 미리 계산하여 저장해서 사용하면 빠른 응답 속도를 기대할 수 있지만 그에 대한 비용이 증가 합니다. 예를 들어 상점과 제품이 각각 100개 1000개 라고 가정하면 이론적으로는 해당 세분성을 가지는 팩트 테이블이 100,000개의 데이터가 존재 가능합니다. 그러나 모든 상점에서 제품을 동일하게 판매하지 않는다고 가정하고 5%의 데이터가 존재한다고 가정해도 5000개의 데이터가 존재 합니다.

 

큐브를 살펴보면 상점과 제품 차원에 대하역 각각 4개의 수준이 존재하므로 이론적으로 16(4*4)개의 집계가 가능합니다. 그리고 각 차원에 속한 멤버의 수가 각각 116개, 1,111개이므로 존재 가능한 셀(데이터) 수는 128,876가 됩니다. 이는 원본 팩트 데이터의 20배가 넘습니다. 이러한 공간을 모두 디스크에 할당하면 원본에 비하여 몇 배의 디스크 공간을 요구하게 됩니다. 차원이 많아 질수록, 차원에 포함된 수준 수가 많아 질수록 그 정도가 늘어나는데 이를 데이터 폭발 이라고 합니다.

 

SSAS는 상위 수준의 일부만 사전 집계하여 저장하고 실제로 데이터가 존재하지 않는 공간에 대해서는 디스크를 할당하지 않고, 압축하여 저장함으로써 데이터 폭발의 문제를 해결하면서도 빠른 응답 속도를 보장하도록 설계되었습니다.

 

SQL Server 2005 이상은 차원 보다 특성 수준에서 집계가 이루어 집니다. 예를 들어 상품 차원은 3개의 특성을 포함하고 있으면 각 특성이 All을 포함한다면 8개(2^3)의 집계가 가능합니다. 제품 차원도 마찬가지라고 한다면 8개의 집계가 가능합니다. 만약 두 차원을 모두 고려한다면 64(8*8)개의 집계가 가능 합니다.

 

집계 디자인 마법사는 큐브 내에 생성 가능한 집계 후보들 중에 어느 집계를 사용할지 자동으로 설정해 주는 도구 입니다. 큐브에 이미 집계가 설계되어 있을 경우 새로운 집계를 추가하거나 기존의 집계를 대체할 수있습니다.

 

CodePlex에서 [AdventureWorks 2008R2 Analysis Service Project]를 다운로드 받습니다.

(블로그에 첨부 파일 포함)

링크 : http://msftdbprodsamples.codeplex.com/releases/view/88252

 

 

다운로드 받은 파일을 압축을 해제하여 보면 다음과 같은 프로젝트 파일이 있습니다.

BIDS에서 압축을 해제한 프로젝트 파일을 열기 합니다.

 

 

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

 

 

[파티션]탭을 클릭합니다. 현재 생성되어 있는 파티션을 확인 할 수 있습니다.

 

 

[집계]탭으로 이동하여 [집계 디자인]을 클릭 합니다.

 

 

[집계 디자인 마법사]창에서 [수정할 파티션 선택]에서 [Internet_Sales_2005]를 선택 합니다.

 

[집계 사용 검토]에서는 집계 사용 설정을 수정하거나 특성을 포함하거나 제외 할 수 있습니다.

 

 

[개체 수 지정]에서는 사용자가 수동으로 입력하거나 [계산] 버튼을 클릭하여 마법사가 자동으로 가져 올 수 있습니다.

실습에서는 [계산]을 선택 합니다.

팩트 테이블의 행 수와 집계 설계 후보에 해당하는 차원 특성들의 행수를 계산 합니다.

  • Internet Sales에 대한 예상 개수는 FactInternetSales 테이블의 데이터 건수
  • 파티션 수는 파티션을 처리할 때 실제로 가져오는 데이터의 건수

집계설계에서는 파티션 수를 사용합니다. 만약 파티션 수가 존재하지 않는다면 [예상 개수]를 사용합니다.

 

 

[집계 옵션 설정]에서는 최적화의 비율을 설정 할 수 있습니다.

 

 

 

[다음 성능 향상 정도까지]를 선택하고 [30%]를 설정하여 [시작]을 클릭합니다. 집계 설계의 진행 상황이 도표로 표시 됩니다.

 

집계는 자동으로 설계되며 어떤 집게를 선택할지 제어할 수는 없습니다.

 

 

성능 향상을 위해 [성능 향상 정도]를 [80%]로 설정 하여 보도록 합니다.

주의할 점은 동일한 양만큼 성능 향상 정도를 증가시키더라도 낮은 구간대에서 보다 높은 구간대에서 크기 증가 정도가 훨씬 더 빠르다는 것을 확인 할 수 있습니다.

 

일정 이상에서는 크기만 빠르게 증가 할 뿐 성능 향상은 그다지 나타나지 않게 됩니다. 따라서 무조건 성능 향상 정도를 크게 설정한다고 해서 좋은 것은 아닙니다.

 

마법사 완료 단계에서 취소를 클릭 합니다. 바로 배포 및 처리를 하거나 저장만 하고 나중에 처리할 수 있지만 실습 프로젝트에서는 이미 배포 및 처리가 된 상태의 파티션이므로 추가적인 작업 없이 취소를 선택 합니다.

포스팅 작성 중

단항 연산자

 

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

이번 시간에는 [단항 연산자]에 대해서 알아 보겠습니다.

 

계정차원의 집계는 각각의 멤버별로 다른 규칙을 적용해야 할 필요가 있습니다. 예를 들어 부모 값에 더한다, 부모 값에서 뺀다, 부모 값에 포함시키지 아니한다 등 다양한 규칙이 존재할 수 있습니다. 그리고 이러한 규칙은 각 멤버별로 존재하기 때문에 차원 테이블에 별도의 열로 관리하는 것이 가능 합니다.

 

각 멤버별로 부모 멤버로의 집계 규칙을 단항 연산자(Unary Operator) 기능을 통해 해결 합니다.

사용가능한 단항연산자

  • 산술연산자 - (+, -, *, /)
  • (~) - (~)는 부모값에 포함시키지 않을 때 사용.
  • 수치 사용 – 예를 들어 단항 연산자 값으로 0.5를 사용하면 자신의 값에 0.5를 곱한 후 부모 멤버에 더해집니다.

 

 

[솔루션 탐색기]에서 [새 큐브]를 선택 합니다.

 

 

큐브 마법사가 실행되면 [기존 테이블 사용]을 선택 합니다.

 

 

[측정값 그룹 테이블 선택]에서 아래 그림과 같이 테이블을 선택 합니다.

FactFinance, FactInternetSales, FactResellerSales, FactSalesQuota

 

 

[측정값 선택]에서 전체 측정값을 선택 합니다.

 

 

[기존 차원 선택]에서 아래 그림과 같이 차원을 선택 합니다.

 

 

큐브 이름을 지정하고 마법사를 완료 합니다.

 

큐브 [처리]를 클릭하고 [브라우저] 탭으로 이동 합니다.

필드에 아래 그림과 같이 측정값과 차원을 끌어다 놓습니다.

계정별 금액을 살펴보면 계정에 상관없이 단순히 Sum 집계가 된 것을 확인 할 수 있습니다.

 

 

[솔루션 탐색기]에서 [Account.dim]을 선택하여 더블클릭 또는 [디자이너 보기]를 선택 합니다.

 

 

[차원 구조]탭을 클릭하고 특성창의 [Parent Account Key]를 클릭합니다. [속성]창에서 [UnaryOperatorColumn] 속성을 클릭합니다.

 

 

[단항 연산자 열]창이 나타나면 원본테이블에 [Dim Account]를 선택하고 [원본 열]에 [Operator]를 선택 합니다.

 

 

프로젝트를 [처리]하고 [브라우저] 탭으로 이동하여 [다시 연결]을 클릭 합니다.

 

각 멤버 아이콘 앞에 [단항 연산자]가 나타납니다.

 

 

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

 

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

 

단항 연산자의 적용에 따라 멤버별 집계가 달라짐을 확인 할 수 있습니다.

계정차원 – 계정 인텔리전스

 

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

이번 시간에는 계정차원(계정 인텔리전스)에 대해서 알아 보도록 하겠습니다.

 

모든 기업에서 대차대조표나 손익계산서 등과 같이 재무 분석은 가장 큰 관심사이고 핵심이 되는 영역입니다. 그런데 분석에서 가장 중요한 역할을 하는 차원인 계정 과목 계층 구조의 특수성으로 인해 접근 및 설계 방법이 기존 영역과 다릅니다.

계정 차원은 다른 차원과 구별되는 특징이 있습니다.

  • 계정 차원의 계층 구조상에서 리프멤버들의 수준 깊이가 다양하게 존재.
  • 하위 수준에서 상위 수준으로 집계가 단순하지 않음. 자식 멤버들의 값이 부모 멤버로 더해지기도 하고 빼지기도 함. 더해지거나 빼질 때 가중치를 가지고 부모 멤버로 반영되기도 함. 경우에 따라서는 집계 대상에서 완전히 제외되기도 함.
  • 넌-리프 멤버들도 팩트테이블로부터 값을 직접 입력 받기도 함.
  • 업무 관점에서 계층 구조상의 멤버들의 순서가 중요
  • 계정 차원을 구성하는 멤버들마다 시간 차원에 대하여 집계 방식이 다를 수 있음. 예를들어 매출액은 부모 멤버로부터 SUM 집계되지만 잔액은 값이 존재하는 가장 최근의 값이 롤업됨.

 

차원 마법사를 이용하여 계정 차원을 생성할 때 차원 테이블에서 관리하는 계정 유형을 미리 설정해 놓은 계정 유형과 매핑할 수 있습니다. 계정유형을 미리 설정할 때 Asset, Liability, Income, Expense 등과 같은 계정 유형별로 집계 함수를 설정해 놓을 수 있습니다. 이러한 작업을 통해 계정 멤버별로 시간에 대한 서로 다른 집계 처리를 별도의 작업 없이 자동으로 처리할 수 있습니다.

 

[BIDS]를 실행하여 [Analysis Services 프로젝트]를 생성합니다.

 

 

데이터 원본을 생성하고 데이터 원본 뷰에서 다음과 같이 테이블을 선택합니다.

 

 

[데이터 원본 뷰]를 생성하면 다음과 같은 뷰를 확인 할 수 있습니다. [차원]-[새 차원]을 선택 합니다.

 

 

차원 마법사에서 [기존 테이블 사용]을 선택합니다.

 

 

원본 지정에서 DimProduct를 선택하고 키열과 이름열을 선택 합니다.

 

 

관련테이블에서 아래 그림과 같이 선택 합니다.

 

 

차원 특성 마법사에서 다음을 클릭하여 진행 합니다.

 

 

차원 이름을 지정하고 마법사를 종료 합니다.

 

 

앞의 방법과 동일하게 Time 차원을 추가 합니다.

 

 

앞의 방법과 동일하게 Employee차원을 추가 합니다.

 

차원 추가가 완료 되었으면 [솔루션 탐색기]에서 프로젝트를 선택하고 마우스 오른쪽을 클릭하여 [데이터베이스 편집]을 선택 합니다.

 

 

계정유형 매핑창에서 아래 그림과 같이 설정합니다.

  • Asset, Balance, Liability, Statistics – LastNonEmpty
  • Expense, Flow, Income - Sum

계정 차원의 멤버들은 계정 유형을 가지는데 여기에서 정의한 것에 대응되는 계정 유형의 집계 함수를 이용하여 집계를 처리하게 됩니다.

 

 

[솔루션 탐색기]에서 [차원] – [새 차원]을 선택 합니다.

 

 

차원 마법사에서 [기존 테이블 사용]을 선택합니다.

 

원본 정보 지정에서 다음과 같이 설정 합니다.

  • 주 테이블 - DimAccount
  • 키열 – AccountKey
  • 이름열 - AccountDescription

 

 

차원 특성 마법사에서 다음과 같이 차원을 선택 합니다.

 

차원의 이름을 설정하고 마법사를 종료 합니다.

 

 

[차원 구조]탭에서 계층을 아래 그림과 같이 설정하고 [비즈니스 인텔리전스 추가] 버튼을 클릭 합니다.

 

 

[비즈니스 인텔리전스 마법사]에서 [계정 인텔리전스 정의]를 선택 합니다.

 

차원 특성구성에서 다음과 같이 설정 합니다.

  • 차원유형 – Account
  • 계정차트 – Account Key
  • 계정이름 – Parent Account Key
  • 계정유형 – Account Type

여기서 매핑한 내용은 차원 디자이너에서 각 특성의 Type 속성을 통해 확인 할 수 있습니다.

 

계정 인텔리전스 정의단계에서 아래 그림과 같이 원본 테이블 계정 유형과 기본 제공 계정 유형을 매핑합니다.

 

 

 

마법사를 [마침] 합니다.

 

프로젝트를 [처리]하고 [브라우저]탭을 선택 합니다. 계층을 [Parent Account key]로 선택하고 [멤버 속성]을 클릭하여 [Account Type]을 선택 합니다.

 

각 계정 멤버별로 계정 유형이 보입니다.

포스팅 작성 중!!

차원관계 – 참조 관계 유형

 

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

이번 시간에는 차원 관계(참조 관계 유형)에 대해서 알아 보도록 하겠습니다.

 

앞에서 차원과 팩트 테이블간의 관계를 정의하는 차원용도(Dimension Usage0를 살펴 보았습니다. 이외에도 차원과 팩트 테이블 사이에는 다른 유형의 관계를 설정할 수 있습니다.

 

[참조 관계 유형]은 차원 테이블이 팩트 테이블과 직접적인 관계를 가지고 있지 않더라도 다른 차원들을 경유하여 분석하고자 할 때 유용합니다.

 

이번 예제에서 다루게 될 예제로 설명하면 FactResellerSales -> DimReseller -> DimGeography로 참조하고 있습니다.

  • 첫번째는 DimReseller와 DimGeography를 묶어서 하나의 차원을 만들고 측정값 그룹과 일반 관계를 맺습니다.
  • 두번째 방법은 Dimreseller와 DimGeography를 별개의 독립된 차원으로 만든 후 Geography차원을 Reseller차원을 이용하여 측정값 그룹과 관계를 맺습니다.

 

여기에서 두 번째 방법이 참조 관계 유형 입니다.

 

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

 

빈 곳에서 마우스 오른쪽을 클릭하여 [테이블 추가/제거]를 선택 합니다,

 

[테이블 추가 / 제거] 창이 나타나면 DimGeography, DimReseller를 [포함된 개체]로 추가합니다.

 

 

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

 

 

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

 

 

[테이블 표시]창에서 앞에서 추가한 DimGeography, DimReseller를 추가 합니다.

 

 

테이블을 추가 후 [데이터 원본 뷰]창을 보면 아래 그림과 같이

FactResellerSales -> DimReseller -> DimGeography로 참조하고 있습니다.

 

 

솔루션 탐색기에서 [차원] – [새 차원]을 선택 합니다.

 

 

차원 마법사가 나타나면 다음과 같이 차원을 추가 합니다.

생성 방법에는 [기존 테이블 사용]을 선택 합니다.

 

 

[원본 정보 지정]에서 주 테이블을 [DimGeography]를 선택 합니다,

 

 

차원 특성에서 [English Country Region Name]를 [Country]로 이름을 변경 합니다.

 

[Geotraphy]이름을 지정하여 차원을 생성 합니다.

앞에서 차원을 추가한 방법과 동일하게 DimReseller차원을 추가 합니다.

 

 

관련테이블이 나타나면 체크 박스를 해제 합니다. (체크 박스를 선택 할 경우 Reseller에서 자동으로 차원관계가 만들어져 참조 관계를 실습 할 수 없습니다.)

 

[Reseller]이름을 지정하여 차원을 생성 합니다.

 

큐브 디자이너의 차원에서 마우스 오른쪽을 클릭하여 [큐브 차원 추가]를 선택 합니다.

 

 

[큐브 차원 추가] 창에서 앞에서 추가한 차원을 추가 합니다.

 

 

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

  • Reseller Sales 측정값 그룹과 Reseller 차원의 교차셀을 클릭하여 일반 관계가 설정되어 있는지 확인 후 취소를 클릭 합니다.
  • Reseller Sales 측정값 그룹과 Geography차원의 교차셀은 관계가 설정되어 있지 않습니다.

 

 

[처리]를 실행합니다. 그리고 브라우저 탭으로 이동하여 Sales Amount값을 필드로 끌어다 놓습니다. 그리고 차원의 [Geography-Country]를 끌어다 놓습니다.

현재 Grography 차원이 Reseller Sales 측정값 그룹과 관계가 없기 때문에 국가가 바뀌어도 값이 변하지 않고 전체 값을 나타냅니다.

 

[차원 용도] 탭으로 이동합니다. Reseller Sales 측정값 그룹과 Grography 차원의 교차셀을 클릭 합니다.

 

 

[관계 정의]창이 나타나면 다음과 참조 관계를 설정 합니다. 이는 현재 Reseller 차원을 경유하여 관계를 맺는 과정입니다.

 

솔루션을 처리 하고 [브라우저] 탭으로 이동 합니다. 다시 연결을 클릭 합니다.

지역별로 리셀러의 판매 금액이 정상적으로 변경된 것을 확인 할 수 있습니다.

계산 작업

 

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

이번 시간은 계산 작업에 대해서 알아 보도록 하겠습니다.

 

집합 함수 설정만을 통해서 원하는 측정값을 구하지 못하는 경우도 있습니다. 예를 들어 고객 1인당 평균 구매 금액은 집계 과정을 통해 값을 구할 수 없습니다. 단가나 성장률 등과 같이 비율을 구하는 측정값은 비가산(Non-additive) 측정값으로 집계 후에 계산을 해야 합니다.

SSAS에서는 계산 멤버나 MDX 스크립트 등을 통해서 집계 과정을 통해 어려운 값을 효과적으로 처리 할 수 있습니다.

 

(이번 시간에는 MDX에 대해서는 다루지 않습니다. 예제를 위한 코드만 언급합니다.)

 

큐브에 계산을 추가하여 원하는 결과를 얻고자 하는 경우 집계 전에 계산을 반영할 것인가 집계 후에 반영할 것인가를 고려해야 합니다.

데이터 원본 뷰에 명명된 계산(Named Calculation)을 추가한 후 큐브에 측정값으로 추가 할 수있습니다. 이는 집계 전에 계산을 반영하는 것으로 파생 측정값 (Derived Measure)이라 합니다. 즉 큐브에 적재되기 전에 계산된 값을 이용합니다. 만약 팩트 테이블에서 계산하여 큐브에 적재하는 경우 잘못된 결과를 얻을 수 있습니다.

 

예를 들어 큐브에 판매 수량과 판매 금액 측정값이 있다면 SUM 집계를 한 후에 판매 금액을 판매 수량으로 나누어 판매 단가를 구할 수 있습니다. 이 경우 리프 수준에서는 판매 단가, 상위 수준에서는 평균 단가로서의 의미를 가집니다. 이와 같이 집계를 한 후에 계산을 반영하고자 할 때 계산 멤버(Calculate Member)를 정의하여 반영 할 수 있습니다. 계산 멤버의 값은 파생 측정값과 달리 큐브에 저장되지 않고 조회시점에 실시간으로 계산 됩니다.

 

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

 

 

[계산]탭을 클릭합니다. [스크립트 구성 도우미]에서 마우스 오른쪽을 클릭하여 [새 계산 멤버]를 선택 합니다.

 

 

이름에 [Internet Sales Per Customer]를 입력합니다.

부모계층은 [Measures]를 선택 합니다.

식에는 다음과 같은 MDX 쿼리를 입력 합니다. (이때 오타 주의). 측정값 이름은 [큐브구조]탭에서 [측정값]에서 확인 할 수 있습니다.

(필자는 Distinct -> Dsitinct 로 Measure를 만들었네요 ㅠㅠ.)

[Measures].[Internet Sales Amount] / [Measures].[Customer Dsitinct Count]

 

 

프로젝트를 처리 합니다. 브라우저 탭을 클릭하여 다시 연결을 선택 합니다.

 

분석하고자 하는 차원별로 인터넷 판매 금액, 고객 수, 고객 1인당 평균 인터넷 판매액을 확인 할 수 있습니다.

 

1인당 평균 판매액을 확인하였는데 상태가 한 눈에 들어오지 않습니다. 이럴 때 값의 크기에 따라 전경색 및 배경색, 글꼴, 크기 등을 지정하면 쉽게 데이터를 파악 할 수 있습니다.

 

[계산]탭으로 이동 합니다. [Internet Sales Per Customer]를 더블 클릭 합니다.

[색 식]을 확장합니다.

 

 

 

전경색에 다음과 같은 스크립트를 입력 합니다.

CASE

WHEN [MEASURES].[INTERNET SALES PER CUSTOMER] > 2000

OR [MEASURES].[INTERNET SALES PER CUSTOMER] <= 1000

THEN 16777215/*WHITE*/

ELSE 0 /*BLACK*/

END

 

배경색에 다음과 같은 스크립트를 입력 합니다.

CASE

WHEN [MEASURES].[INTERNET SALES PER CUSTOMER] > 2000

THEN 32768/*GREEN*/

WHEN [MEASURES].[INTERNET SALES PER CUSTOMER] > 2000

THEN 65535/*YELLOW*/

ELSE 255 /*RED*/

END

 

 

프로젝트를 처리 하고 브라우저 탭을 클릭합니다. 다시 연결을 선택합니다.

그림에서 보듯이 [Internet Sales Per Customer]의 금액 크기에 따라서 배경색과 전경색이 다르게 처리 됩니다. 이와 같이 조건부 서식을 적용함으로써 사용자가 데이터를 보다 쉽게 파악할 수 있습니다.

 

 

고유 카운트 측정값

 

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

이번 시간에는 고유 카운트 측정값에 대해서 알아 보도록 하겠습니다.

 

많은 분석에서 고유 카운트 측정값을 사용 합니다. 이때 판매 건수가 10건이라고 하여 10명의 고객이 1건씩 구매한 경우와 1명의 고객이 10건의 구매를 한 경우가 구분되지 않습니다. 이런 경우 DistinctCount 집계 함수를 이용하여 실제로 몇 명의 고객이 물건을 구매하였는지 쉽게 알 수 있습니다.

 

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

 

 

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

 

 

새 측정값 창에서 아래 그림과 같이 설정 합니다.

  • 사용법 – 행 수
  • 원본 테이블 – FactInternetSales

(사용법을 [행 수] 선택시 [원본 열] 선택이 되지 않습니다.)

 

 

[Internet Sales 카운트] 측정값을 [Internet Sales Count]로 이름을 변경합니다. 속성에서 AggregateFunction 속성을 Count로 설정합니다.

 

 

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

 

 

새 측정값 창에서 아래 그림과 같이 설정 합니다.

  • 사용법 – 고유 카운트
  • 원본 테이블 – FactInternetSales
  • 원본 열 - CustomerKey

 

 

[Customer Key 고유 카운트]의 측정값을 [Customer Distinct Count]로 이름을 변경합니다. 속성에서 AggregateFunction 속성을 [Distinct Count]로 설정 합니다.

프로젝트를 처리 합니다.

 

 

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

 

제품 카테고리별로 판매 건수와 구매를 한번이라도 한 고객을 고유하게 카운트 값을 확인 할 수 있습니다.

'SQL Server > SSAS 강좌' 카테고리의 다른 글

15 - SSAS 차원관계 - (1)참조 관계 유형  (0) 2015.07.15
14 - SSAS 계산 작업  (0) 2015.07.15
12 - SSAS 반가산 측정값 집계  (0) 2015.07.15
11 - SSAS 측정값 그룹의 세분성  (0) 2015.07.15
10 - SSAS 차원용도  (0) 2015.07.15

반가산 측정값 집계

 

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

이번 시간에는 반가산 측정값 집계에 대해서 알아보도록 하겠습니다.

 

반가산(Semi-additive) 측정값은 일반 차원들에 대한 Sum 집계는 의미 있지만 시간 차원에 대한 Sum 집계는 의미 없는 측정값 입니다.

AggregateFunction 속성을 이용하여 반가산 측정값을 처리할 수 있습니다. 참고로 측정값의 AggregateFunction 속성은 기본적으로 Sum으로 설정되어 있습니다.

 

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

 

 

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

 

 

새 측정값 창에서 아래 그림과 같이 설정 합니다.

사용법 – 비어 있지 않은 마지막 값

원본 테이블 – FactInternetSales

원본 열 - OrderQuantity

 

 

추가된 측정값의 이름을 Internet Inventory Quantity로 변경합니다.

속성 창에서 Internet Inventory Quantity의 AggregateFunction 속성이 LastNonEmpty로 설정된 것을 확인 합니다.

프로젝트를 처리 합니다.

 

집계 함수

설명

ByAccount

멤버의 계정 유형(Account Type)에 지정돈된 집계 함수 적용(Account 차원 사용)

AverageOfChildren

값이 존재하는 리프 수준 자손 멤버들의 평균값을 계산

FirstChild

첫 번째 자식 멤버의 값을 롤업

LastChild

마지막 자식 멤버의 값을 롤업

FirstNonEmpty

자식 멤버 중 값이 존재하는 첫번째 멤버의 값을 롤업

LastNonEmpty

자식 멤버 중 값이 존재하는 마지막 멤버의 값을 롤업

 

 

브라우저 탭을 선택하고 측정값과 차원을 끌어다 놓습니다,

기간별로 Internet Order Quantity는 Sum으로 집계가 된 것을 보여 줍니다. 반면에 Internet Inventory Quantity는 데이터가 존재하는 가장 최근의 자식 멤버의 값을 롤업하고 있음을 보여줍니다.

'SQL Server > SSAS 강좌' 카테고리의 다른 글

14 - SSAS 계산 작업  (0) 2015.07.15
13 - SSAS 고유 카운트 측정값  (0) 2015.07.15
11 - SSAS 측정값 그룹의 세분성  (0) 2015.07.15
10 - SSAS 차원용도  (0) 2015.07.15
09 - SSAS 측정값 그룹  (2) 2015.07.15

측정값 그룹의 세분성

 

측정값 그룹의 세분성은 차원들과의 관계에 의해 결정되며 큐브 디자이너의 차원 용도 작업창에서 확인 할 수 있습니다. 하나의 큐브에 여러 개의 측정값 그룹에 속해 있는 경우 측정값 그룹마다 관계를 맺고 있는 차원들의 구성이 다르고 관계 설정시 사용된 세분성 특성이 다를 수 있습니다. 세분성 특성으로 키 특성이 아닌 특성이 사용되면 세분석 특성이상의 수준 데이터는 의미를 가지지만 아래 수준의 데이터는 의미가 없습니다. 예를들어 Sales Amount Quota는 분기가 세분성 수준이므로 분기, 년도별 데이터는 의미를 가지지만 월, 일별 데이터는 의미가 없습니다. 주의할 점은 년도 특성과 분기 특성 사이에 특성 관계가 존재하지 않으면 분기 데이터로부터 년도 데이터를 집계하지 못하므로 관계가 존재하지 않으면 특성 관계를 설정해 주어야 합니다. 참고로 차원에 특성을 추가하면 자동으로 키 특성에 특성 관계가 추가 됩니다.

 

솔루션 탐색기에서 Adventure Works.cube를 더블클릭 합니다.

브라우저 탭을 클릭하여 측정값 그룹에서 Due Date.Calendar를 행 필드로 끌어다 놓아 아래 그림과 같은 데이터 뷰를 만듭니다.

이전 실습에서 Sales Quota 측정값 그룹과 Time(Order Date)를 관계지을 때 세분성 특성을 Calendar Quarter로 설정하였습니다. 하지만 아래 그림을 보면 Amount Quota가 분기 수주에서는 분기별로 제대로 데이터를 보여주지만 년도 수준은 년도별로 제대로 데이터를 보여주지 못하고 있습니다.

 

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

 

 

 

[특성 관계] 탭을 선택 합니다. 키 특성인 Time Key에 Calendar Quarter와 Calendar Year에 대한 특성 관계가 설정 되어 있는 것을 확인 할 수 있습니다. 이런 경우 키 특성 수준의 데이터를 이용하여 Calendar Quarter와 Calendar Year 수준의 데이터를 집계할 수 있습니다. 그러나 Calendar Quarter 특성이 Calendar Year 특성과 관계를 가지고 있지 않기 때문에 Calendar Year 수준의 데이터를 집계할 수 없습니다.

 

 

Calendar Year 특성을 마우스를 이용하여 Calendar Quarter 특성에 끌어다 놓습니다.

 

만약 특성 관계가 잘 만들어 지지 않는다면 화살표에서 마우스 오른쪽을 클릭하여 삭제를 선택하고 빈 공간에서 [새 특성 관계]를 이용하여 특성 관계를 생성 합니다.

 

 

프로젝트를 처리 하고 큐브 디자이너의 브라우저 탭을 클릭하고 다시 연결을 클릭 합니다.

Sales Amount 데이터가 년도별로 정상적으로 집계된 값을 보여주는 것을 확인 할 수 있습니다.

'SQL Server > SSAS 강좌' 카테고리의 다른 글

13 - SSAS 고유 카운트 측정값  (0) 2015.07.15
12 - SSAS 반가산 측정값 집계  (0) 2015.07.15
10 - SSAS 차원용도  (0) 2015.07.15
09 - SSAS 측정값 그룹  (2) 2015.07.15
08 - SSAS 넌-리프 수준의 멤버  (0) 2015.07.15

차원용도

 

안녕하세요 강성욱 입니다.(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)을 구현할 때 유용합니다.

 

 

차원 – (3)롤-플레잉 차원

 

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

 

이번 시간에는 차원에 대해서(그 중에 롤-플레잉 차원) 알아 보도록 하겠습니다. 차원 테이블과 팩트 테이블 사이에는 참조 관계가 존재 합니다. 대부분의 경우에는 하나의 관계자 존재하는데 경우에 따라서 여러 개의 관계가 존재 할 수 있습니다. 이 때 각 관계는 역할에 따라 구분이 됩니다.

팩트 테이블이 동일한 차원 테이블을 여러 역할을 가지고 참조하는 경우 해당 차원 테이블을 기반으로 정의한 차원을 큐브에 포함시킬 때 각 역할별로 차원을 별도로 정의하지 않고 하나의 차워을 역할별로 재활용할 수 있습니다. 이를 롤-플레잉 차원이라고 합니다.

 

실습을 통해서 롤-플레잉 차원에 대해서 알아 보도록 하겠습니다.

 

이번 실습을 위해서는 반드시 지난 시간 작업이 선행 되어야 합니다.

시간 차원 관련 링크

http://blog.naver.com/jevida/140162430249

 

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

 

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

 

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

 

 

새로 추가된 테이블을 보면 아래 그림과 같이 FactResellerSales와 DimTime 사이에 세 개의 관계가 보입니다.

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

 

 

큐브 마법사가 시작되면 [생성 방법 선택]에서 [기존 테이블 사용]을 선택 합니다.

 

 

[측정값 그룹 테이블 선택]에서 [FactResellerSales]를 선택 합니다.

 

 

측정값 선택에서는 Order Quantity, Sales Amount를 선택 합니다.

 

 

기존 차원을 추가합니다.

 

 

새 차원을 선택 합니다.

 

 

큐브 이름을 지정하고 마법사를 완료 합니다.

 

아래 그림에서 보면 차원 창에 Due Date, Order Date, Ship Date라는 세 개의 롤-플레잉 차원이 자동으로 추가된 것을 확인 할 수 있습니다. Time 차원을 큐브 차원으로 추가시 Dim Time 테이블과 FactInternetSales 테이블 사이에 관계들을 기반으로 자동 처리된 것입니다.

 

완료 되었으면 프로젝트를 배포 합니다.

 

차원 – (2)시간차원

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

 

이번 시간에는 차원에 대해서 (그 중에 시간 차원)알아 보도록 하겠습니다. 시간 차원은 시간이라는 관점에서 선후 관계를 가지며 일정한 간격으로 생성되고 반복 됩니다. 한 시간은 60분 간격으로, 분기는 3개월 간격으로, 1년은 4분기 간격으로 생성되고 반복 됩니다.

시간 차원은 동시에 불규칙성을 가집니다. (월말이 28일, 30, 31, 윤년) 따라서 전월 동기간 대비 비교 분석을 할 때 대응되지 않는 날짜들이 나타납니다. 또한 주가 월별로 고르게 분포하지 않습니다, 따라서 주별 데이터를 월별로 집계하고자 한다면 별도의 집계 규칙이 필요 합니다.

 

불규칙성 중에서 가장 빈번하게 나타나는 것 중의 하나는 회계 년도와 관련된 것입니다. 즉 달력은 1월 1일이 새해의 출발점이지만 기업체의 경우 7월 1일이 회계연도인 경우도 있습니다.

 

또한 시계열 분석과 관련하여 기간별 속성을 추가로 요구하는 경우가 많습니다.(영업일, 휴일, 기념일 등등) 따라서 OLTP와 달리 시간 차원 테이블을 별도로 만들어 관리할 필요가 있습니다.

 

실습 방법은 차원 마법사를 이용하여 시간 데이터를 담고 있는 차원 테이블로부터 시간 관련 특성들과 매핑 시켜보도록 하겠습니다.

 

지난 시간의 표준차원의 프로젝트를 불러옵니다.

표준차원의 프로젝트가 없다면 [BIDS]를 실행하여 표준차원까지 생성 합니다.

표준차원 관련 링크

http://blog.naver.com/jevida/140162346308

 

 

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

 

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

 

[테이블 추가/제거]창에서 DimTime을 포함된 개체에 추가 합니다.

 

[솔루션 탐색기]에서 [차원]에서 [새 차원]을 선택 합니다.

 

차원 마법사에서 [기존 테이블 사용]을 선택 합니다.

 

[원본 정보 지정]에서 주 테이블을 [DimTime]을 선택 합니다.

 

 

[차원 특성 선택]에서 English Month Name, Calendar Quarter, Calendar Year을 선택 합니다.

 

[Time] 이름을 지정하고 마법사를 완료 합니다. 차원 디자이너 특성 창에 있는 Calnedar Year, Calendar Quarter, English Month Name의 Type 속성이 각각 Years, Quarters, Months인 것을 확인 합니다.

 

계층의 이름을 Calendar로 변경하고 각 수준을 Year, Quarter, Month로 이름을 변경 합니다.

 

차원 디자이너에서 [데이터 원본 뷰]에서 DimTime테이블을 확장하여 FiscalYear, FiscalQurater를 오른쪽으로 클릭하여 [열의 새 특성]을 클릭 또는 마우스 드래그를 이용하여 특성으로 끌어다 놓습니다.

 

프로젝트를 배포 합니다. 차원 디자이너의 브라우저 탭을 클릭 합니다. 차원의 각 계층 구조를 살펴 볼 수 있습니다. 계층을 English Month Name을 선택 합니다.

아래 그림에서 보듯이 월 멤버들의 순서가 알파벳 순서로 정렬되어 나타납니다. 이는 월의 올바른 순서가 아니므로 추가적인 작업이 필요 합니다.

 

[차원 구조]탭을 클릭 합니다. English Month Name을 선택하고 속성에서 Order by 속성이 Key, Keycolumn 속성이 EnglishMonthName으로 각각 설정되어 있는 것을 확인할 수 있습니다.

KeyColumn 속성을 클릭합니다.

 

키 열에서 MonthNumberOfYear을 선택합니다.

 

속성에서 NameColumn을 선택 합니다.

 

이름 열 창에서 EnglishMonthName을 선택 합니다.

 

프로젝트를 배포하고 브라우저 탭에서 다시 연결을 클릭 합니다. 월이 정상적으로 나타나는 것을 확인 할 수 있습니다. 시간 멤버는 일정한 간격으로 생성되고 반복 됩니다. 따라서 현재 Month 특성 계층의 멤버들을 보면 1월부터 12월까지 12개의 멤버가 존재하고 매년 반복 됩니다.

따라서 년도별 월 멤버들이 구분되도록 설정할 필요가 있습니다.

 

차원 구조 탭에서 EnglishMonthName 특성을 클릭하여 속성창에서 KeyColumn을 선택 합니다.

현재 멤버 키에서 CalendarYear를 추가 합니다.

 

CalendarYear를 위로 이동 합니다.

 

프로젝트를 배포하고 브라우저탭에서 다시 연결을 클릭 합니다. 년도별로 반복된는 월 멤버가 보이는 것을 확인 할 수 있습니다.

 

 

차원 – (1)표준차원

 

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

 

이번 시간에는 차원에 대해서 (그 중에 표준 차원)알아 보도록 하겠습니다. 표준 차원은 가장 일반적인 차원을 의미 합니다.

 

실습 방법은 차원 마법사를 이용하여 기존 테이블로부터 차원을 생성합니다. 차원 마법사를 이용하여 생성한 차원은 차원 디자이너를 사용해 추가적인 작업 및 유지보수가 가능 합니다, 차원 디자이너에서 차원 구조를 검토하고 속성을 변경하고 차원 데이터를 조회해 볼 수 있습니다.

 

[BIDS]를 실행하여 [Analysis Services 프로젝트]를 생성 합니다.

 

[솔루션 탐색기]에서 [데이터 원본]에서 마우스 오른쪽을 클릭하여 [새 데이터 원본]을 선택 합니다. 데이터 원본은 Analysis Services가 차원이나 큐브를 생성할 때 사용하는 기저 데이터를 의미하며 주로 데이터웨어하우스나 데이터마트로 구축 됩니다. 차원이나 큐브를 생성할 때 일반적으로 어디로부터 데이터를 가져오는지 설정하는 데이터 원본 추가 작업을 가장 먼저 하게 됩니다.

데이터 원본은 연결할 서버와 연결할 때 필요한 인증 정보를 포함하는 연결 문자열을 포함하고 있습니다.

 

[데이터 원본 마법사]가 나타나면 SNAC(SQL Native Client)를 사용하여 연결을 만듭니다.

 

 

[솔루션 탐색기]에서 [데이터 원본 뷰]에서 마우스 오른쪽을 클릭하여 [새 데이터 원본 뷰]를 선택 합니다.

[데이터 원본]에는 차원과 큐브 용도외의 관리용 테이블도 존재 합니다. 또한 비즈니스 용어가 아닌 개발자 용어로 관리됩니다, 필요한 데이터가 누락되거나 형식이 맞지 않을 수도 있기에 데이터 원본에서 필요한 스키마 정보만 선택적으로 가져오고 필요에 따라 일부 데이터 처리를 할 필요가 있습니다. 이러한 문제를 논리적으로 해결하기 위하여 [데이터 원본 뷰]를 사용합니다. 또한 테이블 이름이나 열이름 등을 비즈니스 용어로 표현 함으로써 보다 사용자 친화적으로 접근 합니다.

 

[새 데이터 원본 뷰 마법사]가 나타나면 앞에서 만들었던 [데이터 원본]을 선택 합니다.

 

[테이블 및 뷰 선택]에서 DimProduct, DimProductCategory, DimProductSubCategory를 포함된 개체로 이동 합니다.

(세 개의 테이블이 제품 관련 차원테이블이 정규화 되어 있음.)

 

 

[마법사 완료]에서 차원 이름을 지정하고 완료 합니다.

 

물리적인 참조 관계를 기반으로 자동으로 테이블간 관계가 표시 됩니다.

 

 

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

 

[생성 방법 선택]에서 [기존 테이블 사용]을 선택 합니다.

 

[원봉 정보 지정]에서 [데이터 원본 뷰]를 선택 하고 [주 테이블]을 선택 합니다.

[키 열]과 [이름 열]을 선택 합니다.

 

[관련 테이블 선택]에서는 자동으로 테이블이 선택되어 있습니다.

 

 

[차원 특성 선택]에서 Color, Price, Size를 선택 합니다.

 

EnglishProductCategoryName의 특성 이름을 Category로 변경 합니다.

 

차원 이름을 지정하고 마법사를 완료 합니다.

 

차원 디자이너에서 [Dim Product] 특성의 이름을 [Product]로 변경 합니다.

 

차원 디자이너의 브라우저 탭으로 이동 합니다. 아직은 BIDS에서 차원 정의만 한 상태라서 차원 구조를 탐색 하지 못합니다. [배포]를 클릭합니다.

 

 

[실행]을 선택하면 차원이 서버로 배포되어 생성 됩니다.

 

정상적으로 배포 처리가 완료 되면 다음과 같은 화면이 나타납니다. 만약 빨간색의 오류가 발생한다면 문제점을 해결한 후 다시 배포를 합니다,

 

 

차원 디자이너에서 다시 연결 버튼을 클릭하면 특성 계층별로 차원 구조를 살펴 볼 수 있습니다.

차원 마법사를 이용하여 차원을 만든 후에 차원 디자이너를 이용하여 수정 및 유지 관리할 수 있습니다. 차원 테이블의 열을 특성으로 추가하면 해당 특성은 기본적으로 계층을 가집니다. 계층을 가진다는 것은 데이터를 그룹화 하는데 사용할 수 있음을 의미 합니다.

계층을 [List Price]로 변경 합니다. 그림과 같이 가격 멤버가 불규칙적으로 보입니다. 비즈니스적으로는 큰 의미 없는 구분입니다.

 

[차원 구조]탭으로 이동하여 [List Price] 특성을 선택하고 [속성] 창에서 AttributeHierarchyEnabled 속성을 [False]로 변경 합니다. 이 때 [List Price]의 특성의 아이콘은 회색으로 바뀌며 비활성화 됩니다.

 

프로젝트를 배포 후 다시 연결하여 계층 리스트에 보면 [List Price]가 나타나지 않습니다.

계층을 [Product]를 선택하고 [멤버 속성]을 클릭한 후 [List Price]를 선택 합니다.

 

아래 그림과 같이 [List Price]를 더 이상 특성 계층으로 활용하지는 못하지만 Product에 대한 멤버 속성으로 활용이 가능 합니다.

 

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

 

'SQL Server > SSAS 강좌' 카테고리의 다른 글

06 - SSAS 차원 - (3) 롤-플레잉 차원  (0) 2015.07.15
05 - SSAS 차원 - (2) 시간 차원  (0) 2015.07.15
03 - SSAS 큐브 조회  (0) 2015.07.15
02 - SSAS 큐브 만들기  (0) 2015.07.15
01- SSAS 환경 구축  (0) 2015.07.15

큐브 조회

 

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

이번 시간에는 지난 시간에 만든 큐브를 조회 하도록 하겠습니다.

[큐브 만들기 관련 링크]

http://blog.naver.com/jevida/140162141023

 

BIDS에서 작업한 내용은 Analysis Services 서버에 연결하지 않은 상태에서 오프라인으로 저장 됩니다. 따라서 차원과 큐브의 실제 물리적인 구조와 데이터를 조회 하려면 로컬에 파일로 저장된 OLAP 개체 정의 정보들을 서버로 옮기고 그에 따른 처리 작업을 해주어야 합니다.

솔루션 탐색기에서 [Adventure Works DW Cube]를 마우스 오른쪽을 클릭하여 [처리]를 선택 합니다. 이 작업은 BIDS에서 오프라인으로 정의한 OLAP를 서버에 생성 합니다.

 

[처리 큐브] 창이 나타나면 [실행]을 선택 합니다.

 

큐브가 정상적으로 처리된 것을 확인 할 수 있습니다.

 

 

[솔루션 탐색기]의 차원에서 [Dim Time.dim]을 더블 클릭 합니다. 그리고 [브라우저] 탭을 클릭합니다.

[계층]에서 [월]을 선택하고 계층 구조를 펼쳐 봅니다. 차원에 속하는 특성 계층은 ALL 수준과 리프 수준으로 구성 됩니다.

 

[계층]을 선택하고 계층 구조를 펼쳐 봅니다. 특성 계층과 달리 사용자 계층은 드릴다운/업 경로를 가지고 계층 구조가 만들어 집니다.

 

[솔루션 탐색기]에서 [Adventure Works Dw.cube]에서 마우스 오른쪽을 클릭하여 [디자이너 보기] 또는 더블 클릭합니다. 그리고 [브라우저] 탭을 클릭 합니다.

 

측정값 그룹에서 [Internet Sales Amount]와 [Reseller Sales Amount] 측정값을 데이터 필드로 끌어다 놓습니다.

차원에서 [Order Date]의 [Year]을 행 필드로 끌어다 놓습니다.

 

아래 그림과 같이 년도별 실적을 볼 수 있습니다.

추가로 [Quarter]를 열 필드로 끌어다 놓습니다,

 

년도별 분기별 판매 실적을 크로스 탭으로 볼 수 있습니다.

 

열 필드의 [Quarter]을 행 필드로 드래그 앤 드롭 합니다.

같은 차원에 속하더라도 서로 다른 축에 자유롭게 위치 할 수 있습니다.

 

 

 

차원을 제거하는 방법은 해당 차원(열 필드 또는 행 필드)을 마우스로 드래그 앤 드롭하여 데이터 필드 밖으로 끌어다 놓습니다. (드래그 하여 밖으로 빼자)

 

여러 차원을 조합하여 년도별 월별, 분기별 데이터를 확인 할 수 있습니다,

 

실습에서 확인것과 같이 큐브에 접근해서 차원들을 이용하여 다양하게 데이터뷰를 만들어 분석 할 수 있습니다.

전문적인 OLAP 클라이언트 도구들은 단순히 다양한 데이터 뷰를 만드는 것 외에도 강력한 분석 기능 및 데이터 표현 기능을 내장하고 있어서 BIDS나 SSMS에서 기본적인 수준에서 큐브의 데이터를 파악하는 것 이상으로 분석 효과를 향상 시킬 수 있습니다.

'SQL Server > SSAS 강좌' 카테고리의 다른 글

06 - SSAS 차원 - (3) 롤-플레잉 차원  (0) 2015.07.15
05 - SSAS 차원 - (2) 시간 차원  (0) 2015.07.15
04 - SSAS 차원 - (1) 표준 차원  (0) 2015.07.15
02 - SSAS 큐브 만들기  (0) 2015.07.15
01- SSAS 환경 구축  (0) 2015.07.15

큐브 만들기

 

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

 

이번 시간에는 큐브를 만들어 보도록 하겠습니다.

 

[BIDS]를 실행하여 [Analysis Services 프로젝트]를 생성 합니다.

 

[솔루션 탐색기]에서 [데이터 원본]에서 오른쪽 마우스를 클릭하여 [새 데이터 원본]을 클릭 합니다.

 

[데이터 원본 마법사]에서 [새로 만들기]를 선택 합니다.

 

[연결 관리자]에서 서버이름을 입력하고 데이터베이스에는 [AdventureWorksDW]를 선택 합니다.

 

[데이터 연결]이 완료 되었으면 [다음]을 클릭 합니다.

 

[가장 정보]단계에서는 [서비스 계정 사용]을 선택 합니다.

 

데이터 원본 이름을 지정하고 마침을 클릭 합니다.

 

[솔루션 탐색기]에서 [데이터 원본]에서 마우스 오른쪽을 클릭하여 [새 데이터 원본 뷰]를 클릭 합니다.

 

앞에서 만든 원본 뷰를 선택하고 다음을 클릭 합니다.

 

[데이터 원본 뷰 마법사]에서 DimProductSubCategory를 선택하고 [>]를 클릭하여 [포함된 개체]에 포함 시킵니다.

 

[관련 테이블 추가] 버튼을 연속 4번 클릭하여 관련된 테이블을 포함 합니다. 그리고 DimCurrency, DimSalesTerritory, FactInternetSalesReason 을 선택하여 [<] 버튼을 클릭하여 포함된 개체에서 제외 합니다.

 

마법사 완료 단계에서 이름을 지정하고 마침을 클릭 합니다.

 

솔루션 탐색기에 [Adventure Works DW.dsv]가 나타납니다.

 

[다이어 그램]창에서 [Dim Time] 테이블을 오른쪽 마우스로 클릭한 후 [새 명명된 계산]을 클릭 합니다.

 

명명된 계산 만들기 창에서 [열 이름]에 월을 입력하고 식에 다음과 같이 입력 합니다.

CONVERT(CHAR(4), CalendarYear) + ' ' + EnglishMonthName

 

 

[Dim Time]에서 마우스 오른쪽을 클릭하여 [데이터 탐색]을 선택 합니다.

 

앞에서 추가한 명명된 계산(월)이 정상적으로 조회되는 것을 확인 할 수 있습니다.

 

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

 

[생성 방법 선택]에서 [기존 테이블 사용]을 선택 합니다.

 

측정 그룹 선택에서 데이터 원본 뷰는 [Adventure Works DW]를 선택하고 측정값 그룹 테이블을 선택 합니다. 그리고 [제안] 버튼을 클릭합니다.

 

측정값 선택에서

Order Quantity

Sales Amount

Order Quantity – Fact Internet Sales

Sales Amount – Fact Internet Sales 를 선택 합니다.

 

새 차원 확인 단계에서 검색된 차원들의 특성과 계층을 살펴 봅니다.

 

큐브 이름을 지정하고 마법사를 완료 합니다,

 

큐브 디자이너 그림창에서 노란색으로 보이는 테이블은 Fact테이블을 나타내고 파란 테이블은 차원 테이블을 나타냅니다. 측정값 창에는 각 팩트 테이블에 대응하는 측정값 그룹이 나타납니다. Analysis Services는 하나의 큐브안에 여러 개의 서로 다른 팩트 테이블을 포함할 수 있습니다.(멀티 팩트 테이블)

 

측정값 창에 보이는 측정값 그룹과 측정값들의 이름을 다음과 같이 변경 합니다.

Fact Reseller Sales -> Reseller Sales

Order Quantity -> Reseller Order Quantity

Sales Amount -> Reseller Sales Amount

Fact Internet Sales -> Internet Sales

Order Quantity – Fact Internet Sales -> Internet Order Quantity

Sales Amount – Fact Internet Sales -> Internet Sales Amount

 

그리고 각 측정값을 선택하고 [FormatString] 값을 [#,#]으로 설정 합니다.

 

 

솔루션 탐색기에서 [Dim Time.dim]을 더블 클릭 합니다.

큐브 마법사에서 확인 하였던 특성들과 계층이 나타납니다. 만약 계층이 나타나지 않는다면 [데이터 원본 뷰]에서 [특성]으로 마우스 드래그 앤 드롭으로 해당 항목을 끌어 놓고 다시 [특성]에서 [계층]으로 끌어다 놓습니다.

 

이렇게 하여 큐브가 생성 되었습니다.

 

다음 시간에는 큐브를 조회하는 방법에 대해서 알아 보도록 하겠습니다.

'SQL Server > SSAS 강좌' 카테고리의 다른 글

06 - SSAS 차원 - (3) 롤-플레잉 차원  (0) 2015.07.15
05 - SSAS 차원 - (2) 시간 차원  (0) 2015.07.15
04 - SSAS 차원 - (1) 표준 차원  (0) 2015.07.15
03 - SSAS 큐브 조회  (0) 2015.07.15
01- SSAS 환경 구축  (0) 2015.07.15

SSAS 환경 설정.

 

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

 

SSAS에 대해서 알아 보도록 하겠습니다.

 

이 강좌는 [SQL Server 2005 Analysis Services 포켓가이드 – 권오주]를 기본으로 2008에서 재구성 하였습니다.

 

첫 시작으로 Microsoft Business Intelligence에 대해서 알아보고 SQL Server에서 SSAS를 구축하기 위한 환경 설정에 대해서 알아 봅니다.

 

MSBI는 Microsoft Business Intelligence의 약자로 크게 시스템 영역과 사용 영역으로 나눌 수 있습니다.

  • 시스템 영역 – ETL, Data WareHouse, Data Mart, OLAP 엔진, 분석용 OLAP 툴 등
  • 사용자 영역 – 리포트 중심의 정형 분석, 비정형 분석, 다차원 분석, 계획 및 시뮬레이션, 성과 관리 등.

 

기업 전에 걸친 BI시스템을 거쳐 End-To-End 사용자가 직접 여러 가지 분석을 할 수 있도록 하는 것이 목표 입니다.

 

SSAS를 사용하기 위한 환경 설정.

 

SQL Server 구성 관리자에서 SQL Server Analysis Services 서비스가 설치 되어 있는지 확인 합니다.

 

만약 구성관리자에서 해당 서비스가 보이지 않는다면 SQL Server 설치 파일을 이용하여 해당 서비스에 체크박스를 선택 하여 설치 합니다.

 

BIDS는 Visual Studio 환경을 기반으로 통합 개발 환경을 제공 합니다. Visual Studio를 설치 하지 않아도 SQL Server설치 시 기본적으로 SSAS, SSIS, SSRS 관련된 도구만 설치 된 것을 확인 할 수 있습니다. 만약 C#이나 VB.NET같은 프로그램이 이미 설치 되어 있다면 동일 환경으로 통합 된 것을 확인 할 수 있습니다.

 

 

 

BIDS에는 비즈니스 인텔리전스 프로젝트를 위한 몇 가지 템플릿을 제공합니다, SSAS, SSIS, SSRS 프로젝트를 정의할 때 사용할 수 있는 템플릿과 Reporting Builder를 위한 Report Model을 정의할 때 사용할 수 있는 템플릿이 제공 됩니다.

 

이번 실습을 위해서는 MS에서 제공하는 Adventureworks, AdventureworksDW 데이터베이스를 설치 합니다.

다운로드 링크 : http://msftdbprodsamples.codeplex.com/releases

 

 

 

다음 시간에는 큐브 구축 및 차원과 스키마 설계 등에 대해서 하나씩 알아 보도록 하겠습니다.

SSAS실습하기에 앞서 OLAP개념과 다차원 모델과 같은 이론이 바탕이 되어야 하기에 실습과 이론이 병행 될 수도 있습니다.

 

'SQL Server > SSAS 강좌' 카테고리의 다른 글

06 - SSAS 차원 - (3) 롤-플레잉 차원  (0) 2015.07.15
05 - SSAS 차원 - (2) 시간 차원  (0) 2015.07.15
04 - SSAS 차원 - (1) 표준 차원  (0) 2015.07.15
03 - SSAS 큐브 조회  (0) 2015.07.15
02 - SSAS 큐브 만들기  (0) 2015.07.15

+ Recent posts