61
MDX MDX 의 의의의 의의 의 의의의 의의 의의의 의의의 의의의의 의의 의의의의 의의 Microsoft Global MVP Microsoft Global MVP www.olapforum.com www.olapforum.com

MDX 의 이해와 활용

  • Upload
    nasnan

  • View
    79

  • Download
    7

Embed Size (px)

DESCRIPTION

MDX 의 이해와 활용. 권오주 올랩포럼 시삽 Microsoft Global MVP www.olapforum.com. 소개 내용. MDX 의 의의 MDX 기본 이해 MDX 기본 활용 MDX 고급 활용. MDX 의 의의. MDX 의 이해. MDX = M ulti D imensional e X pressions OLAP 데이터베이스를 모델링하고 쿼리하는 구문 다차원 오브젝트 이해 큐브 , 차원 , 수준 , 구성원 , 셀 , … 다차원 공간 탐색 및 이동 - PowerPoint PPT Presentation

Citation preview

Page 1: MDX 의 이해와 활용

MDXMDX 의 이해와 활용의 이해와 활용

권오주권오주

올랩포럼 시삽올랩포럼 시삽

Microsoft Global MVPMicrosoft Global MVP

www.olapforum.comwww.olapforum.com

Page 2: MDX 의 이해와 활용

소개 내용소개 내용

MDXMDX 의 의의의 의의

MDX MDX 기본 이해기본 이해

MDX MDX 기본 활용기본 활용

MDX MDX 고급 활용고급 활용

Page 3: MDX 의 이해와 활용

MDXMDX 의 의의의 의의

Page 4: MDX 의 이해와 활용

MDXMDX 의 이해의 이해

MDX = MDX = MMulti ulti DDimensional eimensional eXXpressionspressions OLAP OLAP 데이터베이스를 모델링하고 쿼리하는 데이터베이스를 모델링하고 쿼리하는

구문구문 다차원 오브젝트 이해

큐브 , 차원 , 수준 , 구성원 , 셀 , … 다차원 공간 탐색 및 이동

OLAP Services OLAP Services 고급 구현 필수고급 구현 필수 복잡한 비즈니스 로직 구현 다양한 부가적 기능

OLE DB for OLAP OLE DB for OLAP 스펙의 부분스펙의 부분 Provider (Analysis Services, TM1, SAS, WhiteLight, Provider (Analysis Services, TM1, SAS, WhiteLight,

SAP, …)SAP, …)

Page 5: MDX 의 이해와 활용

OLE DB for OLAP OLE DB for OLAP 지원지원

지원 선언 업체 리스트 지원 선언 업체 리스트 (2002.06 (2002.06 기준기준 )) Acuity Group, Andyne Computing Limited, Application

Consulting Group, Inc. (ACG), Applix TM1 Software, Arbor Software, arcplan, Inc., AVOCA Systems Limited, BAAN, Brio Technology, Business Objects, Cognos, Comshare, Gentia Software, Hyperion Software, Information Advantage Inc., International Software Group, InterNetivity, Intersolv, Inc., IQ Software, Knosys, Microsoft, MIS AG, NCR,Panorama Software Systems Ltd., Pilot Software, Sagent Technology, Inc., SAS Institute, Seagate Software, Silvon Software, Simba Technologies, Speedware Corporation, WhiteLight Systems, X-Tension, ...

Page 6: MDX 의 이해와 활용

MDX MDX 쿼리가 가능한 데이터베이스쿼리가 가능한 데이터베이스

Analysis Services, TM1, SAS, SAP, Whitelight, Silvon, Analysis Services, TM1, SAS, SAP, Whitelight, Silvon, Harmony, NCR, Seagate, Essbase, ...Harmony, NCR, Seagate, Essbase, ...

제한된 범위 내에서 업체별로 제한된 범위 내에서 업체별로 MDXMDX 를 확장해 를 확장해 기능 강화기능 강화 (Superset, Subset)(Superset, Subset)

Page 7: MDX 의 이해와 활용

Analysis Services MDX Analysis Services MDX 활용활용

동작동작 계산된 구성원계산된 구성원 계산된 셀계산된 셀 명명된 집합명명된 집합 사용자 롤업 수식사용자 롤업 수식 사용자 지정 구성원 수식사용자 지정 구성원 수식 차원 보안의 사용자 지정 규칙차원 보안의 사용자 지정 규칙 셀 보안의 사용자 지정 규칙셀 보안의 사용자 지정 규칙 동적인 속성 설정동적인 속성 설정

Page 8: MDX 의 이해와 활용

MDXMDX 의 활용 유형의 활용 유형

MDX StatementMDX Statement 브라우징용 쿼리 언어 (SQL 쿼리와 유사 )

완전한 구문 (SELECT…FROM) 클라이언트 Apps 용 도구 완전한 보고서 형태 값들 반환 (Data Set)

MDX ExpressionMDX Expression 다차원 수식 ( 스프레드시트 수식과 유사 ) 비즈니스 모델링

계산된 구성원 , 기본 구성원 , 차원 / 큐브 속성 생성 및 설정 등에 활용

하나의 단일 값 반환

Page 9: MDX 의 이해와 활용

MDX MDX 기본 이해기본 이해

Page 10: MDX 의 이해와 활용

MDX MDX 쿼리쿼리

SELECT SELECT <Axis_Spec><Axis_Spec> ON COLUMNS, ON COLUMNS, <Axis_Spec><Axis_Spec> ON ROWS, … ON ROWS, …FROM FROM CubeCubeWHERE WHERE <Slicer_Spec><Slicer_Spec>

128128 개의 축 개의 축 (( 하나의 축에 차원 중첩 가능하나의 축에 차원 중첩 가능 )) 쿼리 실행쿼리 실행

축 생성 셀의 데이터 값 획득

예예 ) 97, 98) 97, 98 년 년 CACA 의 판매수량의 판매수량 , , 판매액판매액SELECT { [Measures].[Unit Sales], [Measures].[Store Sales] } ON COLUMNS, { [Time].[1997], [Time].[1998] } ON ROWS FROM Sales WHERE ( [Store].[USA].[CA] )

Page 11: MDX 의 이해와 활용

MDX MDX 쿼리 실행쿼리 실행

GroceriesGroceries

ClothingClothingAppliancesAppliances

SalesSales CostCost UnitsUnits

9797

9898

9999

9696

9595

20201010

Page 12: MDX 의 이해와 활용

MDX MDX 구조구조

구성원구성원 (Member) (Member) [ 홍두깨 ], [1991].[Q1].[1 월 ]

튜플튜플 (Tuple)(Tuple) ([ 홍두깨 ], [ 서울 ]), ([ 컴퓨터 ], [1991])

집합집합 (Set)(Set) {[ 홍두깨 ], [ 홍길동 ]} {([ 컴퓨터 ],[ 서울 ]), ([ 프린터 ],[ 경기 ])} [1991].Children TopCount([ 영업부 ].Members, 10, [ 판매액 ])

Page 13: MDX 의 이해와 활용

다차원 공간다차원 공간

구성원 구성원 (Member)(Member) 수준 수준 (Level)(Level) 차원 차원 (Dimension)(Dimension) 큐브 큐브 (Cube)/(Cube)/ 파티션 파티션 (Partition)(Partition) 셀셀

셀 주소 (Cell Address) 상대 주소 (Relative Address) 현재 셀 (Current Cell)

Page 14: MDX 의 이해와 활용

셀 주소셀 주소

9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

(Products.Food , Measures.Units ,Time. 98)(Products.Food , Measures.Units ,Time. 98)(Products.Food , Measures.Sales ,Time. 97)(Products.Food , Measures.Sales ,Time. 97)(Products.[Non-Cons] , Measures.Cost ,Time.95)(Products.[Non-Cons] , Measures.Cost ,Time.95)

9696

9595

Page 15: MDX 의 이해와 활용

9898

FoodFood

UnitsUnits

?

?

(Products.Food, Measures.Units, Time.98.PrevMember)(Products.Food, Measures.Units, Time.98.PrevMember)(Products.Food, Measures.Units, Time.98.NextMember)(Products.Food, Measures.Units, Time.98.NextMember)

상대 주소상대 주소

Page 16: MDX 의 이해와 활용

9898

FoodFood

UnitsUnits

?

(Products.Food, Measures.Units, Time.98.PrevMember)(Products.Food, Measures.Units, Time.98.PrevMember)

?

(Products.Food, Measures.Units, Time.98.NextMember)(Products.Food, Measures.Units, Time.98.NextMember)

?

(Products.Food, Measures.Units.PrevMember, Time.98.Lag(3))(Products.Food, Measures.Units.PrevMember, Time.98.Lag(3))

(Products.Food, Measures.Units.PrevMember, Time.98.Lead(-3))(Products.Food, Measures.Units.PrevMember, Time.98.Lead(-3))또는또는

상대 주소상대 주소

Page 17: MDX 의 이해와 활용

현재 셀현재 셀

97

98

99

Non-Cons.

FoodDrink

96

95

Current Cell :( Product.CurrentMmeber, Time.CurrentMember, Measures.CurrentMember )

SalesCost

UnitsGrowth

Page 18: MDX 의 이해와 활용

9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

9696

9595

WITH MEMBER Measures.Growth AS ‘(Time.CurrentMember,Measures.Sales) - (Time.CurrentMember.PrevMember,Measures.Sales)’SELECT Time.Year.Members ON ROWS, AddCalculatedMembers(Measures.Members) ON COLUMNS FROM Sales

1515 1313 55

1717 1313 66

2222 1111 77

2929 99 99

3030 1010 88GrowthGrowth

Time.95Time.95

EmptyEmpty

1515

Time.CurrentMemberTime.CurrentMember

Time.CurrentMember.PrevMemberTime.CurrentMember.PrevMember

판매액의 전기 대비 성장률판매액의 전기 대비 성장률 ??

Page 19: MDX 의 이해와 활용

Time.96

Time.95

15

2

15 13 5

17 13 6

22 11 7

29 9 9

30 10 8

9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

9696

9595

GrowthGrowth

WITH MEMBER Measures.Growth AS ‘(Time.CurrentMember,Measures.Sales) - (Time.CurrentMember.PrevMember,Measures.Sales)’SELECT Time.Year.Members ON ROWS, AddCalculatedMembers(Measures.Members) ON COLUMNS FROM Sales

Time.CurrentMemberTime.CurrentMember

Time.CurrentMember.PrevMemberTime.CurrentMember.PrevMember

Page 20: MDX 의 이해와 활용

Time.97

Time.96

15

2

5

15 13 5

17 13 6

22 11 7

29 9 9

30 10 8

9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

9696

9595

GrowthGrowth

WITH MEMBER Measures.Growth AS ‘(Time.CurrentMember,Measures.Sales) - (Time.CurrentMember.PrevMember,Measures.Sales)’SELECT Time.Year.Members ON ROWS, AddCalculatedMembers(Measures.Members) ON COLUMNS FROM Sales

Time.CurrentMemberTime.CurrentMember

Time.CurrentMember.PrevMemberTime.CurrentMember.PrevMember

Page 21: MDX 의 이해와 활용

Time.98

Time.97

15

2

5

7

15 13 5

17 13 6

22 11 7

29 9 9

30 10 8

WITH MEMBER Measures.Growth AS ‘(Time.CurrentMember,Measures.Sales) - (Time.CurrentMember.PrevMember,Measures.Sales)’SELECT Time.Year.Members ON ROWS, AddCalculatedMembers(Measures.Members) ON COLUMNS FROM Sales

Time.CurrentMemberTime.CurrentMember

Time.CurrentMember.PrevMemberTime.CurrentMember.PrevMember9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

9696

9595

GrowthGrowth

Page 22: MDX 의 이해와 활용

Time.99

Time.98

15

2

5

7

1

15 13 5

17 13 6

22 11 7

29 9 9

30 10 8

WITH MEMBER Measures.Growth AS ‘(Time.CurrentMember,Measures.Sales) - (Time.CurrentMember.PrevMember,Measures.Sales)’SELECT Time.Year.Members ON ROWS, AddCalculatedMembers(Measures.Members) ON COLUMNS FROM Sales

Time.CurrentMemberTime.CurrentMember

Time.CurrentMember.PrevMemberTime.CurrentMember.PrevMember9797

9898

9999

Non-ConsNon-Cons

FoodFoodDrinkDrink

SalesSales CostCost UnitsUnits

9696

9595

GrowthGrowth

Page 23: MDX 의 이해와 활용

MDX MDX 기본활용기본활용

Page 24: MDX 의 이해와 활용

기간 분석 요구 사항기간 분석 요구 사항…… 판매액의 전기 대비 성장률판매액의 전기 대비 성장률 ?? 판매액의 전년 대비 성장률판매액의 전년 대비 성장률 ?? 판매액의 기간 누적판매액의 기간 누적 ?? 재고량재고량

기간별 재고량 ? 기간별 평균 재고량 ? 최근의 평균 재고량 ? 기간 중 최대 / 최소 재고량

Page 25: MDX 의 이해와 활용

판매액의 전기 대비 성장률판매액의 전기 대비 성장률 ??YearYear QuarterQuarter MonthMonth SalesSales ResultResult

19971997 790790Q1Q1 120120

JanJan 3030FebFeb 4040MarMar 5050

Q2Q2 200200AprApr 6565MayMay 4545JunJun 9090

Q3Q3 185185JulJul 5555AugAug 6060SepSep 7070

Q4Q4 285285OctOct 8080NovNov 100100DecDec 105105

10

1010010205

-2045-15-455

108015

Page 26: MDX 의 이해와 활용

Time.CurrentMember, Measures.CurrentMemberTime.CurrentMember, Measures.CurrentMember

Time.CurrentMember,Measures.SalesTime.CurrentMember,Measures.Sales

Time.CurrentMember.PrevMember, Measures.SalesTime.CurrentMember.PrevMember, Measures.Sales

YearYear QuarterQuarter MonthMonth SalesSales ResultResultQ2Q2 200200

AprApr 6565MayMay 4545JunJun 9090

-2045

8015

Page 27: MDX 의 이해와 활용

판매액의 전년 대비 성장률판매액의 전년 대비 성장률 ??YearYear QuarterQuarter MonthMonth SalesSales ResultResult

19971997 790790Q1Q1 120120

JanJan 3030FebFeb 4040MarMar 5050

: : :: : :Q4Q4 285285

OctOct 8080NovNov 100100DecDec 105105

19981998Q1Q1 170170

JanJan 5050FebFeb 5555MarMar 6565

: : :: : :Q4Q4 275275

OctOct 9090NovNov 100100DecDec 8585

20

10

50

-10

Page 28: MDX 의 이해와 활용

(Measures.Sales,Time.CurrentMember) (Measures.Sales,Time.CurrentMember) --(Measures.Sales,ParallelPeriod(Year,1,Time.CurrentMember))(Measures.Sales,ParallelPeriod(Year,1,Time.CurrentMember))

YearYear QuarterQuarter MonthMonth SalesSales ResultResult19971997 790790

Q1Q1 120120JanJan 3030FebFeb 4040MarMar 5050

: : :: : :Q4Q4 285285

OctOct 8080NovNov 100100DecDec 105105

19981998Q1Q1 170170

JanJan 5050FebFeb 5555MarMar 6565

: : :: : :Q4Q4 275275

OctOct 9090NovNov 100100DecDec 8585

20

Page 29: MDX 의 이해와 활용

판매액의 기간 누적판매액의 기간 누적 ??YearYear QuarterQuarter MonthMonth SalesSales YTDYTD

19971997 790790Q1Q1 120120 120

JanJan 3030 30FebFeb 4040 70MarMar 5050 120

Q2Q2 200200 320AprApr 6565 185MayMay 4545 230JunJun 9090 320

Q3Q3 185185 505JulJul 5555 375AugAug 6060 435SepSep 7070 505

Q4Q4 285285 790OctOct 8080 585NovNov 100100 685DecDec 105105 790

Page 30: MDX 의 이해와 활용

Sum(YTD(Time.CurrentMember),Sales)

Time.Mar,Measures.Sales

Time.Feb,Measures.Sales

Time.Jan,Measures.Sales++++

(Time.CurrentMember,Measures.Sales) + (Measures.YTD,Time.CurrentMember.Prevmember)

YearYear QuarterQuarter MonthMonth SalesSales YTDYTD19971997 790790

Q1Q1 120120 120JanJan 3030 30FebFeb 4040 70MarMar 5050 120

Page 31: MDX 의 이해와 활용

재고량 분석 요구사항재고량 분석 요구사항 ......

일정 시간 시점의 재고량 일정 시간 시점의 재고량 (Snapshot)(Snapshot) 비즈니스 분석요구사항비즈니스 분석요구사항

각 기간의 시작과 종결시점의 재고량 각 기간의 평균수량과 재고가치 한 기간에서 최저와 최고일 때의 재고량 전체 재고가치에 대한 각 아이템의 상대적 기여도

문제점 문제점 : : 재고량 측정값은 시간에 대해 누적되지 재고량 측정값은 시간에 대해 누적되지 않는 값않는 값

Page 32: MDX 의 이해와 활용

재고량 재고량 ………… ..문제점 문제점 : : 재고량은 누적되는 값이 재고량은 누적되는 값이 아니다 아니다 .. ….. …YearYear QuarterQuarter MonthMonth InventoryInventory

19971997 790790Q1Q1 120120

JanJan 3030FebFeb 4040MarMar 5050

Q2Q2 200200AprApr 6565MayMay 4545JunJun 9090

Q3Q3 185185JulJul 5555AugAug 6060SepSep 7070

Q4Q4 285285OctOct 8080NovNov 100100DecDec 105105

Page 33: MDX 의 이해와 활용

마감 재고마감 재고

해당기간의 마지막 월의 수량

다음 중 마지막 월의 수량 (Descendants([Time].CurrentMember, [Month])

(Measures.Quantity, Tail(Descendants([Time].CurrentMember, [Month]),1).Item(0))

(Measures.Quantity, ClosingPeriod([Month]))

Page 34: MDX 의 이해와 활용

(Inventory,(Inventory, ClosingPeriod(Month))ClosingPeriod(Month))

50

90

70

105

105YearYear QuarterQuarter MonthMonth InventoryInventory ResultResult

19971997 790790Q1Q1 120120

JanJan 3030 30FebFeb 4040 40MarMar 5050 50

Q2Q2 200200AprApr 6565 65MayMay 4545 45JunJun 9090 90

Q3Q3 185185JulJul 5555 55AugAug 6060 60SepSep 7070 70

Q4Q4 285285OctOct 8080 80NovNov 100100 100DecDec 105105 105

Page 35: MDX 의 이해와 활용

Avg( Descendants([Time].CurrentMember,[Month]), Quantity)

기간의 모든 월별 수량의 합계를 월수로 나눈다

Sum ( 기간의 월들 , Quantity) / Count( 기간의 월들 )

Sum (Descendants([Time].CurrentMember,[Month]), Quantity) /Count(Descendants([Time].CurrentMember,[Month]))

기간에 대한 평균기간에 대한 평균

Page 36: MDX 의 이해와 활용

Avg( Descendants([Time].CurrentMember,[Month]), Inventory)Avg( Descendants([Time].CurrentMember,[Month]), Inventory)

40.0

66.7

61.7

95.0

65.8YearYear QuarterQuarter MonthMonth InventoryInventory AvgAvg

19971997 790790Q1Q1 120120

JanJan 3030 30FebFeb 4040 40MarMar 5050 50

Q2Q2 200200AprApr 6565 65MayMay 4545 45JunJun 9090 90

Q3Q3 185185JulJul 5555 55AugAug 6060 60SepSep 7070 70

Q4Q4 285285OctOct 8080 80NovNov 100100 100DecDec 105105 105

Page 37: MDX 의 이해와 활용

최근의 평균 재고량최근의 평균 재고량

IIF(Time.CurrentMember.Level.Name = “Month”,IIF(Time.CurrentMember.Level.Name = “Month”, AVG(LastPeriods(5, Time.CurrentMember),AVG(LastPeriods(5, Time.CurrentMember), Inventory), Inventory), NULL)NULL)

Measures.[Avg Inv Of Last5 Mon]

Page 38: MDX 의 이해와 활용

기간 중 최대 재고량기간 중 최대 재고량

Measures.[Maximum Inventory]Measures.[Maximum Inventory]

MAX(MAX( Descendants(Time.CurrentMember,Time.Month),Descendants(Time.CurrentMember,Time.Month), Measures.[Value]Measures.[Value] ))

Page 39: MDX 의 이해와 활용

기간 중 최소 재고량기간 중 최소 재고량

Measures.[Minimum Inventory

MIN(MIN( Descendants(Time.CurrentMember,Time.Month),Descendants(Time.CurrentMember,Time.Month), Measures.[Value]Measures.[Value] ))

Page 40: MDX 의 이해와 활용

가장 최근의 값가장 최근의 값

재귀적 참조 이용재귀적 참조 이용

WITH MEMBER Measures.WITH MEMBER Measures.[Last Sales][Last Sales] AS AS 'IIF(IsEmpty((Measures.[Store Sales], Time.CurrentMember)), 'IIF(IsEmpty((Measures.[Store Sales], Time.CurrentMember)), ((Measures. Measures. [Last Sales][Last Sales], Time.PrevMember),, Time.PrevMember), (Measures.[Store Sales], Time.CurrentMember)(Measures.[Store Sales], Time.CurrentMember) )' )' SELECT {[Store Sales], [Last Sales]} ON COLUMNS,SELECT {[Store Sales], [Last Sales]} ON COLUMNS, {Time.Members} ON ROWS{Time.Members} ON ROWSFROM SalesFROM Sales

Store SaleStore Sale Last SalesLast Sales

JanJan 100100 100100

FebFeb 200200 200200

MarMar

AprApr

:: ::

200

200

Page 41: MDX 의 이해와 활용

기여도 분석요구 사항기여도 분석요구 사항 ......

순위순위 소속별 순위 전체 순위

기여도기여도 점유율 배부

Page 42: MDX 의 이해와 활용

제품의 소속 그룹내 판매액 순위제품의 소속 그룹내 판매액 순위

제품의 그룹별로 각 제품의 판매액 순위

Rank( 현재제품 , 판매액으로 정렬된 현재제품이 속한 그룹의 제품들 )Rank(Product.CurrentMember ,

Order( 해당 그룹의 제품들 , [Store Sales]))

Rank(Product.CurrentMember , Order(Product.CurrentMember.Siblins, [Store Sales], DESC) )

Page 43: MDX 의 이해와 활용

제품에 속한 레벨내 판매액 순위제품에 속한 레벨내 판매액 순위

제품의 레벨내에서 각 제품의 판매액 순위

Rank( 현재제품 , 판매액으로 정렬된 현재제품이 속한 레벨의 제품들 ) Rank(Product.CurrentMember ,

Order( 해당 레벨의 제품들 , [Store Sales]))

Rank(Product.CurrentMember , Order(Product.CurrentMember.Level.Members, [Store Sales], BDESC) )

Page 44: MDX 의 이해와 활용

점유율점유율

현재 제품 또는 그룹이 전체에서 차지하는 판매 기여도

현재 제품 또는 그룹의 판매 금액 / 전체 제품의 판매금액

[Store Sales] / ( 전체 제품 , [Store Sales])

[Store Sales] / (Product.[All Products], [Store Sales])

Page 45: MDX 의 이해와 활용

판매실적 기준 예산 배분판매실적 기준 예산 배분

SalesSales CostCost Allot BudgetAllot Budget All ProductsAll Products 80008000 40004000 40004000 DrinkDrink 33003300 16501650 AlcoholicAlcoholic 20002000 10001000 BeveragesBeverages 800800 400400 DairyDairy 500500 250250 FoodFood 47004700 23502350 BakedBaked 15001500 750750 CannedCanned 25002500 12501250 EggsEggs 700700 350350

Page 46: MDX 의 이해와 활용

([All Products], [Allot Budget]) *([Store Sales] / ([All Products], [Store Sales]))

제품 전체 예산 * 현재 제품 또는 그룹이 전체에서 차지하는 판매 기여도

([All Products], [Allot Budget]) * 현재 제품 또는 그룹이 전체에서 차지하는 판매 기여도

Page 47: MDX 의 이해와 활용

MDX MDX 고급활용고급활용

Page 48: MDX 의 이해와 활용

Current Cell ContextCurrent Cell Context

Default MemberDefault Member All Member 최상위 레벨의 첫번째 Member 별도 지정된 Member (MDX 활용 가능 )

CurrentMemberCurrentMember FROM WHERE Closest Context

축과의 교차점 서브 집합

Page 49: MDX 의 이해와 활용

반복 처리반복 처리

반복처리 관련 주요 함수반복처리 관련 주요 함수 Generate CurrentMember Current Item

상점별 판매금액 기준 상점별 판매금액 기준 Top 5 Top 5 제품들제품들

판매이익 판매이익 Top5 Top5 고객 중에 판매금액이 고객 중에 판매금액이 Top5Top5 인 인 고객고객

SCD Type IISCD Type II 에서의 사원별 판매금액 실적에서의 사원별 판매금액 실적

Page 50: MDX 의 이해와 활용

Generate()Generate()

SetSet Generate(Set1, Set2[, ALL])

Set1 을 구성하는 각 튜플에 대하여 Set2 복제 결합

문자열문자열 Generate(Set, String Expression[, Delimiter])

Set 을 구성하는 각 튜플에 대하여 문자열 생성 결합

Page 51: MDX 의 이해와 활용

CurrentCurrent

집합내의 튜플들에 대한 반복 처리에서 현재 튜플 집합내의 튜플들에 대한 반복 처리에서 현재 튜플 반환반환

Set.CurrentSet.Current Set ↔ Tuple ↔ MemberSet ↔ Tuple ↔ Member

Set.Item(n) → 집합내에서 n + 1 번째 튜플 반환 Tupe.Item(n) → 튜플내에서 n + 1 번째 구성원 반환 Ex) Set.Item(0).Item(0) → 집합내의 첫번째 튜플의 첫번째

구성원

Page 52: MDX 의 이해와 활용

상점별 판매금액 기준 상점별 판매금액 기준 Top 5 Top 5 제품들제품들

상점 반복 처리 ( 현재 처리 중인 상점에 대한 판매금액 Top5 제품들 )

Generate(Store.[Store Name].Members, 현재 처리 중인 상점에 대한 판매금액 Top5 제품들 )Generate(Store.[Store Name].Members, TopCount( 제품들 , 5, [Store Sales])

Generate(Store.[Store Name].Members, TopCount([Product].[Product Name].Members, 5, [Store Sales])

Page 53: MDX 의 이해와 활용

판매이익 판매이익 Top5 Top5 고객 중 판매금액 고객 중 판매금액 Top5Top5 고객고객ProfitTop5: TopCount([Customers].[Name].Members, 5, Profit)

SalesTop5: TopCount([Customers].[Name].Members, 5, [Unit Sales])

Generate(ProfitTop5, 현재 처리 중인 고객이 판매금액 Top5 에 속하는가 ?)Generate(ProfitTop5, Filter(SalesTop5, ProfitTop5.Current IS SalesTop5.Current)

Page 54: MDX 의 이해와 활용

SCD Type IISCD Type II 에서의 사원별 판매금액 에서의 사원별 판매금액 실적실적

판매실적

조직 전체 70 A 부서 50 김기훈 20 홍길동 30 B 부서 20 정일수 20

판매 실적 조직 전체 70

A 부서 50 김기훈 20 홍길동 30 B 부서 20 정일수 20 홍길동 30

변경전 변경후

Page 55: MDX 의 이해와 활용

SUM({[A 부서 ].[ 홍길동 ], [B 부서 ].[ 홍길동 ]}, [Sales])SUM(Filter([ 조직 ].[ 사원 ].Members, [ 조직 ].CurrentMember.Name = “ ”홍길동 ), [Sales])SUM(Filter([ 조직 ].[ 사원 ].Members, [ 조직 ].CurrentMember.Properties(“ 사원 ID”) = “100”), [Sales])SUM(Generate({[ 조직 ].CurrentMember} AS Set1, Filter([ 조직 ].[ 사원 ].Members, Set1.Current.Item(0).Properties(“ 사원 ID”) = [ 조직 ].CurrentMember.Properties(“ 사원 ID”) ) ), [Sales])

Page 56: MDX 의 이해와 활용

동적 축 처리동적 축 처리

동일한 로직을 가지는 분석 대상동일한 로직을 가지는 분석 대상 전체에서 차지하는 현재 기준의 점유율 소속 그룹에서 차지하는 현재 기준의 점유율 현재 기준은 사원 , 고객 , 제품 , ... 등 다양

→ 기준별로 계산된 구성원 정의 ?

Rows Rows 축에 상관없이 동일한 로직을 가지는 축에 상관없이 동일한 로직을 가지는 계산된 구성원계산된 구성원 Rows 축에 위치하는 차원 정보를 동적으로 얻을 수

있는가 ? 얻을 수 있다면 , 하나의 계산된 구성원으로 대체

가능

Page 57: MDX 의 이해와 활용

동적 축 처리동적 축 처리

Axis(n) Axis(n) 쿼리 결과로부터 Axis(n) 의 집합 참조 멤버 쿼리가 발생해야 AXIS 컨텍스트가 결정 예 ) Axis(0).Item(0).Item(0).Dimension.CurrentMember

StrToSet( "Axis(0)" )StrToSet( "Axis(0)" ) 문자열 식으로부터 집합 생성 큐브 내에 AXIS() 존속 가능 예 )

StrToSet(“Axis(0)”).Item(0).Item(0).Dimension.CurrentMember

Page 58: MDX 의 이해와 활용

계산된 구성원으로 이루어진 차원계산된 구성원으로 이루어진 차원

수식 정의를 위한 특별한 차원 설계수식 정의를 위한 특별한 차원 설계 Measure 하나당 여러 개의 수식 정의 요구

→ Measures 차원에 Measure 별로 복수개의 계산된 구성원 정의 ?

별도의 차원으로 분리별도의 차원으로 분리 계산된 구성원 사용자 지정 구성원 수식

MeasuresMeasures 를 비롯한 모든 차원과 교차를 비롯한 모든 차원과 교차

부모부모 -- 자식 차원은 최고의 유연성 제공자식 차원은 최고의 유연성 제공

Page 59: MDX 의 이해와 활용

팩트 테이블 설계팩트 테이블 설계

팩트 테이블용 뷰 활용팩트 테이블용 뷰 활용

SELECTSELECT Time_ID, Time_ID,

Product_ID,Product_ID,Customer_ID,Customer_ID,Store_ID,Store_ID,1 AS Calc_ID, ← 1 AS Calc_ID, ← Sales_AmtSales_Amt

FROM Sales_FactFROM Sales_Fact

Page 60: MDX 의 이해와 활용

차원 테이블 설계차원 테이블 설계

Dummy Dummy 테이블테이블 팩트 테이블과

조인되는 하나의 데이터만 관리

계산된 구성원 정의 및 변경을 큐브 편집기에서 관리

별도의 일반 테이블별도의 일반 테이블 팩트 테이블과

조인되는 하나의 데이터 + 계산된 구성원

계산된 구성원 정의 및 변경을 테이블에서 관리

Page 61: MDX 의 이해와 활용

Thank you !Thank you !