Analysis_Services_데이터베이스_설계_가이드.ppt

Download Report

Transcript Analysis_Services_데이터베이스_설계_가이드.ppt

Analysis Services DB
설계 가이드
권오주
대표시삽
www.olapforum.com
프론트-엔드 작업과
미래의 재설계 작업을
최소화하도록
데이터베이스에 가능한한 많은
스트럭처와 인텔리전스를
반영한다
2
설계 목적


3
관계형 설계와 분석 서비스 설계의 결합
일반적으로 관계형 설계는 분석 서비스
설계를 지원. 그러나, 분석 서비스의 특성을
파악해야 보다 완전
뷰의 사용

차원 테이블과 사실 테이블에 대한
사용자의 접근 제공



4
사용자로부터 물리적 데이터베이스의 격리
접근에 대한 영향을 주지 않고 물리적
데이터베이스의 변경 용이
사용자 친화적 커스터마이징
차원 테이블 칼럼들






5
정수형 대리키(Surrogate Key)
소스 시스템으로부터의 키(App Key)
설명 (하나 이상 가능)
정렬
단항 연산자(Unary operator)
MDX 수식 칼럼
정수형 대리키의 사용





6
보다 빠른 조회(Lookup)
다중 데이터 소스로부터의 키 충돌 제거
지능적인 키의 사용으로 미래의 문제점
제거
Identity 속성으로 최상의 구현
정수형 키를 사용하여 사실 테이블 적재
사용자 지정 집합과 롤업





7
하나의 계층구조 내에 사용자 지정 집합과
롤업 포함 가능
MDX 수식과 단항 연산자를 사용하여 구현
차원 내에 포함되면 구성원들은 자동으로
해당 차원을 포함하는 임의의 큐브의
일부가 됨
Time 차원과 재무 응용프로그램의 경우
매우 중요
주의 – MDX 구문 체크 없음
Product Family 테이블
8
Product Item 테이블
9
Product 차원
10
Time 테이블 칼럼







11
현재일자, 현재월 등
DOW, DOM, DOQ, DOY, MOQ 등
자식 구성원의 수 – 주를 구성하는 일자수
근무일수, 영업일수 등
시작일자, 종료일자
주말, 휴일
기타 – 요일, 날씨 등등
현재 시간 결정




12
각 Time 테이블에 Current Time 칼럼 생성
Current Time 칼럼을 기반으로 Time
차원의 각 수준에 Current 속성 생성
SQL을 이용하여 Current Time 칼럼을
업데이트
증분 업데이트 옵션으로 Time 차원 처리
Time Calculations – MDX

현재 일자
Filter(
[Time.Standard].[Day].Members,
[Time.Standard].CurrentMember.Properties("Current") = "-1"
).Item(0)

이전 일자
Filter(
[Time.Standard].[Day].Members,
[Time.Standard].CurrentMember.Properties("Current") = "-1"
).Item(0).Lag(1)
13
Time Calculations – MDX

전년도 동일 기간
ParallelPeriod(
[Time.Standard].[Year],
1,
Filter(
[Time.Standard].[Day].Members,
[Time.Standard].CurrentMember.Properties("Current") = "-1"
).Item(0)
)
14
Time Calculations - MDX

Year-To-Date
Sum(
PeriodsToDate(
[Time.Standard].[Year],
Filter(
[Time.Standard].[Day].Members,
[Time.Standard].CurrentMember.Properties("Current") = "-1"
).Item(0)
)
)
15
Time Calculations - MDX

전년도 Year-To-Date
Sum(
PeriodsToDate(
[Time.Standard].[Year],
ParallelPeriod(
[Time.Standard].[Year],
1,
Filter(
[Time.Standard].[Day].Members,
[Time.Standard].CurrentMember.Properties("Current") = "-1"
).Item(0)
)
)
)
16
Time Calculations - MDX

성장 (Change)
[Time.Standard].[Current] - [Time.Standard].[Previous]

%성장 (Change%)
iif(
CoalesceEmpty(
[Time.Standard].[Previous],
0
) = 0,
NULL,
[Time.Standard].[Change] /
[Time.Standard].[Previous]
17
)
장점


18
SQL과 AS2K 모두 현재 시간을 결정하기
위하여 동일한 소스를 사용
DSO 또는 분석관리자를 통해 기본
구성원을 변경할 필요가 없음
계층 구조

기본적으로 각 차원을 하나의 명시적인
계층 구조를 갖도록 생성 및 관리



19
Std 또는 Standard로 생성
나중에 데이터베이스를 재구축 (차원 재생성)
하지 않고도 계층 구조 추가 가능
차원이 다중 계층구조를 가지면 항상 All
수준을 가진다
Unknown 구성원의 사용

모든 수준에 unknown 구성원 포함



20
총계 일치
데이터의 완전한 적재 가능
미지의 레코드에 대한 Granularity 제공을
위한 별도의 사실 테이블과 파티션 생성 가능
Property (Attribute) 타입

Unconstrained – Member Property?


차원 구성원의 어트리뷰트는 임의의 값이 될 수 있다
Constrained – (Virtual?) Dimension


차원의 어트리뷰트는 가능한 값들의 집합으로
제한된다
어트리뷰트는 차원간 관계(Relationship)가 된다
Dimension
{
21
Every
Some
Dimension
}
Attribute
{
One
Many
}
Attribute 예
Description
Product
{ }
Line
{ }
Family
Color
Size
Unconstrained
Product
Manager
Many
{ }
Size Group
{ }
Size Number
Product
Color
Every
{ }
Item
Some
Product
Size
Constrained
22
One
속성(Properties)



데이터 필터링에 탁월
대부분의 프론트 엔드가 제공하는 보완
정보 제공
가상 차원에 사용되는 대부분의 속성들에
대하여 제약 차원(Constrained
Dimensions) 사용


23
데이터 무결성 강제
제약 조건을 정의할 필요성 제거
Type 속성 : Caption



24
차원의 증분 업데이트로 이름 변경 반영
Name 칼럼을 소스 키로 설정하고
MDX에서 사용 가능
차원의 각 수준에 대하여 설정
Type 속성 : Caption



차원 테이블에 변경 이름을 가질 칼럼 생성
해당 칼럼을 구성원 속성으로 사용
Type을 Caption으로 설정



25
참고 : Caption 속성
차원 테이블의 칼럼 값 변경
증분 업데이트 옵션으로 차원 처리
Type 속성 : Caption
26
Member Name Column

CAST(”Relational_Table_Name”.” Member_Code”
AS VARCHAR(10)) + ' - ' +
isNull(”Relational_Table_Name”.”Member_Label”,
isNull(”Relational_Table_Name”.” Member_Name”,
‘**미정의**’))

27
특히, Name이나 Label 필드가 NULL을
포함할 수 있을 때 레코드 식별을 보다 쉽게
한다
사실 테이블 설계

28
datetimestamp 또는 batch id로써 함께
처리되는 레코드들을 식별
사실 테이블 데이터 수정

재적재


오프셋과 새로운 트랜잭션 사용



29
유일한 이슈는 삭제할 레코드를 식별하는 것
별도의 사실 테이블과 파티션 생성
트랜잭션이 적재인지 수정인지 식별하는 정수
칼럼 추가
측정값으로서 데이터베이스에 추가하여,
분석에서 카운트를 사용시 올바른 카운트를
얻을 수 있도록 한다
Unknown 구성원의 처리




30
_Idx, _Code, 측정값 필드들로 구성되는
별도의 사실 테이블 생성
Unknown 구성원을 가지는 임의의
레코드들을 사실 테이블에 처리
별도의 파티션 생성
해당 큐브와 Unknown 파티션에 대하여
드릴스루 옵션 설정
Unknown 사실 테이블 설계
31
Unknown 사실 테이블
32
장점




33
unknown 구성원에 대한 노출 제공
(데이터 품질)
양질 데이터와 불량 데이터 사이의
물리적인 분리 제공
불량 데이터의 효과를 쉽게 평가
정상적인 사실 테이블에 대한 수정
트랜잭션 처리 가능
파티션 - 개념
34
파티션 - 적용
35
파티션 전략





36
일반적으로 파티션 전략은 관계형과
다차원에 대하여 동일해야 함
비즈니스 또는 처리 판단에 따른
데이터베이스의 부분집합
처리 시간 감소
서로 다른 집계 전략 가능
쿼리 성능 개선
파티션 전략


37
파티션에 대한 데이터 슬라이스 설정 –
설정하지 않으면 성능향상 없음
처리해야 할 메타데이터 증가로 관리
작업은 느려질 수 있음
기간별 파티션

일정 기간 단위로 파티션



38
오래된 데이터 제거 용이
오래된 데이터에 대한 집계 전략을 다르게
가능
다른 차원들로부터의 레코드 유지관리는 더
어려움
기간별 파티션 전략 예
Month 1
이전 2년 데이터 : ROLAP
Month 2
Month 24
Month 25
Month 25
Month 26
최근 3년 데이터
: MOLAP
Month 60
Month 61
39
새로운 월에 대한
새 파티션
DSO 선언
Public dsoSrv As DSO.Server
Public dsoDtb As DSO.MDStore
Public dataDtb As ADODB.Connection
Dim dsoDB As DSO.MDStore
40
DSO OLAP 연결
Public Function OpenOLAPSrv(sSrv As String) As Boolean
'글로벌 오브젝트의 초기화
Set dsoSrv = Nothing
Set dsoDB = Nothing
'서버와 연결 인스턴스 생성
Set dsoSrv = New DSO.Server
dsoSrv.Connect (sSrv)
OpenOLAPSrv = True
End Function
41
DSO 파티션 처리
Public Sub ProcessCubes()
Dim sCube As Variant
Dim dsoCube As DSO.MDStore
Dim dsoPart As DSO.MDStore
Dim dsoSrcPart As DSO.MDStore
Dim dsoDim as DSO.Dimension
Dim dsoLev as DSO.Level
Dim rstRun As ADODB.Recordset
Dim sName As String
‘다음 슬라이드의 코드
End Sub
42
DSO 파티션 처리
For Each sCube In oCubes
Set dsoCube = dsoDtb.MDStores(sCube.Name)
Set dsoSrcPart = dsoCube.MDStores(dsoCube.Name)
UT_OpenRecordSet rstRun, dataDtb, "Get_Months"
Do While rstRun.EOF <> True
sName = "Fact_Sales_" + rstRun!Month_Name
If Not dsoCube.MDStores.Find(sName) Then
Set dsoPart = dsoCube.MDStores.AddNew(sName)
dsoSrcPart.Clone dsoPart, cloneMajorChildren
dsoPart.SourceTable = Replace(dsoPart.SourceTable, dsoCube.Name, sName, 1)
dsoPart.FromClause = Replace(dsoPart.FromClause, dsoCube.Name, sName, 1)
dsoPart.JoinClause = Replace(dsoPart.JoinClause, dsoCube.Name, sName, 1)
‘슬라이스 설정
...
Set dsoDim = dsoSrcPart.Dimensions(“Time.Standard”)
Set dsoLev = dsoDim.Levels("Month")
dsoLev.SliceValue = rstRun!Month_Name
End If
Set dsoPart = dsoCube.MDStores("Fact_Sales_" + rstRun!Month_Name)
dsoPart.Process processFull
rstRun.MoveNext
Loop
43
Next
현재 파티션


현재 파티션과 이력 파티션 생성
다음 적재 이전에 현재를 이력에
병합하거나 덮어쓴다


44
다른 전략과 조합 가능
잘못되었을 때 현재 데이터 제거 용이
2개 차원 파티션




45
하나의 차원은 Time이어야 함
데이터 가용성이 시간에 따라 변하는 다른
차원 선택 – 조직 또는 지역
SQL과 DSO는 더 복잡해짐
평균 쿼리 시간은 감소
빈 파티션(Empty Partition)


46
데이터베이스에 영향을 주지 않고 처리
테스트 할 때 사용
새로운 파티션을 생성하기 위한 기초로서
사용
가상 큐브


47
사용자로부터 물리적 큐브의 격리
분석을 위해 서로 다른 차원성을 가지는
별도의 큐브들을 결합
DSO 가상 큐브
Public Sub ProcessVirtualCubes()
Dim cubeCnt As Integer
For cubeCnt = 1 To dsoDtb.MDStores.Count
Set dsoCube = dsoDtb.MDStores(cubeCnt)
If dsoCube.SubClassType = sbclsVirtual Then
dsoCube.Process processFull
End If
Next cubeCnt
End Sub
48
기타 고려사항

큐브와 차원에 대한 원본으로서 뷰 사용




스노우플레이크 사용



49
테이블과 큐브 사이의 추상계층 역할
큐브 파티션보다 효과적인 WHERE절 사용
뷰 안의 로직 : 구성원 이름, 속성
정규화된 설계의 장점
각 수준별 고유한 키, 임의의 수준의
Granularity 제공
But... Trade-off
기타 고려사항

클라이언트 S/W 선택 신중



수준 이름



사용자 친화적인 수준 이름
수준 이름 변경 최소화 : 차원, 큐브, MDX 참조
Count 실제 예측값 입력


50
Custom MDX 지원 ?
Analysis Services 전용 ?
차원 구축시 Member Count 자동 저장
실제 추정치 입력 -> 저장소 설계 마법사 작업
개선
기타 고려사항

그룹핑 수준 수작업



64,000미만의 자식 구성원
그룹핑 자동화 ?
수준의 추가 및 직접 조작
LEFT("CustomerDimTable"." CustomerName", 1)

구성원 속성 사용 신중


51
서버 기동시 차원 구성원 키, 이름, 속성의
메모리 로딩
3GB RAM 제한
기타 고려사항

MDX의 역할 이해


MDX를 사용하지 않는 OLAP Solution ?
주의 사항

대용량 차원 -> 별도의 메모리 공간 사용
(VLDM) -> Buggy ! 피하라!



52
HKEY_LOCAL_MACHINE\SOFTWARE\Microsof
t\OLAP Server\CurrentVersion\VLDMThreshold
: 4,000,000 기본값
ROLAP 차원 -> ROLAP 큐브 -> 성능 손해
데이터 원본 이름
위험 관리
관리요소
ERP와의 연계에
따른 충분한 운영
Test의 미비
53
심
확
각 률
성
H M
Mitigation/Contingence
Plan
영향
ERP 실
운영환경에서의
Test 부재
 향후 관리위험

현상태의 ERP Test Data와
DW Data의 동기화
 7월이후 Production Mode
로서 DW 운영 및 보완
