Multidimensional and Tabular models
SQL Server 2012부터 SSAS는 Multidimensional 모델에 추가로 Tabular 모델이 추가됨.
Tabular 모델은 Excel Power Pivot엔진을 기반으로한 In-memory columnstore OLAP.
개발이 쉽고 distinct count에 강하다.
--> 그러나 2012까지는 partition들에 대한 병렬처리가 지원되지 않아서 속도가 급격히 느려져 우리 사이트에서는 걷어냈다. (2016에서 도입되어 테스트 필요)
Multidimensional 과 Tabular 모델 프로젝트는 서로간의 변환이나 마이그레이션이 불가.
Choosing an edition of Analysis Services
우린 그룹사 계약이 되어 있어서 모두 Enterprise Edition으로~
Setting up as new Analysis Services project
. svn과 같은 source control을 반드시 사용하십쇼.
. 프로젝트는 Project mode와 Online mode로 되어 있는데용.
개발 중에는 Project mode로 하여 Deploy 방식으로 적용합니다.
Online모드는 Save할때마다 반영이 되어버려서 위험하거든요.
. Project Properties -> Deployment -> Processing Option 은 '처리안함' 합니다.
왜냐하면 배포하면서 자동으로 Processing시작되면 망하거든요.
Creating data sources
. 소스가 SQL Server 일때는 항상 Provider를 "SQL Server Native Client"를 선택해야 최고의 성능을 얻을 수 있습니다. 다른 DBMS의 경우에는 OLEDB, ODBC, .NET provider 순으로 try해보세요.
. 처리를 위한 계정은 대부분 읽기권한만 있으면 충분합니다. (Fact에 일부데이터를 쓰는 Writeback 시나리오에서는 쓰기권한도 필요합니다.)
. 접속계정을 SQL계정대시 Windows계정을 사용하면 배포 후에 비밀번호를 재입력하는 번거로움을 줄일 수 있습니다.
Creating Data Source Views
. 줄여서 DSV라고 부릅니다. 모든 차원, 팩트 테이블들이 올라와야 하는 메타정보입니다. 차원과 팩트간의 join관계는 여기에서 모두 설정합니다.
. 외래키가 명시적으로 저장되어 있지 않더라도 열이름을 인식하여 자동join관계를 설정해주긴 합니다. (그래도 최종 체크는 해야겠죠? ^^)
. 테이블이나 뷰를 되도록 그대로 사용하고 DSV상에서 명명된 쿼리 등을 이용해서 복잡한 로직을 생성하지 마세요!! (정말 최후의 수단입니다.)
Using the new Dimension wizard
. 줄여서 DSV라고 부릅니다. 모든 차원, 팩트 테이블들이 올라와야 하는 메타정보입니다. 차원과 팩트간의 join관계는 여기에서 모두 설정합니다.
. 외래키가 명시적으로 저장되어 있지 않더라도 열이름을 인식하여 자동join관계를 설정해주긴 합니다. (그래도 최종 체크는 해야겠죠? ^^)
. 테이블이나 뷰를 되도록 그대로 사용하고 DSV상에서 명명된 쿼리 등을 이용해서 복잡한 로직을 생성하지 마세요!! (정말 최후의 수단입니다.)
Using the new Dimension wizard
1. Create Method는 대부분 Use an existing table을 사용합니다.
2. Key와 Name컬럼을 선택합니다.
3. Snowflake라서 관련 테이블이 있는 경우 선택합니다.
4. Attributes 들이 있으면 선택합니다.
이때 Enable Browsing을 끄면 OLAP조회 시 집계의 대상은 되지 못합니다.
Attribute Type은 시계열, 통화 관련된 경우가 아니면 건들지 않습니다.
5. 완료 시 디멘전 이름이 그냥 ID가 되어 버리고 이는 XML을 직접 수정하기 전까지는 차원이름을 변경하더라도 바뀌지 않고 남습니다. 스크립트 자동화 등을 위해서는 명시적으로 XML을 수정해서라도 ID값은 표준화하는 것이 좋습니다.
Using the Dimension Editor
주요 속성들만 살펴 봅니다.
주요 속성들만 살펴 봅니다.
. AttributeHierarchyEnabled, AttributeHierarchyOptimizedSate: Processing 시에 집계의 대상에서 제외시킬지 여부와 포함하더라도 최적화할지 아니면 집계부담은 덜고 조회부하를 올릴지를 결정
. OrderBy, OrderByAttribute: 차원값들의 정렬순서를 결정
. AttributeHierarchyOrdered: 속성 값의 정렬 순서가 중요치 않을때 (너무 멤버가 많아서 뿌려지는 것이 의미가 없는 상품id같은 경우) Processing시간 감소를 위해 조정할 수 있다.
Configuring a Time dimension
. 시계열 차원은 타입을 속성 별로 지정해주세요. 그래요 Time관련 MDX함수를 사용할 수 있는 경우가 많습니다. (일자 키도 date형이 아닌 int형을 쓰도록 권고하기 때문에 Type지정은 꼭 필요합니다.)
Create user hierarchies
. 계층(hierarchy)를 만들면 초보 사용자에게는 편하지만 고급사용자에게는 제약을 줍니다. 권고로는 계층을 만들면 해당 속성은 visible:false시키십쇼. 복잡하면 풍성하지만 사용자는 헷갈리기만 합니다.
. 계층(hierarchy)를 만들면 초보 사용자에게는 편하지만 고급사용자에게는 제약을 줍니다. 권고로는 계층을 만들면 해당 속성은 visible:false시키십쇼. 복잡하면 풍성하지만 사용자는 헷갈리기만 합니다.
Configuring attribute relationships
. 특성 관계(attribute relationships)는 차원 내의 속성들 사이의 1:N관계를 계층적으로 표현합니다. 이를 정의해두면 하위 속성들(1:N) 기준의 팩트값들을 상위 속성(1:N) 기준으로 집계할 수 있습니다. 매번 하위 속성레벨로 다 긁어서 Sum하는 것이 아니라 Processing때 집계값을 생성할 수 있는 거죠. 아래는 복잡한 특성 관계 차원의 예입니다.
. 계층(hierarchy)는 필수적으로 특성관계 설정이 필요합니다.
. 특성관계는 유형이 있는데 유동(Flexible)과 고정(Rigid)가 있습니다. 절대 변하지 않는 날짜->월->년도 같은 고정값의 경우 고정으로 설정하면 차원 processing시에 많은 단계를 skip할 수 있어서 시간이 절약됩니다.
. 차원 디자인 하면서 BIDS Helper라는 도구를 위해서 Dimension Health Check는 꼭 돌려보세요.
. 특성 관계(attribute relationships)는 차원 내의 속성들 사이의 1:N관계를 계층적으로 표현합니다. 이를 정의해두면 하위 속성들(1:N) 기준의 팩트값들을 상위 속성(1:N) 기준으로 집계할 수 있습니다. 매번 하위 속성레벨로 다 긁어서 Sum하는 것이 아니라 Processing때 집계값을 생성할 수 있는 거죠. 아래는 복잡한 특성 관계 차원의 예입니다.
. 계층(hierarchy)는 필수적으로 특성관계 설정이 필요합니다.
. 특성관계는 유형이 있는데 유동(Flexible)과 고정(Rigid)가 있습니다. 절대 변하지 않는 날짜->월->년도 같은 고정값의 경우 고정으로 설정하면 차원 processing시에 많은 단계를 skip할 수 있어서 시간이 절약됩니다.
. 차원 디자인 하면서 BIDS Helper라는 도구를 위해서 Dimension Health Check는 꼭 돌려보세요.
Using the new Cube wizard
빈 큐브를 생성하고 필요한 팩트들을 추가해나가는 것이 일반적입니다.
이 절에서는 간단히 기존 테이블을 이용해 예제를 만드네요.
빈 큐브를 생성하고 필요한 팩트들을 추가해나가는 것이 일반적입니다.
이 절에서는 간단히 기존 테이블을 이용해 예제를 만드네요.
Database processing
. SSDT에서 하거나 SSMS에서 모두 processing(처리)가 가능합니다.
. 처리의 단위: 차원 / 측정값 그룹, 파티션
큐브 = 측정값 그룹들의 총합 / 차원 = 속성 들의 총합
. 대표적 오류 유형 4가지
1. 스키마 변화
RDBMS 소스와 스키마가 틀어졌을때 DSV가 변경된 소스의 컬럼이름 변경 등을 반영해주지 않으면 계속 구스키마 기준으로 쿼리를 날린다.
2. Key Error
팩트에 존재하는 키가 드물게 차원에 존재하지 않게되었을 때 기본적으로는 오류를 뱉는다. 그래서 만일을 위해 '오류무시' 옵션을 켜두고 처리하고 있다.
3. 잘못된 오브젝트 처리 순서
아직 차원이 처리되지 않았는데 팩트가 처리되면서 새로운 키값을 인식하지 못할때 에러를 뱉는다. 차원을 먼저 처리해야 한다.
4. MDX Script Error
구조 변경을 하면 MDX스크립트 내의 오브젝트 이름들의 참조가 깨질 수 있다. 그래서 많은 구조변경이 있는 경우 MDX전체를 주석화 한 후에 전체 처리가 끝나면 주석을 풀어가면서 배포하는 것이 요령이 될 수 있다.
. SSDT에서 하거나 SSMS에서 모두 processing(처리)가 가능합니다.
. 처리의 단위: 차원 / 측정값 그룹, 파티션
큐브 = 측정값 그룹들의 총합 / 차원 = 속성 들의 총합
. 대표적 오류 유형 4가지
1. 스키마 변화
RDBMS 소스와 스키마가 틀어졌을때 DSV가 변경된 소스의 컬럼이름 변경 등을 반영해주지 않으면 계속 구스키마 기준으로 쿼리를 날린다.
2. Key Error
팩트에 존재하는 키가 드물게 차원에 존재하지 않게되었을 때 기본적으로는 오류를 뱉는다. 그래서 만일을 위해 '오류무시' 옵션을 켜두고 처리하고 있다.
3. 잘못된 오브젝트 처리 순서
아직 차원이 처리되지 않았는데 팩트가 처리되면서 새로운 키값을 인식하지 못할때 에러를 뱉는다. 차원을 먼저 처리해야 한다.
4. MDX Script Error
구조 변경을 하면 MDX스크립트 내의 오브젝트 이름들의 참조가 깨질 수 있다. 그래서 많은 구조변경이 있는 경우 MDX전체를 주석화 한 후에 전체 처리가 끝나면 주석을 풀어가면서 배포하는 것이 요령이 될 수 있다.