쿼리 축의 내용 지정(MDX)

쿼리 축은 MDX SELECT 문에 의해 반환되는 셀 집합의 가장자리를 지정합니다. 셀 집합의 가장자리를 지정하면 클라이언트에 표시되는 반환 데이터를 제한할 수 있습니다.

쿼리 축을 지정하려면 <SELECT query axis clause>를 사용하여 집합을 특정 쿼리 축에 할당합니다. 각 <SELECT query axis clause> 값은 하나의 쿼리 축을 정의합니다. 데이터 집합의 축 수는 SELECT 문의 <SELECT query axis clause> 값의 개수와 동일합니다.

쿼리 축 구문

다음 구문은 <SELECT query axis clause>의 구문을 보여 줍니다.

<SELECT query axis clause> ::=
   [ NON EMPTY ] Set_Expression [ <SELECT dimension property list clause> ] [<HAVING clause>]
   ON {
      Integer_Expression | 
      AXIS( Integer_Expression ) | 
      {COLUMNS | ROWS | PAGES | SECTIONS | CHAPTERS}   
      }
      

각 쿼리 축에는 번호가 있습니다. 즉, x 축에는 0, y 축에는 1, z 축에는 2 등과 같은 번호가 지정됩니다. <SELECT query axis clause> 구문에서 Integer_Expression 값은 축 번호를 지정합니다. MDX 쿼리는 지정된 축을 128개까지 지원할 수 있지만, 6개 이상의 축을 사용하는 MDX 쿼리는 극소수입니다. 처음 5개의 축에 대해서는 COLUMNS, ROWS, PAGES, SECTIONS 및 CHAPTERS와 같은 별칭을 대신 사용할 수 있습니다.

MDX 쿼리는 쿼리 축을 건너뛸 수 없습니다. 즉, 한 개 이상의 쿼리 축이 포함된 쿼리는 하위 번호 또는 중간 축을 제외해서는 안 됩니다. 예를 들어 COLUMNS 축 없이는 쿼리에 ROWS 축을 사용할 수 없습니다. 또는 ROWS 축 없이는 COLUMNS와 PAGES 축을 사용할 수 없습니다.

그러나 축 없이 SELECT 절(즉, 빈 SELECT 절)을 지정할 수 있습니다. 이 경우 모든 차원이 slicer 차원이며, MDX 쿼리에서 한 셀을 선택합니다.

앞에서 표시한 쿼리 축 구문에서 각 Set_Expression 값은 쿼리 축의 내용을 정의하는 집합을 지정합니다. 집합에 대한 자세한 내용은 멤버, 튜플 및 집합 작업(MDX)을 참조하십시오.

다음의 간단한 SELECT 문은 Columns 축에 Internet Sales Amount 측정값을 반환하고, MDX MEMBERS 함수를 사용하여 Calendar 계층의 모든 멤버를 Rows 축의 Date 차원에 반환합니다.

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

다음 쿼리는 똑같은 결과를 반환하지만 별칭이 아닌 축 번호를 사용하는 것을 보여 줍니다.

SELECT {[Measures].[Internet Sales Amount]} ON 0,
{[Date].[Calendar].MEMBERS} ON 1
FROM [Adventure Works]

SELECT {[Measures].[Internet Sales Amount]} ON AXIS(0),
{[Date].[Calendar].MEMBERS} ON AXIS(1)
FROM [Adventure Works]

집합 정의 앞에 사용된 NON EMPTY 키워드는 축에서 빈 튜플을 모두 제거하는 손쉬운 방법입니다. 예를 들어 지금까지의 예에서 August 2004 이후의 큐브에는 데이터가 없습니다. 셀 집합에서 열에 데이터가 없는 모든 행을 제거하려면 다음과 같이 Rows 축 정의에서 집합 앞에 NON EMPTY를 추가하기만 하면 됩니다.

SELECT {[Measures].[Internet Sales Amount]} ON COLUMNS,
NON EMPTY
{[Date].[Calendar].MEMBERS} ON ROWS
FROM [Adventure Works]

NON EMPTY는 쿼리의 모든 축에서 사용할 수 있습니다. 다음 두 개의 쿼리를 비교해 보십시오. 첫 번째 쿼리는 NON EMPTY를 사용하지 않고 두 번째 쿼리는 모든 축에서 NON EMPTY를 사용합니다.

SELECT {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

SELECT NON EMPTY {[Measures].[Internet Sales Amount]} 
* [Promotion].[Promotion].[Promotion].MEMBERS
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Calendar Year].MEMBERS} ON ROWS
FROM [Adventure Works]
WHERE([Product].[Subcategory].&[19])

HAVING 절을 사용하여 특정 조건을 기준으로 축의 내용을 필터링할 수 있습니다. 이 방법은 FILTER 함수와 같이 동일한 결과를 가져올 수 있는 다른 방법에 비해 유연성이 떨어지지만 더 간편합니다. 다음 예는 Internet Sales Amount가 $15,000보다 큰 날짜만 반환합니다.

SELECT {[Measures].[Internet Sales Amount]} 
ON COLUMNS,
NON EMPTY
{[Date].[Calendar].[Date].MEMBERS} 
HAVING [Measures].[Internet Sales Amount]>15000
ON ROWS
FROM [Adventure Works]

참고 항목

개념