Order(MDX)

지정한 집합의 멤버를 정렬합니다. 계층을 유지하거나 바꿀 수도 있습니다.

구문

Numeric expression syntax
Order(Set_Expression, Numeric_Expression 
[ , { ASC | DESC | BASC | BDESC } ] )

String expression syntax
Order(Set_Expression, String_Expression 
[ , { ASC | DESC | BASC | BDESC } ] )

인수

  • Set_Expression
    집합을 반환하는 유효한 MDX 식입니다.

  • Numeric_Expression
    숫자를 반환하는 셀 좌표의 유효한 숫자 식으로서, 일반적으로 MDX 식입니다.

  • String_Expression
    문자열로 표현된 숫자를 반환하는 셀 좌표의 유효한 문자열 식으로서, 일반적으로 유효한 MDX 식입니다.

주의

Order 함수는 ASC 또는 DESC 플래그를 사용하여 지정된 것과 같이 계층적이거나 BASC 또는 BDESC 플래그를 사용하여 지정된 것과 같이(여기서 B는 "계층 무시(break hierarchy)"를 의미) 비계층적일 수 있습니다. ASC 또는 DESC가 지정된 경우 Order 함수는 먼저 계층에서 해당 위치에 따라 멤버를 정렬한 다음 각 수준을 정렬합니다. BASC 또는 BDESC가 지정된 경우 Order 함수는 계층과 관계없이 집합에서 멤버를 정렬합니다. 플래그가 지정되지 않은 경우에는 ASC가 기본값입니다.

두 개 이상의 계층이 크로스 조인되고 DESC 플래그가 사용되는 집합과 함께 Order 함수를 사용하는 경우 집합에 있는 마지막 계층의 멤버만 정렬됩니다. 이 사항은 집합에 있는 모든 계층이 정렬되는 Analysis Services 2000에서 변경되었습니다.

다음 예에서는 Adventure Works 큐브에서 Date 차원의 Calendar 계층에 있는 모든 Calendar Quarters에 대한 대리점 주문 건수를 반환합니다.Order 함수는 ROWS 축에 대한 집합을 다시 정렬합니다. Order 함수는 [Calendar] 계층에 의해 결정되는 내림차순 계층 순서로 [Reseller Order Count]에 따라 집합을 정렬합니다.

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

[Date].[Calendar].[Calendar Quarter].MEMBERS

,Measures.[Reseller Order Count]

,DESC

) ON ROWS

FROM [Adventure Works]

이 예에서는 DESC 플래그를 BDESC로 변경할 때 계층이 끊어지고 계층에 관계없이 Calendar Quarters 목록이 반환되는 방식을 살펴봅니다.

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

[Date].[Calendar].[Calendar Quarter].MEMBERS

,Measures.[Reseller Order Count]

,BDESC

) ON ROWS

FROM [Adventure Works]

다음 예에서는 Reseller Gross Profit를 기준으로 계층에 관계없이 판매량이 상위 5위 안에 속하는 제품 하위 범주에 대한 Reseller Sales 측정값을 반환합니다. Order 함수를 사용하여 결과를 정렬한 후 Subset 함수를 사용하여 집합에서 처음 5개의 튜플만 반환합니다.

SELECT Subset

(Order

([Product].[Product Categories].[SubCategory].members

,[Measures].[Reseller Gross Profit]

,BDESC

)

,0

,5

) ON 0

FROM [Adventure Works]

다음 예에서는 Rank 함수를 사용하여 Reseller Sales Amount 측정값에 따라 City 계층의 멤버 순위를 지정하고 해당 멤버를 순위에 따라 표시합니다. Order 함수를 사용하여 먼저 City 계층의 멤버 집합을 정렬하면 정렬이 한 번만 수행된 다음 정렬된 결과가 표시되기 전에 선형 검색이 수행됩니다.

WITH 
SET OrderedCities AS Order
   ([Geography].[City].[City].members
   , [Measures].[Reseller Sales Amount], BDESC
   )
MEMBER [Measures].[City Rank] AS Rank
   ([Geography].[City].CurrentMember, OrderedCities)
SELECT {[Measures].[City Rank],[Measures].[Reseller Sales Amount]}  ON 0 
,Order
   ([Geography].[City].[City].MEMBERS
   ,[City Rank], ASC)
    ON 1
FROM [Adventure Works]

다음 예에서는 Order 함수를 사용하여 비어 있지 않은 튜플을 정렬한 후 Filter 함수를 사용하여 집합에서 고유한 제품의 수를 반환합니다. CurrentOrdinal 함수는 동률을 비교하고 제거하는 데 사용됩니다.

WITH MEMBER [Measures].[PrdTies] AS Count
   (Filter
      (Order
        (NonEmpty
          ([Product].[Product].[Product].Members
          , {[Measures].[Reseller Order Quantity]}
          )
       , [Measures].[Reseller Order Quantity]
       , BDESC
       ) AS OrdPrds
    , (OrdPrds.CurrentOrdinal < OrdPrds.Count 
       AND [Measures].[Reseller Order Quantity] = 
          ( [Measures].[Reseller Order Quantity]
            , OrdPrds.Item
               (OrdPrds.CurrentOrdinal
               )
            )
         )
         OR (OrdPrds.CurrentOrdinal > 1 
            AND [Measures].[Reseller Order Quantity] = 
               ([Measures].[Reseller Order Quantity]
               , OrdPrds.Item
                  (OrdPrds.CurrentOrdinal-2)
                )
             )
          )
       )
SELECT {[Measures].[PrdTies]} ON 0
FROM [Adventure Works]

DESC 플래그가 튜플 집합에서 작동하는 방식을 이해하려면 먼저 다음 쿼리의 결과를 살펴봅니다.

SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]

Rows 축에서는 Sales Territory Groups가 North America, Europe, Pacific, NA와 같이 Tax Amount를 기준으로 내림차순으로 정렬되었습니다. 이제 다음과 같이 Sales Territory Groups 집합을 제품 하위 범주 집합과 크로스 조인하고 Order 함수를 동일한 방법으로 적용하면 어떻게 되는지 살펴 봅니다.

SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]

Product Subcategories 집합은 내림차순의 계층 순서로 정렬되었지만 Sales Territory Groups는 이제 정렬되지 않고 Europe, NA, North America 및 Pacific과 같이 계층에 나타나는 순서로 나타납니다. 이유는 튜플 집합의 마지막 계층인 Product Subcategories만 정렬되기 때문입니다. Analysis Services 2000의 동작을 재현하려면 크로스 조인하기 전에 일련의 중첩 Generate 함수를 사용하여 각 집합을 정렬합니다. 예를 들면 다음과 같습니다.

SELECT
{[Measures].[Tax Amount]} ON 0,
GENERATE(
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
,
ORDER(
[Sales Territory].[Sales Territory].CURRENTMEMBER
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC))
ON 1
FROM [Adventure Works]

참고 항목

참조

MDX 함수 참조(MDX)