T.K. Anand
Microsoft Corporation
2005년 7월
적용 대상:
SQL Server 2005 Analysis Services
요약: 새로운 Analysis Services 2005 드릴스루 아키텍처에 대해 살펴보십시오. Analysis Services 2005에서 드릴스루를 설정하는 방법에 대해 살펴보고 Analysis Services 2000 데이터베이스에서 드릴스루 설정을 마이그레이션하는 방법에 대해 알아보십시오.
목차
소개
드릴스루 아키텍처
DRILLTHROUGH 문
드릴스루 작업
시나리오
마이그레이션
결론
소개
드릴스루는 사용자가 단일 셀을 지정하는 동작이며 이 셀에 관련된 가장 상세한 수준의 데이터를 분석 서버가 반환합니다. Analysis Services 2000에서 지원되었던 드릴스루 기능은 Analysis Services 2005에서 완전히 새로 재구성되었습니다. 이 재구성의 주요 결과 중 하나는 Analysis Services 2000 데이터베이스의 드릴스루 설정이 Analysis Services 2005 업그레이드나 마이그레이션에 의해 유지되지 않는다는 것입니다.
이 백서에서는 새로운 드릴스루 아키텍처에 대해 자세히 설명합니다. 이 백서에서는 Analysis Services 2005에서 드릴스루를 효과적으로 설정하는 방법을 설명하기 위해 몇몇 일반적인 예제를 사용하고 또한 Analysis Services 2000 데이터베이스에서 드릴스루 설정을 마이그레이션하는 방법에 대해 설명합니다.
드릴스루 아키텍처
사용자나 클라이언트 응용 프로그램이 DRILLTHROUGH 문을 보내어 드릴스루를 호출합니다. 이 문은 단일 셀을 지정하고 상세 수준 데이터가 포함된 행 집합을 반환합니다. DRILLTHROUGH 문에 대해서는 이 문서의 뒤에서 설명합니다.
Analysis Services 2000
Analysis Services 2000에서 데이터베이스 관리자가 다음과 같은 작업을 수행하여 큐브에 드릴스루를 설정합니다.
- 큐브에 드릴스루를 활성화합니다(DSO의 AllowDrillthrough 속성).
- 드릴스루 결과에 포함하려는 테이블과 열을 지정합니다(DSO의 DrillThroughColumns, DrillThroughFrom, DrillThroughJoins 속성). 큐브 스키마의 일부가 아닌 테이블(Fact 및 Dimension 테이블)을 비롯하여 큐브의 데이터 소스에 있는 임의의 테이블을 지정할 수 있습니다(그림 1).
- 드릴스루 결과의 행을 제한하는 필터 조건을 선택적으로 지정합니다. (DSO의 DrillThroughFilter 속성).
- 각 파티션에 대해 사용자 지정 드릴스루 설정을 선택적으로 지정합니다(기본적으로 파티션에 대해 2-3단계 반복).
- 적절한 역할에 드릴스루 권한을 부여합니다.
그림 1. Analysis Services 2000의 드릴스루 옵션 대화 상자
서버가 DRILLTHROUGH 문을 수신하면 셀 좌표 및 드릴스루 설정에 따라 각 파티션에 대해 SQL 쿼리를 구성합니다. 그런 다음 관계형 데이터 소스에 대해 SQL 쿼리를 수행하고 그 결과를 클라이언트에 반환합니다. 참고로 각 파티션에 대해 하나씩 여러 개의 행 집합이 클라이언트에 반환됩니다.
다음은 Analysis Services 2000 드릴스루 아키텍처에서 주목할 만한 몇 가지 사항입니다.
- 이 아키텍처는 각 파티션에 대해 하나의 행 집합을 반환하므로 클라이언트 응용 프로그램이 통합된 방식으로 결과를 사용자에게 표시하는 것이 부담이 됩니다.
- 이 아키텍처는 셀 보안 권한을 완벽하게 준수하지는 않습니다. 드릴스루 권한과 셀 읽기 액세스 권한이 있는 사용자는 이 셀 아래의 여러 셀이 보호되어 있더라도 이 셀에 대해 드릴스루를 수행할 수 있습니다.
- 이 아키텍처는 차원 보안 권한을 준수합니다. 드릴스루 권한과 셀 읽기 액세스 권한이 있는 사용자는 이 셀 아래의 차원 구성원가 보호되어 있는 경우 이 셀에 대해 드릴스루를 수행할 수 없습니다. 사용자에게 보안 오류가 반환됩니다.
Analysis Services 2005
Analysis Services 2005의 드릴스루 아키텍처는 Analysis Services 2000과 완전히 다릅니다. 가장 큰 차이점은 드릴스루가 큐브 내에서 상세 수준 데이터를 반환한다는 것입니다. 서버는 관계형 데이터 소스에 대해 어떠한 SQL 쿼리도 수행하지 않습니다. 따라서 드릴스루 결과로 반환되어야 하는 모든 열은 차원 특성 또는 측정값으로서 큐브 스키마의 일부가 되어야 합니다.
개념적으로 드릴스루는 큐브에 대한 SQL 쿼리와 유사합니다. 두 경우 모두 데이터가 포함된 행 집합을 큐브 내에서 반환하므로 드릴스루가 SQL 쿼리 인프라를 내부적으로 다시 사용합니다. 서버가 DRILLTHROUGH 문을 수신하면 이 문을 동일한 SQL 문으로 변환합니다. 그런 다음 SQL 문이 실행되고 그 결과가 클라이언트에 반환됩니다.
다음은 Analysis Services 2005 드릴스루 아키텍처에서 주목할 만한 몇 가지 사항입니다.
- 드릴스루는 모든 큐브에 대해 암시적으로 활성화됩니다. 왜냐하면 드릴스루는 MDX 또는 SQL 쿼리를 사용하여 구할 수 없는 정보는 반환하지 않기 때문입니다. 따라서 데이터베이스 관리자가 드릴스루를 명시적으로 설정할 필요가 없으며 드릴스루 액세스 권한을 사용자에게 부여할 때의 보안 문제를 염려할 필요가 없습니다.
- 드릴스루는 SQL 쿼리 인프라를 기반으로 구축되므로 결과가 단일 행 집합으로 클라이언트에 반환됩니다.
- 사용자가 큐브에 대해 중대한 셀 보안 액세스를 하는 경우 드릴스루가 보안 오류를 반환합니다.
- 지정된 셀 아래의 차원 구성원가 보호되어 있더라도 이 셀에 대한 드릴스루가 성공합니다. 보호된 레코드는 드릴스루 결과에서 제외됩니다.
새 드릴스루 아키텍처가 큐브 디자이너에게 미치는 가장 큰 영향은 모든 드릴스루 열이 큐브 스키마의 일부가 되어야 한다는 것입니다. 큐브 디자이너는 추가적인 특성과 측정값을 큐브에 포함시켜야 합니다. 이렇게 하면 스키마의 복잡성과 데이터 크기가 증가할 수 있습니다.
DRILLTHROUGH 문
DRILLTHROUGH 문은 드릴스루를 수행할 셀 좌표를 지정하고 결과에 반환하려는 열 목록을 지정합니다. 구문은 다음과 같습니다.
DRILLTHROUGH [MAXROWS n] <mdx-select> [RETURN <column> [AS <alias>], <column> [AS <alias>], ...] <mdx-select> -> any MDX SELECT statement that specifies a single cell <column> -> any attribute or measure in the cube <alias> -> any string alias for the column
예를 들어, 다음 문은 2005년 미국에서의 고객 매출에 대해 드릴스루를 수행합니다.
DRILLTHROUGH MAXROWS 10 SELECT {[Measures].[Store Sales]} on 0, {[Customer].[Geography].[USA]} on 1 FROM [Sales] WHERE {[Time].[Year].[2005]} RETURN [Measures].[Store Sales], [Measures].[Store Cost], [Measures].[Unit Sales], [Customer].[Name], [Product].[Name], [Store].[Name], [Time].[Day]
MAXROWS
MAXROWS 절은 드릴스루가 반환할 수 있는 행의 최대 한도를 지정합니다. MAXROWS 절이 중요한 이유는 드릴스루가 많은 수의 행을 반환할 수 있기 때문입니다(특히 셀 좌표가 미세한 경우). 클라이언트 응용 프로그램에서 MAXROWS를 사용하면 신뢰하는 사용자가 요청한 엄청난 양의 드릴스루 결과가 응용 프로그램에 쇄도하는 것을 막을 수 있습니다. MAXROWS의 기본값은 10,000입니다.
MDX SELECT
MDX SELECT 문은 큐브에 단일 셀을 지정해야 합니다. 더욱이 셀의 좌표에는 계산된 구성원이 있을 수 없으며 기본 구성원만이 있을 수 있습니다.
예를 들어, 다음 MDX SELECT 문은 드릴스루를 위해 적합하며 동일한 결과를 생성합니다.
DRILLTHROUGH
SELECT
{[Measures].[Store Sales]} on 0,
{[Customer].[Geography].[USA]} on 1
FROM [Sales]
WHERE
{[Time].[Year].[2005]}DRILLTHROUGH
SELECT
{[Measures].[Store Sales],
[Customer].[Geography].[USA],
[Time].[Year].[2005]} on 0
FROM [Sales]
다음 MDX SELECT 문은 드릴스루를 위해 적합하지 않으며 오류를 생성합니다.
DRILLTHROUGH
SELECT
{[Measures].[Store Sales]} on 0,
[Customer].[Geography].[USA].children on 1
FROM [Sales]
WHERE
{[Time].[Year].[2005]}DRILLTHROUGH
SELECT
{[Measures].[Store Sales]} on 0,
{[Customer].[Geography].[USA]} on 1
FROM [Sales]
WHERE
{[Time].[Year].[2004], [Time].[Year].[2005]}
RETURN 절
RETURN 절은 드릴스루 결과로 반환하려는 열 목록을 지정합니다. 열은 측정값 또는 차원 특성이 될 수 있으며 AS 절을 사용하여 선택적으로 별칭이 지정됩니다.
측정값
RETURN 절에 측정값을 지정하면 상세 수준 레코드에 대한 이 측정값이 드릴스루 결과 열에 포함됩니다. 흥미로운 사실은 드릴스루가 실행 중인 셀 좌표가 아닌 다른 측정값 그룹의 측정값이 RETURN 절에 포함될 수 있다는 것입니다(이 예제는 이 문서의 뒤에서 설명). 하지만 RETURN 절의 모든 측정값은 동일한 측정값 그룹에 속해야 하며 그렇지 않은 경우 드릴스루가 실패합니다. 그 이유는 드릴스루가 특정한 측정값 그룹에 대해 내부적으로 수행되며 이 측정값 그룹의 결과만을 반환할 수 있기 때문입니다. 지금부터 이 문서에서 이 그룹을 “대상 측정값 그룹(target measure group)”이라고 부르겠습니다.
차원 특성
RETURN 절에 차원 특성을 지정하면 상세 수준 레코드에 대한 이 특성의 구성원 이름이 드릴스루 결과 열에 포함됩니다. 실제로 특성은 여러 스칼라 값을 포함하는 복잡한 엔터티입니다. 따라서 RETURN 절은 이 스칼라 값을 추출할 수 있는 기능을 지원합니다.
- Key(attr, N): 구성원의 혼합 키의 N번째 부분을 반환합니다.
- Name(attr): 구성원의 이름을 반환합니다.
- MemberValue(attr): 구성원의 값을 반환합니다. 이것이 기본값입니다.
- Caption(attr): 구성원의 캡션을 반환합니다.
- UniqueName(attr): 구성원의 고유 이름을 반환합니다.
- CustomRollup(attr): 구성원의 사용자 지정 롤업 식을 반환합니다.
- CustomRollupProperties(attr): 구성원의 사용자 지정 롤업 속성을 반환합니다.
- UnaryOperator(attr): 구성원의 단항 연산자를 반환합니다.
다음 예제는 복잡한 RETURN 절을 보여줍니다.
DRILLTHROUGH MAXROWS 10 SELECT {[Measures].[Store Sales]} on 0, {[Customer].[Geography].[USA]} on 1 FROM [Sales] WHERE {[Time].[Year].[2005]} RETURN [Measures].[Store Sales] AS [Sales], [Measures].[Store Cost] AS [Cost], [Measures].[Unit Sales] AS [Units Sold], Caption[Customer].[Name]) AS [Customer Name], Caption([Store].[Name]) AS [Store Name], Caption([Product].[Name]) AS [Product Name], MemberValue([Time].[Day]) AS [Date Of Sale]
RETURN 절은 DRILLTHROUGH 문에서 옵션입니다. 이 절을 지정하지 않으면 다음 열을 포함하는 기본 RETURN 절이 사용됩니다.
- 대상 측정값 그룹의 각 입도(granularity) 특성을 위한 열
- 대상 측정값 그룹의 각 측정값을 위한 열
기본 RETURN 절은 일반적인 팩트 테이블 구조를 나타냅니다. 큐브 디자이너는 다음 단원에 설명된 “기본” 드릴스루 작업을 만들어서 기본 RETURN 절을 오버라이드(override)할 수 있습니다.
드릴스루 작업
작업은 큐브의 특정 부분에 대해 수행되는 미리 정의된 동작입니다. 클라이언트 응용 프로그램은 지정된 범위 내에서 서버에 작업 목록을 쿼리한 후 이 목록을 사용자에게 노출할 수 있습니다(MDSCHEMA_ACTIONS 스키마 행 집합 사용). 일반적으로 작업은 사용자가 그렇게 하도록 선택한 경우에만 클라이언트 응용 프로그램에 의해 수행됩니다.
작업의 대상은 이 작업이 적용되는 큐브 부분입니다. 이 대상은 큐브, 차원, 계층, 수준, 차원 구성원, 계층 구성원, 수준 구성원, 집합, 셀 등이 될 수 있습니다. MDX 식을 사용하면 셀을 대상으로 하는 작업을 큐브의 하위 스페이스로 더욱 제한할 수 있습니다.
작업 유형은 클라이언트 응용 프로그램이 작업 식으로 수행해야 하는 동작을 나타냅니다. 일반적인 작업 유형은 URL, HTML, 문, 행 집합, 데이터 집합 등입니다. URL 작업의 작업 식은 URL일 수 있습니다. 행 집합 작업의 작업 식은 분석 서버가 행 집합을 반환할 때 수행되는 쿼리일 수 있습니다.
Analysis Services 2005에서는 드릴스루라는 새로운 작업 유형을 소개합니다. 드릴스루 작업의 대상은 큐브의 셀만 될 수 있습니다. MDSCHEMA_ACTIONS 스키마 행 집합은 이러한 셀을 행 집합 작업으로 노출합니다. 작업 식은 클라이언트 응용 프로그램에 의해 실행될 수 있는 DRILLTHROUGH 문이며 결과 행 집합이 사용자에게 표시됩니다.
확실히 드릴스루는 작업 프레임워크에 매우 적합합니다. 하지만 드릴스루 작업의 진정한 이점은 DRILLTHROUGH 문의 반환 열을 미리 정의할 수 있는 기능을 큐브 디자이너에게 제공한다는 것입니다(그림 2). 이것은 데이터베이스 관리자가 Analysis Manager의 드릴스루 옵션 대화 상자에서 테이블과 열을 지정하는 Analysis Services 2000 환경과 유사합니다.
그림 2. AdventureWorks에서의 드릴스루 작업을 나타내는 작업 탭(이미지를 확대하려면 클릭하십시오.)드릴스루 작업에는 Default라고 불리는 흥미로운 Boolean 속성이 있습니다. 큐브에는 Default=true인 여러 드릴스루 작업이 있을 수 있습니다. Default 속성은 작업 자체의 동작(behavior)에는 영향을 미치지 않습니다. RETURN 절이 포함되지 않은 DRILLTHROUGH 문을 클라이언트가 보내면 서버는 드릴스루가 수행 중인 셀 좌표를 포함하는 대상 하위 스페이스가 있는 기본 드릴스루 작업을 검색합니다. 이 작업이 발견되면 서버가 이 작업의 반환 열을 사용합니다. 이 기준을 충족시키는 드릴스루 작업이 여럿인 경우 서버가 임의로 하나를 선택합니다. 따라서 큐브 디자이너가 기본 드릴스루 작업을 사용하여 기본 RETURN 절을 오버라이드(override)할 수 있습니다.
시나리오
이 단원에서는 Analysis Services 2005에서 드릴스루를 효과적으로 설정하는 방법을 설명하기 위해 몇몇 일반적인 예제를 사용합니다. 드릴스루를 설정하기 위한 일반적인 단계는 다음과 같습니다.
- 드릴스루 반환 열을 포함하도록 큐브 스키마를 수정합니다. 모든 반환 열은 특성 또는 측정값으로 포함되어야 합니다.
- 모든 반환 열을 포함하는 기본 드릴스루 작업을 만듭니다.
차원 해제
AdventureWorks 예제 데이터베이스에서 다음과 같은 스키마를 생각해 보겠습니다(그림 3).
그림 3. AdventureWorks 예제 데이터베이스 스키마(이미지를 확대하려면 클릭하십시오.)
FactResellerSales 팩트 테이블에는 다양한 차원 테이블을 가리키는 ProductKey, OrderDateKey, ResellerKey 등의 외래 키가 있습니다. 이 테이블에는 또한 이 트랜잭션에 관련된 특정한 매출 주문을 참조하는 두 열(SalesOrderNumber 및 SalesOrderLineNumber)이 있습니다. 일반적으로 차원 분석의 관점에서는 이 열이 별로 흥미롭지 않지만 드릴스루 결과의 반환 열에 대해서는 이 열이 상당한 흥미롭습니다. 왜냐하면 이 열은 특정 셀에 관련된 트랜잭션에 대해 가장 상세한 정보를 제공하기 때문입니다.
SalesOrderNumber 및 SalesOrderLineNumber를 반환 열로 포함시키려면:
- 이 열을 특성으로 하는 차원을 만듭니다.
- 이 차원을 큐브에 추가합니다.
- 큐브 편집기의 차원 사용(Dimension Usage) 탭에서 이 차원을 측정값 그룹에 차원 해제(또는 팩트 차원)로 추가합니다.
- 특성을 기본 드릴스루 작업에 포함시킵니다.
차원 해제의 계수는 팩트 테이블과 동일하기 때문에 차원 해제는 일반적으로 큽니다. 크기에 관심이 있는 큐브 디자이너는 차원의 저장 모드를 ROLAP로 설정할 수 있습니다. 차원 해제를 쿼리하지 않는 차원 분석은 영향을 받지 않지만 결과적으로 드릴스루 쿼리는 더 느려집니다.
차원 해제는 팩트 테이블의 기본 키이기 때문에 팩트 테이블의 다른 드릴스루 반환 열도 여기에 추가될 수 있습니다.
대체 팩트 테이블
어떤 시나리오에서는 대상 측정값 그룹이 아닌 다른 팩트 테이블에서 셀의 드릴스루 결과를 가져오는 경우가 있습니다. 예를 들어, 다음과 같은 스키마를 생각해 보겠습니다(그림 4).
sales_by_day 팩트 테이블은 매일의 매출 트랜잭션을 포함합니다. sales_by_month 팩트 테이블은 sales_by_day를 요약한 것이며 매월 총 매출을 포함합니다. 일반적인 차원 분석의 경우는 월별 매출 쿼리만으로 충분합니다. 왜냐하면 큐브가 sales_by_month 팩트 테이블을 기반으로 구축되기 때문입니다. 더욱이 sales_by_day 팩트 테이블은 훨씬 더 크며 이 테이블을 기반으로 큐브를 관리하는 것이 더 비용이 듭니다. 반대로 드릴스루 요청이 sales_by_day 팩트 테이블에서 행을 반환하는 것은 매우 적절합니다. 왜냐하면 이 테이블에는 특정 셀에 관련된 트랜잭션에 대해 가장 상세한 정보가 포함되어 있기 때문입니다.
그림 4. 대상 측정값 그룹이 아닌 다른 테이블에서 드릴스루 결과를 가져오는 방법을 보여주는 스키마(이미지를 확대하려면 클릭하십시오.)sales_by_day의 행을 드릴스루 결과로 반환하려면:
- sales_by_day에 따라 큐브에 새 측정값 그룹을 만듭니다. 필요한 측정값을 드릴스루 반환 열로서 포함시킵니다. 큐브 디자이너의 차원 사용(Dimension Usage) 탭에서 모든 차원에 적합하게 입도(granularity)를 설정합니다.
- 선택적으로 저장 모드를 ROLAP로 설정하여 처리 및 저장 비용을 최소화합니다.
- 이 측정값 그룹의 측정값을 다른 차원 특성과 함께 기본 드릴스루 작업에 포함시킵니다. 위에서 설명했듯이 다중 측정값 그룹에서 측정값을 포함시킬 수는 없습니다.
다중 측정값 그룹
차원이 다른 다중 측정값 그룹(예: Sales 및 Inventory)이 큐브에 있는 경우 일반적으로 대상 측정값 그룹에 따라 드릴스루 반환 열이 다릅니다.
다중 측정값 그룹이 있는 큐브에서 드릴스루를 활성화하려면:
- 드릴스루 반환 열을 특성 또는 측정값으로서 큐브 스키마에 추가합니다.
Default=true
인 여러 드릴스루 작업을 각 측정값 그룹에 대해 하나씩 만듭니다.- 각 작업에 대해 대상을 다음과 같은 설정합니다:
MeasureGroupMeasures("<측정값 그룹 이름>")
. 이렇게 하면 작업의 범위가 해당 측정값 그룹으로 제한됩니다. - 대상 측정값 그룹에 적합하도록 각 작업에 대해 반환 열을 설정합니다.
마이그레이션
드릴스루의 상당한 구조적 변경으로 인해 Analysis Services 2000 데이터베이스의 드릴스루 설정이 Analysis Services 2005 업그레이드나 마이그레이션에 의해 유지되지 않습니다. 이 경우 드릴스루 설정을 수동으로 마이그레이션해야 합니다.
다음은 드릴스루 설정을 마이그레이션하기 위해 수행해야 하는 대략적인 단계입니다.
- 먼저 AS 2000 데이터베이스를 AS 2005 서버로 마이그레이션합니다. 드릴스루 설정이 유지되지 않습니다.
- Analysis Manager를 사용하여 AS 2000 데이터베이스에 연결합니다.
- 마이그레이션된 AS 2005 데이터베이스에 Business Intelligence Development Studio를 사용하여 연결합니다.
- Analysis Services 2000 데이터베이스에서 드릴스루 설정을 검사합니다. 반환 열이 차원 특성 또는 측정값으로 큐브 스키마에 이미 있으면 5-6단계를 건너뜁니다.
- AS 2005 데이터베이스에서 DataSourceView를 편집합니다. 이 마이그레이션에는 차원 특성이나 측정값에 의해 사용되는 테이블과 열만 포함된다는 것을 알 수 있습니다. 추가적인 특성이나 측정값을 포함하기 위해 먼저 이 특성이나 측정값을 DataSourceView에 추가해야 합니다. DataSourceView 디자이너의 표면을 마우스 오른쪽 단추로 클릭하고 "새로 고침..."을 선택합니다. 그러면 DataSourceView가 어떻게 변경될지를 보여주는 대화 상자가 나타납니다(그림 5). 확인을 눌러 변경 내용을 수락합니다.
그림 5. 변경할 내용을 보여주는 데이터 소스 보기 새로 고침(Refresh Data Source View) 대화 상자(이미지를 확대하려면 클릭하십시오.)
- 아직 큐브 스키마에 없는 모든 드릴스루 반환 열이 다음 중 하나로 추가되어야 합니다. 이 시나리오에 대한 이전 단원의 지침에 따라 올바른 방법을 선택합니다.
- 새로운 차원
- 기존 차원에 있는 새로운 특성
- 새로운 측정값 그룹
- 기존 측정값 그룹에 있는 새로운 측정값
- AS 2000 큐브의 드릴스루 설정에 해당하는 모든 특성 및 측정값을 포함하는 기본 드릴스루 작업을 정의합니다. 이 큐브에 다중 측정값 그룹이 있는 경우(이 방식으로 가상 큐브가 마이그레이션) 각 측정값 그룹에 대해 드릴스루 작업을 정의해야 합니다.
이 단계를 마치면 AS 2005 큐브의 드릴스루가 활성화되어야 하고 DRILLTHROUGH 큐브에 사용되는 모든 DRILLTHROUGH 문이 동일한 결과를 반환해야 합니다.
결론
드릴스루는 상당수 Analysis Services 응용 프로그램에서 중요한 분석 도구입니다. Analysis Services 2005는 응용 프로그램 작성을 단순화해주는 드릴스루 작업을 비롯하여 새로운 드릴스루 아키텍처를 제공합니다.
댓글 없음:
댓글 쓰기