테이블 형식 모델의 문자열 스토리지 및 데이터 정렬

적용 대상: SQL Server Analysis Services Azure Analysis Services 패브릭/Power BI Premium

테이블 형식 모델에서 문자열(텍스트 값)은 고도로 압축된 형식으로 저장되며, 이러한 압축으로 인해 전체 또는 부분 문자열을 검색할 때 예기치 않은 결과를 얻게 될 수 있습니다. 또한 문자열 로캘 및 데이터 정렬은 가장 가까운 부모 개체에서 계층적으로 상속되므로 문자열 언어가 명시적으로 정의되어 있지 않은 경우 각 문자열이 저장되는 방식과 문자열이 고유한지 아니면 부모 데이터 정렬에 의해 정의된 유사 문자열과 혼합되는지는 부모의 로캘 및 데이터 정렬에 따라 달라질 수 있습니다.

이 문서에서는 문자열이 압축 및 저장되는 메커니즘을 설명하고 데이터 정렬 및 언어가 테이블 형식 모델의 텍스트 수식 결과에 미치는 영향에 대한 예제를 제공합니다.

스토리지

테이블 형식 모델에서는 모든 데이터가 메모리 사용을 최적화할 수 있도록 고도로 압축됩니다. 따라서 어휘적으로 동일한 것으로 간주될 수 있는 모든 문자열이 한 번만 저장됩니다. 문자열의 첫 번째 인스턴스는 정식 표현으로 사용되며 이후 해당하는 각 문자열은 첫 번째 발생한 인스턴스와 동일한 압축된 값으로 인덱싱됩니다.

중요한 점은 어휘적으로 동일한 문자열을 구성하는 요소가 무엇이냐는 것입니다. 동일한 단어로 간주할 수 있는 두 문자열은 어휘적으로 동일한 것으로 간주됩니다. 예를 들어 영어로 violin 이라는 단어를 사전에서 검색할 경우 사전의 편집 정책에 따라 Violin 또는 violin항목을 찾을 수 있지만, 일반적으로 두 단어는 모두 동일한 것으로 간주되며 대/소문자 차이는 무시됩니다. 테이블 형식 모델에서 두 문자열이 어휘적으로 동일한지 여부를 결정하는 요소는 편집 정책이나 사용자 선호도가 아니라 해당 열에 할당된 로캘 및 데이터 정렬 순서입니다.

따라서 대문자와 소문자를 동일하게 처리할지 다르게 처리할지는 데이터 정렬과 로캘에 따라 결정됩니다. 해당 로캘 내의 특정 단어에 대해 특정 열에서 첫 번째로 발생하는 단어가 해당 단어의 정식 표현으로 처리되고 해당 문자열은 압축되지 않은 형식으로 저장됩니다. 다른 모든 문자열은 첫 번째 발생한 단어를 기준으로 테스트되며, 동일성 테스트 조건을 충족하는 문자열은 첫 번째 발생한 단어의 압축된 값에 할당됩니다. 나중에 압축된 값이 검색될 때 이 값은 첫 번째 발생한 문자열의 압축되지 않은 값을 사용하여 표현됩니다.

예를 통해 이 과정을 명확하게 이해할 수 있습니다. 다음의 "Classification - English" 열은 식물과 나무에 대한 정보를 포함하는 테이블에서 추출한 것입니다. 분류 열에서는 각 식물(식물 이름은 여기에 표시되지 않음)에 대한 일반 범주를 보여 줍니다.

Classification - English
trEE
PlAnT
trEE
PlAnT
PlAnT
트리
PlAnT
trEE
tree
PlAnT
trEE

대/소문자와 악센트 사용이 일관되지 않은 것은 데이터의 원본이 다양하기 때문일 수 있으며 관계형 데이터베이스에서는 이러한 차이가 있는 그대로 저장됩니다. 그러나 이러한 값은 대/소문자만 다를 뿐 대체적으로는 Plant 또는 Tree중 하나에 해당합니다.

미국 영어의 기본 데이터 정렬과 정렬 순서를 사용하는 테이블 형식 모델로 이러한 값을 로드할 경우 대/소문자는 중요하지 않으므로 전체 열에 대해 두 개의 값만 저장됩니다.

Classification - English
trEE
PlAnT

모델에서 분류 - 영어 열을 사용하는 경우 식물 분류를 표시할 때마다 대문자와 소문자를 다양하게 사용하는 원래 값이 아니라 첫 번째 instance 표시됩니다. 이 데이터 정렬 및 로캘에서는 tree 의 대문자 및 소문자 변형이 모두 동일한 것으로 간주되기 때문입니다. 따라서 한 문자열만 보관되며 시스템에서 발견한 첫 번째 문자열 인스턴스가 저장 인스턴스가 됩니다.

경고

사용자가 판단하는 올바른 형태에 따라 첫 번째로 저장할 문자열을 정의할 수도 있지만 이 과정은 매우 어려울 수 있습니다. 모든 값이 동일한 것으로 간주될 경우 엔진에서 처음 처리될 행을 미리 결정할 수 있는 간단한 방법은 없습니다. 대신 표준 값을 설정해야 하는 경우에는 모델을 로드하기 전에 모든 문자열을 정리해야 합니다.

로캘 및 데이터 정렬 순서

문자열(텍스트 값)을 비교할 때 동일성을 정의하는 요소는 일반적으로 해당 문자열이 해석되는 방식에 대한 culture 특성입니다. 일부 culture에서는 문자의 악센트나 대/소문자에 따라 문자열의 의미가 완전히 달라질 수 있으므로, 특정 언어 또는 영역에서 동일성을 결정할 때는 대개 이러한 차이가 고려됩니다.

일반적으로 사용 중인 컴퓨터는 이미 사용자에게 필요한 culture 및 언어 동작에 맞게 구성되어 있으므로 텍스트 값 정렬 및 비교와 같은 문자열 작업이 예상대로 작동합니다. 언어별 동작을 제어하는 설정은 Windows의 국가 및 언어 설정을 통해 정의됩니다. 애플리케이션에서는 이 설정을 읽고 그에 따라 동작을 변경합니다. 일부 애플리케이션에는 사용자가 애플리케이션의 culture 동작이나 문자열 비교 방식을 변경할 수 있는 기능이 있는 경우도 있습니다.

테이블 형식 model 데이터베이스를 만들 때 데이터베이스는 기본적으로 이러한 culture 및 언어 설정을 언어 식별자 및 데이터 정렬의 형태로 상속합니다.

  • 언어 식별자는 문자열에 사용할 문자 집합을 해당 culture에 따라 정의합니다.

  • 데이터 정렬은 문자 순서와 문자 일치성을 정의합니다.

언어 식별자는 언어뿐만 아니라 언어가 사용되는 국가 또는 지역을 식별한다는 점에 유의해야 합니다. 각 언어 식별자에는 기본 데이터 정렬도 지정되어 있습니다. 언어 식별자에 자세한 내용은 Microsoft에서 할당한 로캘 ID를 참조하십시오. 수동으로 값을 삽입할 때는 10진수 LCID 열에서 올바른 ID를 확인할 수 있습니다. 데이터 정렬의 SQL 개념에 대한 자세한 내용은 COLLATE(Transact-SQL)를 참조하세요. 데이터 정렬 지정자 및 Windows 데이터 정렬 이름의 비교 스타일에 대한 자세한 내용은 Windows 데이터 정렬 이름(Transact-SQL)을 참조하세요. 데이터 정렬 이름(Transact-SQL)SQL Server 문서에서는 Windows 데이터 정렬 이름을 SQL에 사용되는 이름에 매핑합니다.

테이블 형식 model 데이터베이스를 만든 후 모델의 모든 새 개체는 데이터베이스 특성에서 언어 및 데이터 정렬 특성을 상속합니다. 이는 모든 개체에 대해 적용됩니다. 상속 경로는 개체에서 시작되어, 부모에서 상속할 언어 및 데이터 정렬 특성을 확인하고, 특성을 찾을 수 없는 경우 최상위 수준까지 계속 진행하여 데이터베이스 수준에서 언어 및 데이터 정렬 특성을 찾는 방식으로 진행됩니다. 즉, 개체의 언어 및 데이터 정렬 특성을 지정하지 않을 경우 기본적으로 개체는 가장 가까운 부모의 특성을 상속합니다.

열의 경우 생성 시 다음 규칙에 따라 언어 및 데이터 정렬 특성이 상속됩니다.

  • 부모 차원 개체에서 언어 및 데이터 정렬 특성이 검색됩니다. 두 값이 모두 있으면 두 값이 열 특성에 복사되고, 한 값만 있으면 다른 값은 기존 값에서 유추되어 두 값이 모두 할당됩니다. 두 값이 모두 없는 경우에는 다음 단계로 진행합니다.

  • 1단계에 설명된 차원에 대한 프로세스와 동일한 프로세스를 사용하여 데이터베이스 개체가 검색됩니다. 특성을 찾지 못하면 다음 단계로 진행합니다.

  • 1단계에 설명된 차원에 대한 프로세스와 동일한 프로세스를 사용하여 서버 개체가 검색됩니다. 특성을 찾지 못하면 열에서는 Windows 언어 식별자를 사용하고 해당 값에서 데이터 정렬 특성을 유추합니다.

일반적으로 원본 데이터베이스의 언어 식별자 및 데이터 정렬 순서는 값이 테이블 형식 모델 열에 저장되는 방식에 거의 영향을 주지 않습니다. 원본 데이터베이스에서 요청된 값을 변환하거나 필터링하는 경우는 예외입니다.