Поделиться через


Order (многомерные выражения)

Упорядочивает элементы указанного набора, по выбору сохраняя или нарушая иерархию.

Синтаксис

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
    Допустимое многомерное выражение, возвращающее набор.

  • Numeric_Expression
    Допустимое числовое выражение (обычно многомерное выражение координат ячейки, возвращающее число).

  • String_Expression
    Допустимое строковое выражение (обычно многомерное выражение над координатами ячейки), возвращающее число, представленное в виде строки.

Замечания

Функция Order может быть иерархической (флаги ASC или DESC) или неиерархической (флаги BASC или BDESC; B означает «break hierarchy» — нарушение иерархии). Если указан флаг ASC или DESC, функция Order сначала упорядочивает элементы согласно их положению в иерархии, а затем выполняет сортировку каждого уровня. Если указан флаг BASC или BDESC, функция Order упорядочивает элементы набора, не обращая внимания на иерархию. По умолчанию используется флаг ASC.

Примеры

В следующем примере возвращается количество заказов через торгового посредника для элемента [Sales Territory].[Northwest] и всех его предков из куба Adventure Works. Функция Order переупорядочивает набор, который содержит элемент [Sales Territory].[Northwest] и всех его предков по оси ROWS. Функция Order упорядочивает набор с самого верхнего до самого нижнего элемента в иерархическом порядке, определенном иерархией [Sales Territory].

SELECT
    Measures.[Reseller Order Count] ON COLUMNS,
    Order(
        Ascendants(
            [Sales Territory].[Sales Territory].[Northwest]
        ),
        DESC
    ) ON ROWS
FROM
    [Adventure Works]

В следующем примере возвращается мера Reseller Sales для пяти наиболее продаваемых подкатегорий товаров вне зависимости от иерархии, основываясь на значении меры Reseller Gross Profit. После упорядочивания результата при помощи функции Order функция Subset возвращает только первые пять кортежей в наборе.

SELECT Subset
   (Order 
      ([Product].[Product Categories].[SubCategory].members
         ,[Measures].[Reseller Gross Profit]
         ,BDESC
      )
   ,0
   ,5
   ) ON 0
FROM [Adventure Works]

В следующем примере функция Rank используется для упорядочивания элементов иерархии City по мере Reseller Sales Amount. Благодаря использованию функции 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]