MDX의 주요 개념(MDX)
MDX(Multidimensional Expressions)를 사용하여 다차원 데이터를 쿼리하거나 큐브 내에서 사용할 MDX 식을 만들 수 있습니다. 그러나 이를 위해서는 먼저 MicrosoftSQL ServerAnalysis Services 차원의 개념과 용어를 이해해야 합니다. 다음 섹션에는 기본적인 차원 모델링의 개념과 용어가 개략적으로 설명되어 있습니다. 뒷부분의 섹션에서는 이러한 개념을 적용하는 방법을 보여 줍니다.
자세한 내용은 Microsoft TechNet 웹 사이트의 SQL Server 2005 – Analysis Services 페이지에서 추가 리소스(Additional Resources) 섹션을 참조하십시오. MDX 쿼리 및 계산과 관련된 성능 문제에 대한 자세한 내용은 SQL Server 2005 Analysis Services 성능 가이드(SQL Server 2005 Analysis Services Performance Guide)의 "효율적인 MDX 작성(Writing Efficient MDX)" 섹션을 참조하십시오.
차원 모델링 용어 및 개념
MicrosoftSQL ServerAnalysis Services 큐브는 측정값, 차원 및 차원 특성을 기반으로 구성됩니다. 다음 표에서는 MDX 식 언어를 사용하기 위해 이해하고 있어야 하는 차원 모델링 용어 및 개념에 대해 설명합니다.
데이터베이스 차원
데이터베이스 차원은 키 특성과 관련이 있는 차원 특성의 컬렉션이며 키 특성은 측정값 차원의 팩트와 관련이 있습니다.차원 특성
차원 특성은 차원 테이블에 있는 하나 이상의 열에 바인딩되어 있으며 멤버를 포함합니다. 차원 특성에는 고객 이름, 월 이름, 제품 이름 등이 포함될 수 있습니다.멤버
멤버는 측정값 차원을 비롯한 차원 특성의 값입니다. 계층의 멤버는 리프 멤버, 부모 멤버, 데이터 멤버 또는 (All) 멤버일 수 있습니다.측정값
측정값은 팩트 테이블의 값으로, 팩트라고도 합니다. 측정값 차원의 값은 일반적으로 멤버라고도 합니다. 측정값은 일반적으로 숫자 값이지만 문자열 값일 수도 있습니다.측정값 차원
측정값 차원은 큐브의 모든 측정값이 들어 있는 차원입니다. 측정값 차원은 특별한 종류의 차원으로서, 이 차원의 멤버는 일반적으로 지정한 측정값과 함께 존재하는 각 차원 특성의 현재 멤버에 따라 Sum 또는 Count 등의 함수로 집계됩니다.측정값 그룹
측정값 그룹은 SQL Server Analysis Services의 큐브에 있는 관련 측정값(일반적으로 동일한 팩트 테이블의 측정값) 모음입니다. SQL Server Analysis Services에서는 한 큐브에 여러 개의 측정값 그룹이 있을 수 있습니다.(All) 멤버
(All) 멤버는 특성 계층이나 사용자 정의 계층의 모든 멤버에 대해 계산된 값입니다.계산 멤버
계산 멤버는 쿼리할 때 정의 및 계산되는 차원 멤버입니다. 계산 멤버는 사용자 쿼리나 MDX 계산 스크립트에서 정의되고 서버에 저장될 수 있습니다. 계산 멤버는 해당 멤버가 정의된 차원의 차원 테이블에 있는 행에 대응됩니다.데이터 멤버
데이터 멤버는 부모-자식 계층에서 부모 멤버와 연결된 자식 멤버입니다. 데이터 멤버에는 부모의 자식에 대한 집계 값이 아니라 부모 멤버에 대한 데이터 값이 들어 있습니다.부모 멤버
부모 멤버는 부모-자식 계층에서 자식에 대한 집계 값이 들어 있는 멤버입니다.리프 멤버
리프 멤버는 계층에서 자식이 없는 멤버입니다.자식 멤버
자식 멤버는 계층에서 최상위 수준 아래에 있는 멤버입니다.키 특성
데이터베이스 차원의 키 특성은 해당 차원에서 키가 아닌 모든 특성이 직접 또는 간접적으로 연결된 특성입니다. 키 특성은 세분성 특성이 되는 경우도 있습니다.세분성 특성
큐브 차원의 특성으로서, 차원을 측정값 차원의 측정값 그룹에 있는 팩트와 연결합니다. 세분성 특성과 키 특성이 다른 경우 키가 아닌 특성은 세분성 특성에 직접 또는 간접적으로 연결되어야 합니다. 큐브 내에서 세분성 특성은 차원 세분성을 정의합니다.큐브 차원
큐브 차원은 큐브 내의 데이터베이스 차원 인스턴스입니다.특성 계층
특성 계층은 다음 수준이 들어 있는 특성 멤버 계층입니다.각각의 고유 특성 멤버가 들어 있는 리프 수준. 리프 수준의 각 멤버는 리프 멤버라고도 합니다.
중간 수준(특성 계층이 부모-자식 계층인 경우)
특성 계층의 리프 멤버에 대한 집계 값이 들어 있는 선택적 (All) 수준(IsAggregatable=True). (All) 수준의 멤버는 (All) 멤버라고도 합니다.
기본적으로 특성 계층은 각 차원 특성에 대해 정의됩니다(AttributeHierarchyEnabled=True). 특성 계층은 기본적으로 표시됩니다(AttributeHierarchyVisible=True).
균형 계층
균형 계층은 최상위 수준과 모든 리프 멤버 사이의 수준 수가 동일한 계층입니다.비정형 계층
불균형 계층을 참조하십시오.불균형 계층
불균형 계층은 최상위 수준과 리프 수준 사이의 수준 수가 다른 계층입니다. 불균형 계층의 예로는 부모-자식 계층이 있습니다. 불균형 계층을 비정형 계층이라고도 합니다.부모-자식 계층
부모-자식 계층은 특수한 유형의 특성 계층으로서, 차원의 특성이 parent 유형으로 설정된 계층입니다. 부모-자식 계층은 자식 및 부모 멤버로 구성된 불균형 계층입니다. 부모-자식 계층에는 다음 수준이 들어 있습니다.부모 멤버의 자식이 들어 있는 자식 수준. 부모의 자식에는 데이터 멤버를 비롯하여 부모 멤버로 집계되는 특성 멤버가 포함됩니다.
부모 멤버가 들어 있는 중간 수준
부모-자식 계층의 리프 멤버에 대한 집계 값이 들어 있는 선택적 (All) 수준(IsAggregatable=True). (All) 수준의 멤버는 (All) 멤버라고도 합니다.
부모-자식 계층은 한 차원에 하나만 있을 수 있으며 키 특성과 관련되어 있어야 합니다.
사용자 정의 계층
사용자 정의 계층은 특성 계층의 불균형 계층으로서, 사용자가 큐브 데이터를 쉽게 찾을 수 있도록 하는 데 사용됩니다. 사용자 정의 계층을 사용해도 큐브 공간은 늘어나지 않습니다. 사용자 정의 계층의 수준은 특정 상황에서 숨겨질 수 있으며 불균형 상태로 나타날 수 있습니다.특성 관계
특성 관계는 특성 간의 일 대 다 관계입니다. 예를 들어 시/도 차원 특성과 구/군/시 차원 특성의 관계가 이에 해당합니다.멤버 속성
멤버 속성은 특성 멤버의 속성입니다. 예를 들어 고객의 성별이나 제품의 색이 이에 해당합니다.셀
큐브의 셀은 큐브에서 측정값 차원의 멤버와 각 특성 계층의 멤버가 교차하는 지점에 있는 영역입니다.측정값 차원의 멤버는 리프 멤버(개별 팩트)이거나 집계 멤버(예: 특정 연도의 매출 집계)일 수 있습니다.
차원의 멤버는 리프 멤버, 데이터 멤버, 부모 멤버 또는 (All) 멤버일 수 있습니다.
큐브 공간
큐브 공간은 큐브 특성 계층의 멤버와 큐브의 측정값을 곱하여 생성된 공간입니다.하위 큐브
하위 큐브는 큐브의 필터링된 뷰를 나타내는 큐브 하위 집합입니다. 하위 큐브는 MDX 계산 스크립트의 SCOPE 문이나 MDX 쿼리의 하위 SELECT 절을 사용하여 정의할 수 있습니다.하위 SELECT 절로 정의된 하위 큐브
MDX 쿼리에서 하위 SELECT 절을 사용하여 정의된 하위 큐브에는 해당 하위 큐브 정의와 함께 존재하는 모든 멤버가 포함됩니다. 이때 적용되는 규칙은 다음과 같습니다.계층의 (All) 멤버를 포함하는 것은 해당 계층의 모든 리프 멤버를 포함하는 것과 같습니다.
모든 멤버를 포함할 경우 멤버의 상위 항목과 하위 항목이 포함됩니다.
사용자 정의 계층에 있는 한 수준의 모든 멤버를 포함할 경우 해당 사용자 정의 계층의 모든 멤버가 포함되지만 고객이 없는 도시와 같이 해당 수준의 멤버와 함께 존재하지 않는 다른 계층의 멤버는 제외될 수 있습니다.
큐브의 (All) 멤버는 모두 해당 큐브에서 만들어진 하위 큐브에 항상 포함됩니다.
하위 큐브 내의 집계 값은 시각적으로 합쳐집니다.
튜플
튜플은 큐브에 있는 각 특성 계층의 한 특성으로 구성된 특성 멤버의 조합에 따라 하나의 셀을 고유하게 식별합니다. MDX 쿼리 또는 식에서 튜플을 정의할 때 각 특성 계층의 특성 멤버를 명시적으로 포함할 필요는 없습니다. 쿼리나 식에 특성 계층의 멤버가 명시적으로 포함되어 있지 않으면 해당 특성 계층의 기본 멤버가 암시적으로 튜플에 포함됩니다. 큐브에 명시적으로 달리 정의되어 있지 않고 (All) 멤버가 있는 경우 모든 특성 계층의 기본 멤버는 (All) 멤버입니다. 특성 계층 내에 (All) 멤버가 없는 경우 기본 멤버는 해당 특성 계층의 최상위 수준 멤버입니다. 또한 기본 측정값이 명시적으로 정의되지 않은 경우 큐브에 지정된 첫 번째 측정값이 기본 측정값이 됩니다. 자세한 내용은 기본 멤버 정의 및 DefaultMember(MDX)를 참조하십시오.
예를 들어 다음 튜플은 Adventure Works 데이터베이스에서 Measures 차원의 단일 멤버만을 명시적으로 정의하여 단일 셀을 식별합니다.
(Measures.[Reseller Sales Amount])
이 예에서는 Measures 차원의 Reseller Sales Amount 멤버와 큐브에 있는 각 특성 계층의 기본 멤버로 구성된 셀을 고유하게 식별합니다. Destination Currency 특성 계층을 제외한 모든 특성 계층의 기본 멤버는 (All) 멤버입니다. Destination Currency 계층의 기본 멤버는 US Dollar 멤버입니다. 이 기본 멤버는 Adventure Works 큐브에 대한 MDX 스크립트에 정의되어 있습니다.
중요 |
---|
튜플에 있는 특성 계층의 멤버는 차원 내의 특성 간에 정의된 관계에 따라서도 영향을 받습니다. 자세한 내용은 아래의 특성 관계 및 큐브 공간을 참조하십시오. |
다음 쿼리에서는 앞의 예에서 지정한 튜플이 참조하는 셀의 값($80,450.596.98)을 반환합니다.
SELECT
Measures.[Reseller Sales Amount] ON COLUMNS
FROM [Adventure Works]
[!참고]
쿼리에서 집합(이 경우 단일 튜플로 구성)의 축을 지정할 때는 먼저 열 집합 축을 지정한 후 행 집합 축을 지정해야 합니다. 열 축은 axis(0) 또는 간단히 0으로도 참조할 수 있습니다. MDX 쿼리에 대한 자세한 내용은 기본 MDX 쿼리(MDX)를 참조하십시오.
앞의 예에서처럼 쿼리에 튜플을 사용하여 해당 튜플이 참조하는 셀의 값을 반환할 수 있습니다. 또는 식에 튜플을 사용하여 해당 튜플에 지정된 멤버를 명시적으로 참조할 수 있습니다. 쿼리나 식에서는 튜플을 반환하거나 구성하는 함수를 이용할 수 있습니다. 튜플을 사용하면 해당 튜플이 지정하는 셀의 값을 참조할 수 있으며 튜플을 함수에 사용할 경우에는 멤버의 조합을 지정할 수 있습니다.
튜플의 차원은 해당 튜플에서 멤버가 나타나는 순서 또는 시퀀스를 나타냅니다. 암시적 멤버는 항상 동일한 순서로 나타나므로 차원은 대개 튜플에 명시적으로 정의된 멤버의 측면에서 생각할 수 있습니다. 튜플 집합을 정의할 때는 튜플의 멤버 순서가 중요합니다. 다음 예에서는 튜플의 두 멤버를 열 축에 포함합니다.
SELECT
([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004]) ON COLUMNS
FROM [Adventure Works]
[!참고]
둘 이상의 차원에서 튜플의 멤버를 명시적으로 지정할 때는 튜플 전체를 괄호로 묶어야 합니다. 튜플의 단일 멤버만 지정할 때는 괄호로 묶지 않아도 됩니다.
앞의 예에 나온 쿼리의 튜플은 Measures 차원의 Reseller Sales Amount 측정값과 Date 차원의 Calendar Year 특성 계층 중 CY 2004 멤버가 교차하는 지점의 큐브 셀을 반환하도록 지정합니다.
[!참고]
특성 멤버는 멤버 이름이나 멤버 키로 참조할 수 있습니다. 앞의 예에서 [CY 2004]에 대한 참조는 &[2004]로 바꿀 수 있습니다.
집합
집합은 차원이 동일한 튜플의 정렬된 집합입니다. 다음은 집합의 예입니다.
SELECT
{
([Measures].[Reseller Sales Amount],
[Date].[Calendar Year].[CY 2003]),
([Measures].[Reseller Sales Amount],
[Date].[Calendar Year].[CY 2004])
} ON COLUMNS
FROM [Adventure Works]
[!참고]
튜플 집합을 지정하려면 중괄호 {}를 사용합니다.
앞의 예에서 집합의 각 튜플은 모두 Measures 차원의 멤버가 첫 번째 멤버이고 Calendar Year 특성 계층의 멤버가 두 번째 멤버이므로 동일한 차원을 갖습니다. 어느 한 튜플의 두 번째 멤버가 Calendar Month와 같이 Date 차원의 다른 특성 계층에 속하는 것이면 차원이 다름을 나타내는 오류가 발생합니다.
팁 |
---|
별칭으로 집합을 만들 수 있습니다. 이러한 집합을 명명된 집합이라고 합니다. 복잡한 MDS 식에서 명명된 집합을 사용하면 MDX 쿼리를 이해하거나 다시 사용하기가 쉬워집니다. 명명된 집합을 사용하려면 집합 식별자 다음에 "AS"와 원하는 별칭 이름을 차례로 사용합니다. |
큐브 공간과 AUTOEXIST
이 항목의 앞 부분에서는 큐브 공간을 특성 계층의 멤버 간의 곱으로 정의했습니다. AUTOEXIST의 개념은 이 큐브 공간을 실제로 존재하는 셀로 제한합니다. 한 차원에 있는 특성 계층의 멤버가 동일한 차원에 있는 다른 특성 계층의 멤버와 함께 존재하지 않을 수 있습니다.
예를 들어 City 특성 계층, Country 특성 계층 및 Internet Sales Amount 측정값이 있는 큐브에서 이 큐브의 공간에는 서로 함께 존재하는 멤버만 포함됩니다. 예를 들어 City 특성 계층에 New York, London, Paris, Tokyo 및 Melbourne이 포함되어 있고 Country 특성 계층에 United States, United Kingdom, France, Japan 및 Australia가 포함되어 있는 경우 Paris와 United States가 교차하는 지점의 공간(셀)은 해당 큐브 공간에 포함되지 않습니다.
존재하지 않는 셀을 쿼리하면 존재하지 않는 셀에서는 Null이 반환됩니다. 즉, 이 셀에는 계산이 들어 있지 않으며 이 공간에 쓰는 계산은 정의할 수 없습니다. 예를 들어 다음 문은 존재하지 않는 셀을 포함합니다.
SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,
{[Customer].[Customer].[Aaron A. Allen]
,[Customer].[Customer].[Abigail Clark]} ON ROWS
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
[!참고]
이 쿼리에서는 Members(집합)(MDX) 함수를 사용하여 Gender 특성 계층의 멤버 집합을 열 축에 반환하고 Customer 특성 계층의 지정한 멤버 집합을 행 축에 반환하여 두 집합을 교차시킵니다.
앞의 쿼리를 실행하면 Aaron A. Allen과 Female이 교차하는 셀에는 Null이 표시됩니다. 마찬가지로 Abigail Clark와 Male이 교차하는 셀에도 Null이 표시됩니다. 이러한 셀은 존재하지 않으며 값을 포함할 수 없지만 쿼리에서 반환되는 결과에는 존재하지 않는 셀도 나타납니다.
Crossjoin(MDX) 함수를 사용하여 동일한 차원에 있는 특정 계층의 특성 계층 멤버 간 교차곱을 반환할 때 AUTOEXIST는 전체 카티전 곱이 반환되는 것이 아니라 실제 존재하는 튜플 집합만 반환되도록 제한합니다. 예를 들어 다음 쿼리를 실행한 다음 실행 결과를 확인하십시오.
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[State-Province].Members
) ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
[!참고]
0은 열 축을 지정하는 데 사용되었으며 열 축을 나타내는 axis(0)의 바로 가기입니다.
앞의 쿼리는 쿼리의 각 특성 계층에서 서로 함께 존재하는 멤버의 셀만 반환합니다. 이 쿼리는 *(Crossjoin)(MDX) 함수의 새로운 * 변형을 사용하여 작성할 수도 있습니다.
SELECT
[Customer].[Country].[United States] *
[Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
이 쿼리는 다음과 같이 작성할 수도 있습니다.
SELECT [Customer].[State-Province].Members
ON 0
FROM [Adventure Works]
WHERE (Measures.[Internet Sales Amount],
[Customer].[Country].[United States])
결과 집합의 메타데이터는 다르지만 반환되는 셀 값은 동일합니다. 예를 들어 앞의 쿼리를 사용할 경우 Country 계층은 WHERE 절을 통해 slicer 축으로 이동되므로 결과 집합에 명시적으로 나타나지 않습니다.
앞의 세 쿼리는 각각 SQL ServerAnalysis Services에서 AUTOEXIST 동작이 미치는 영향을 보여 줍니다.
사용자 정의 계층 및 큐브 공간
이 항목의 앞에 나온 예제에서는 특성 계층을 사용하여 큐브 공간 내의 위치를 정의합니다. 그러나 차원의 특성 계층에 따라 정의한 사용자 정의 계층을 사용하여 큐브 공간 내의 위치를 정의할 수도 있습니다. 사용자 정의 계층은 사용자가 큐브 데이터를 쉽게 찾을 수 있도록 디자인된 특성 계층의 한 계층입니다.
예를 들어 이전 섹션의 CROSSJOIN 쿼리를 다음과 같이 작성할 수도 있습니다.
SELECT CROSSJOIN
(
{[Customer].[Country].[United States]},
[Customer].[Customer Geography].[State-Province].Members
)
ON 0
FROM [Adventure Works]
WHERE Measures.[Internet Sales Amount]
이 쿼리에서 Customer 차원 내의 사용자 정의 계층인 Customer Geography는 이전에 특성 계층을 사용하여 정의한 큐브 공간 내의 위치를 정의하는 데 사용됩니다. 즉, 큐브 공간 내의 동일한 위치를 특성 계층이나 사용자 정의 계층 중 하나를 사용하여 정의할 수 있습니다.
특성 관계 및 큐브 공간
관련된 특성 간의 특성 관계를 정의하면 적절한 집계를 쉽게 만들 수 있으므로 쿼리 성능이 향상되며 특성 계층 멤버와 함께 나타나는 관련 특성 계층의 멤버에 영향을 줄 수 있습니다. 예를 들어 City 특성 계층의 멤버를 포함하는 튜플을 정의할 때 해당 튜플에 Country 특성 계층 멤버가 명시적으로 정의되어 있지 않으면 기본 Country 특성 계층 멤버가 Country 특성 계층의 관련 멤버가 됩니다. 그러나 이는 City 특성 계층과 Country 특성 계층 간에 특성 관계가 정의되어 있는 경우에만 해당됩니다.
다음 예에서는 쿼리에 명시적으로 포함되지 않은 관련 특성 계층의 멤버를 반환합니다.
WITH MEMBER Measures.x AS
Customer.Country.CurrentMember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
[!참고]
WITH 키워드는 CurrentMember(MDX) 및 Name(MDX) 함수와 함께 쿼리에 사용할 계산 멤버를 만드는 데 사용됩니다. 자세한 내용은 기본 MDX 쿼리(MDX)를 참조하십시오.
앞의 쿼리에서는 State 특성 계층의 각 멤버와 관련된 Country 특성 계층의 멤버 이름이 반환됩니다. 이 경우 City 특성과 Country 특성 간의 특성 관계가 정의되어 있으므로 예상한 Country 멤버가 나타납니다. 그러나 동일한 차원의 특성 계층 간에 특성 관계가 정의되어 있지 않으면 (All) 멤버가 반환됩니다. 다음 쿼리에서는 이를 보여 줍니다.
WITH MEMBER Measures.x AS
Customer.Education.Currentmember.Name
SELECT Measures.x ON 0,
Customer.City.Members ON 1
FROM [Adventure Works]
이 쿼리에서는 Education과 City 간의 관계가 없으므로 (All) 멤버("All Customers")가 반환됩니다. 따라서 Education 특성 계층의 (All) 멤버는 Education 멤버가 명시적으로 지정되지 않은 경우 City 특성 계층이 관련된 모든 튜플에서 사용되는 Education 특성 계층의 기본 멤버입니다.
계산 컨텍스트
모든 집합, 멤버, 튜플, 또는 숫자 함수는 MDX 식 또는 문 전체의 컨텍스트에서 실행됩니다. 튜플과 같은 인수가 함수에 전달될 때는 큐브 공간의 일부 좌표만 명시적으로 제공됩니다. 다른 좌표는 현재 계산 컨텍스트에 따라 얻습니다. 지정되지 않은 셀 좌표 및 특성 멤버의 계산 컨텍스트는 다음 순서에 따라 결정됩니다.
FROM 절(해당되는 경우) - 이 절은 큐브 전체를 지정하거나 SELECT 문 형식으로 하위 큐브를 지정할 수 있습니다.
WHERE 절(해당되는 경우) - 이 절은 slicer 축이라고도 하며, 쿼리에서 열 및 행 축에 반환되는 멤버를 제한하는 집합, 튜플 또는 멤버를 지정하는 데 사용됩니다. 개념적으로 열 또는 행 축에 명시적으로 지정되지 않은 모든 특성 계층의 기본 멤버는 slicer 축의 일부입니다.
[!참고]
특정 특성의 셀 좌표가 slicer 축과 다른 축 모두에서 지정된 경우 축의 집합 멤버를 결정할 때는 함수에 지정된 좌표가 우선합니다. Filter(MDX) 및 Order(MDX) 함수는 이러한 함수의 예입니다. 즉, WHERE 절이나 FROM 절의 SELECT 문을 사용하여 계산 컨텍스트에서 제외된 특성 멤버를 기준으로 결과를 필터링하거나 정렬할 수 있습니다.
쿼리 또는 식에 정의된 명명된 집합 및 계산 멤버
행 및 열 축에 지정된 튜플과 집합. 이때 행, 열 또는 slicer 축에 나타나지 않는 특성에는 기본 멤버를 사용합니다.
각 축의 큐브 또는 하위 큐브 셀. 이때 축의 빈 튜플은 제거하고 HAVING 절을 적용합니다.
자세한 내용은 쿼리에 큐브 컨텍스트 설정(MDX)을 참조하십시오.
다음 쿼리에서 행 축의 계산 컨텍스트는 WHERE 절에 지정된 Country 특성 멤버와 Calendar Year 특성 멤버에 의해 제한됩니다.
SELECT Customer.City.City.Members ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France, [Date].[Calendar].[Calendar Year].[CY 2004],
Measures.[Internet Sales Amount])
- 그러나 행 축에 FILTER 함수를 지정하여 이 쿼리를 수정하고 FILTER 함수에서 Calendar Year 특성 계층 멤버를 사용하면 열 축의 집합 멤버에 대한 계산 컨텍스트를 지정하는 데 사용된 Calendar Year 특성 계층의 특성 멤버가 수정될 수 있습니다.
SELECT FILTER
(
Customer.City.City.Members,
([Date].[Calendar].[Calendar Year].[CY 2003],
Measures.[Internet Order Quantity]) > 75
) ON 0
FROM [Adventure Works]
WHERE (Customer.Country.France,
[Date].[Calendar].[Calendar Year].[CY 2004],
Measures.[Internet Sales Amount])
- 이 쿼리에서 Calendar Year 특성 계층의 명목적 계산 컨텍스트는 CY 2004이지만 열 축에 나타나는 튜플의 셀에 대한 계산 컨텍스트는 Calendar Year 특성 계층의 CY 2003 멤버에 따라 필터링됩니다. 또한 이 계산 컨텍스트는 Internet Order Quantity 측정값에 따라서도 필터링됩니다. 그러나 열 축의 집합 멤버가 설정되고 나면 해당 축에 나타나는 멤버의 값에 대한 계산 컨텍스트는 다시 WHERE 절에 따라 결정됩니다.
중요 |
---|
쿼리 성능을 향상시키려면 멤버와 튜플을 확인 과정에서 가능한 한 빨리 제거해야 합니다. 이렇게 하면 쿼리할 때 최종 멤버 집합에 대한 복잡한 계산이 가능한 가장 적은 수의 셀에 대해 수행됩니다. |
중요 |
---|
식이 계산되는 계산 순서와 패스는 식의 최종 값과 관련이 있습니다. 이러한 값이 계산에 미칠 수 있는 영향에 대한 자세한 내용은 패스 순서 및 계산 순서 이해(MDX)를 참조하십시오. |