알 수 없는 멤버 및 Null 처리 속성 정의
Microsoft SQL Server 2005 Analysis Services(SSAS)에서 차원을 처리하는 경우 데이터 원본 뷰의 뷰나 테이블의 기본 열에 있는 모든 고유 값이 차원의 특성을 채웁니다. Analysis Services에서는 처리 도중에 Nulll 값이 발생할 경우 기본적으로 이 Null은 숫자 열의 경우 0으로 변환되고 문자열 열의 경우 빈 문자열로 변환되며 오류가 발생하지는 않습니다. 기본 관계형 데이터 웨어하우스의 추출, 변환 및 로드 프로세스(있을 경우)에서 이러한 기본값을 수정하거나 Null 값을 변환할 수 있습니다. 또한 3개의 속성을 구성하여 Analysis Service에서 Null 값을 지정된 값으로 변환하도록 할 수 있습니다. 이러한 속성은 차원에 대한 UnknownMember 및 UnknownMemberName 속성과 차원의 키 특성에 대한 NullProcessing 속성입니다.
차원 마법사와 큐브 마법사는 차원의 키 특성이 Null을 허용하는지 또는 눈송이 차원의 루트 특성이 Null 허용 열을 기반으로 하는지 여부에 따라서 이러한 속성을 적절하게 설정합니다. 이러한 경우에 키 특성의 NullProcessing 속성은 UnknownMember로 설정되고 UnknownMember 속성은 Visible로 설정됩니다.
[!참고] 알 수 없는 멤버의 기본값은 알 수 없음입니다. UnknownMemberName 속성 값을 설정하여 다른 값을 지정할 수 있습니다.
그러나 이 자습서에서 Product 차원의 경우처럼 눈송이 차원을 증분식으로 작성하거나 차원 디자이너를 사용하여 차원을 정의한 다음 이러한 기존 차원을 큐브에 통합할 경우 UnknownMember 및 NullProcessing 속성을 수동으로 설정해야 할 수 있습니다.
다음 작업에서 볼 수 있는 바와 같이 특정 속성에 대한 설정을 수정하지 않은 경우 Analysis Services에서 눈송이 차원을 처리할 때 Analysis Services는 눈송이 테이블을 연결하는 열에 대한 값이 Null인 특성 멤버를 제거합니다. Analysis Services는 기본적으로 이런 종류의 오류를 무시하므로 오류가 발생하지 않습니다. 기본적으로 NullKeyCovertedToUnknown 속성은 IgnoreError로 설정되어 있습니다. Analysis Services는 두 눈송이 테이블 간에 내부 조인을 수행하므로 Null 값이 있는 특성 멤버를 제거합니다.
다음 단계를 수행하면 이 상황에서 Analysis Services가 처리하는 방법을 제어할 수 있습니다.
- 차원에 대해 UnknownMember 속성을 설정합니다.
- 차원에 대해 UnknownMemberName 속성 값을 지정합니다.
- 차원 특성을 적절히 연결하는 특성 관계를 설정합니다.
- 눈송이 테이블을 연결하는 키 열의 사용자 지정 오류 처리를 정의합니다.
이 항목의 작업에서는 Adventure Works DW 데이터 원본 뷰에 추가할 눈송이 테이블의 Product 차원에 Product Categories 및 Product Subcategory 특성을 추가합니다. 그런 다음 Product 차원에 대해 UnknownMember 속성을 설정하고 어셈블리 구성 요소를 UnknownMemberName 속성 값으로 지정하며 Subcategory 및 Category 특성을 Product Name 특성과 연결한 후 눈송이 테이블을 연결하는 멤버 키 특성에 대해 사용자 지정 오류 처리를 정의합니다.
[!참고] 큐브 마법사를 사용하여 Analysis Services Tutorial 큐브를 처음 정의할 때 Subcategory 및 Category 특성을 추가한 경우 이러한 단계는 자동으로 수행되어 있습니다.
Product 차원의 오류 처리 및 알 수 없는 멤버 속성 검토
Product 차원의 오류 처리 및 알 수 없는 멤버 속성을 검토하려면
Product 차원의 차원 디자이너로 전환하고 차원 구조 탭을 클릭한 후 특성 창의 Product를 선택합니다.
이렇게 하면 차원 자체의 속성을 보고 수정할 수 있습니다.
속성 창에서 UnknownMember 및 UnknownMemberName 속성을 검토합니다.
해당 값이 Visible 또는 Hidden 대신 None으로 설정되어 있고 UnknownMemberName 속성에 대해 지정된 이름이 없으므로 UnknownMember 속성이 설정되지 않습니다.
속성 창의 ErrorConfiguration 속성 셀에서 **(사용자 지정)**을 선택한 후 ErrorConfiguration 속성 컬렉션을 확장합니다.
ErrorConfiguration 속성을 **(사용자 지정)**으로 설정하면 기본 오류 구성 설정을 볼 수 있습니다. 이로 인해 설정이 변경되지는 않습니다.
키 및 Null 키 오류 구성 속성을 검토만 하고 변경하지 마십시오.
기본적으로 Null 키가 알 수 없는 멤버로 변환되는 경우 이 변환과 연관된 처리 오류는 무시됩니다.
다음 이미지는 ErrorConfiguration 속성 컬렉션의 속성 설정을 보여 줍니다.
브라우저 탭을 클릭하고 계층 목록에 Product Model Lines가 선택되어 있는지 확인한 후 All Products를 확장합니다.
Product Line 수준의 5개 멤버가 표시됩니다.
Components를 확장한 후 레이블이 없는 Model Name 수준의 멤버를 확장합니다.
이 수준에는 다음 이미지에 표시된 것처럼 다른 구성 요소를 작업할 때 사용되는 어셈블리 구성 요소가 들어 있으며 Adjustable Race 제품으로 시작합니다.
눈송이 테이블 및 제품 범주 사용자 정의 계층의 특성 정의
눈송이 테이블 및 제품 범주 사용자 정의 계층의 특성을 정의하려면
Adventure Works DW 데이터 원본 뷰의 데이터 원본 뷰 디자이너를 열고 다이어그램 구성 도우미 창에서 Reseller Sales를 선택한 후 Business Intelligence Development Studio의 데이터 원본 뷰 메뉴에서 테이블 추가/제거를 클릭합니다.
테이블 추가/제거 대화 상자가 열립니다.
포함된 개체 목록에서 dbo.DimProduct를 선택한 후 관련 테이블 추가를 클릭합니다.
포함된 개체 목록에 dbo.DimProductSubcategory 테이블이 추가됩니다.
기본적으로 dbo.DimProductSubcategory 테이블을 가장 최근에 추가한 테이블로 선택한 상태에서 관련 테이블 추가를 다시 클릭합니다.
포함된 개체 목록에 dbo.DimProductCategory 테이블이 추가됩니다.
확인을 클릭합니다.
BI Development Studio의 서식 메뉴에서 자동 레이아웃을 가리킨 후 다이어그램을 클릭합니다.
다음 이미지에 표시된 것처럼 dbo.DimProductSubcategory 테이블 및 dbo.DimProductCategory 테이블은 서로 연결되어 있으며 Product 테이블을 통해 ResellerSales 테이블과도 연결되어 있습니다.
Product 차원의 차원 디자이너로 전환한 다음 차원 구조 탭을 클릭합니다.
데이터 원본 뷰 창의 어느 곳이든 마우스 오른쪽 단추로 클릭한 다음 모든 테이블 표시를 클릭합니다.
데이터 원본 뷰 창에서 DimProductCategory 테이블을 찾아 ProductCategoryKey를 마우스 오른쪽 단추로 클릭한 후 열의 새 특성을 클릭합니다.
특성 창에서 이 새 특성의 이름을 Category로 변경합니다.
속성 창에서 NameColumn 속성 셀을 클릭하고 **(새로 만들기)**를 선택한 다음 원본 테이블 필드에 DimProductCategory를 지정하고 개체 바인딩 대화 상자의 원본 열 필드에 EnglishProductCategoryName을 지정한 후 확인을 클릭합니다.
데이터 원본 뷰 창에서 DimProductCategory 테이블을 찾아 ProductCategoryKey를 마우스 오른쪽 단추로 클릭한 후 열의 새 특성을 클릭합니다.
특성 창에서 이 새 특성의 이름을 Subcategory로 변경합니다.
속성 창에서 NameColumn 속성 셀을 클릭하고 **(새로 만들기)**를 선택한 다음 원본 테이블 필드에 DimProductCategory를 지정하고 개체 바인딩 대화 상자의 원본 열 필드에 EnglishProductCategoryName을 지정한 후 확인을 클릭합니다.
Category, Subcategory 및 Product Name 수준을 사용하여 위쪽에서 아래쪽 순서로 Product Categories라는 새 사용자 정의 계층을 만듭니다.
All Products를 Product Categories 사용자 정의 계층의 AllMemberName 속성에 대한 값으로 지정합니다.
Product 차원에서 사용자 정의 계층 찾아보기
Product 차원에서 사용자 정의 계층을 찾아보려면
Product 차원에 대한 차원 디자이너의 차원 구조 탭에 있는 도구 모음에서 처리를 클릭합니다.
해당 프로젝트를 작성 및 배포하려면 예를 클릭한 후 실행을 클릭하여 Product 차원을 처리합니다.
처리가 성공하면 처리 진행률 대화 상자의 차원 'Product' 처리가 완료되었습니다, 차원 특성 'Product Name' 처리가 완료되었습니다 및 SQL 쿼리 1을 차례로 확장합니다.
SELECT DISTINCT 쿼리를 클릭한 후 자세히 보기를 클릭합니다.
다음 이미지에 표시된 것처럼 ProductSubcategoryKey 열에 값이 없는 제품을 제거하는 SELECT DISTINCT 절에 WHERE 절이 추가되었습니다.
닫기를 3번 클릭하여 처리 중인 대화 상자를 모두 닫습니다.
Product 차원의 차원 디자이너에서 브라우저 탭을 클릭한 후 다시 연결을 클릭합니다.
계층 목록에 Product Model Lines가 표시되는지 확인하고 All Products를 확장한 후 Components를 확장합니다.
다음 이미지에 표시된 것처럼 SELECT DISTINCT 문에 WHERE 절을 사용하여 모든 어셈블리 구성 요소 목록을 삭제합니다.
계층 목록에서 Product Categories를 선택하고 All Products를 확장한 후 Components를 확장합니다.
어셈블리 구성 요소가 나타나지 않습니다.
이전 작업에서 설명한 동작을 수정하려면 Product 차원의 UnknownMember 속성을 활성화하고 UnknownMemberName 속성 값을 설정하고 Subcategory 및 Model Name 특성의 NullProcessing 속성을 UnknownMember로 설정하고 Category 특성을 Subcategory 특성의 관련 특성으로 정의한 후 Product Line 특성을 Model Name 특성의 관련 특성으로 정의합니다. 이러한 절차를 수행하면 Analysis Services는 다음 작업에서 볼 수 있는 바와 같이 SubcategoryKey 열의 값이 없는 각 제품에 대해 알 수 없는 멤버 이름 값을 사용합니다.
알 수 없는 멤버 활성화, 특성 관계 정의 및 Null에 대한 사용자 지정 프로세싱 속성 지정
알 수 없는 멤버를 활성화하고 특성 관계를 정의하며 Null에 대한 사용자 지정 프로세싱 속성을 지정하려면
Product 차원에 대한 차원 디자이너에서 차원 구조 탭을 클릭합니다.
속성 창에서 Product 차원의 UnknownMember 속성을 Visible로 변경한 후 이 차원에 대한 UnknownMemberName 속성 값을 Assembly Components로 변경합니다.
UnknownMember 속성을 Visible 또는 Hidden으로 변경하면 차원에 대한 UnknownMember 속성이 활성화됩니다.
특성 창에서 다음 특성을 확장합니다.
- Product Name
- Subcategory
- Model Name
Product Line은 Model Name 특성과 관련되어 있으므로 Product Name 키 특성에 간접적으로 연결됩니다. Subcategory 특성에 정의되어 있는 특성 관계가 없고 Category 특성이 키 특성을 통해 직접 Product Name 특성에 연결되어 있습니다.
Category 특성 관계를 Product Name 특성에서 Subcategory 특성으로 끕니다.
이제 Category 특성이 Subcategory 특성을 통해 팩트 테이블의 행으로 연결된 후 이 Subcategory가 Product Name 특성을 통해 팩트 테이블의 행에 연결됩니다.
특성 창에서 Product Name을 선택한 후 속성 창의 KeyColumns 속성 셀에서 생략 단추(…)를 클릭합니다.
다음 이미지와 같이 DataItem 컬렉션 편집기 대화 상자에서 NullProcessing 속성을 UnknownMember로 변경합니다.
확인을 클릭합니다.
특성 창에서 Model Name을 선택한 후 속성 창의 KeyColumns 속성 셀에서 생략 단추(…)를 클릭합니다.
DataItem 컬렉션 편집기 대화 상자에서 NullProcessing 속성을 UnknownMember로 변경한 후 확인을 클릭합니다.
이러한 변경으로 인해 처리 도중 Analysis Services에서 Subcategory 특성 또는 Model Name 특성에 대해 Null 값이 발생하면 알 수 없는 멤버 값이 키 값으로 대체되어 사용자 정의 계층이 올바르게 만들어집니다.
Product 차원 다시 찾아보기
Product 차원을 찾아보려면
빌드 메뉴에서 Analysis Services Tutorial 배포를 클릭합니다.
배포가 성공적으로 완료되면 Product 차원에 대한 차원 디자이너에서 브라우저 탭을 클릭한 후 다시 연결을 클릭합니다.
계층 목록에서 Product Categories가 선택되어 있는지 확인하고 All Products를 확장합니다.
Assembly Components가 Category 수준의 새 멤버로 나타납니다.
Category 수준의 Assembly Components 멤버를 확장한 후 Subcategory 수준의 Assembly Components 멤버를 확장합니다.
다음 그림과 같이 이제 모든 Assembly Components가 Product Name 수준에 나타납니다.
계층 목록에서 Product Model Lines를 선택하고 All Products를 확장하고 Product Line 수준의 Assembly Components 멤버를 확장한 후 Model Name 수준의 Assembly Components 멤버를 확장합니다.
이제 모든 Assembly Components가 Product Name 수준에 나타납니다.
[!참고] 4단원까지 완료된 프로젝트는 업데이트된 예제를 다운로드 및 설치하여 사용할 수 있습니다. 자세한 내용은 예제 설치에서 업데이트된 예제 얻기를 참조하십시오.