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


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 обозначает "иерархию разрывов"). Если указан ASC или DESC , функция Order сначала упорядочивает элементы в соответствии с их положением в иерархии, а затем упорядочивает каждый уровень. Если указан BASC или BDESC , функция Order упорядочивает элементы в наборе без учета иерархии. Без указания флага ASC является значением по умолчанию.

Если функция Order используется с набором, где два или более иерархий пересекаются, а флаг DESC используется, упорядочены только члены последней иерархии в наборе. В этом заключается отличие от версии служб Analysis Services 2000, где сортировались все иерархии в наборе.

Примеры

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

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 иерархия нарушается, а список кварталов календаря возвращается без учета иерархии:

SELECT
  Measures.[Reseller Order Count] ON COLUMNS,
  Order (
    [Date].[Calendar].[Calendar Quarter].MEMBERS,
    Measures.[Reseller Order Count],
    BDESC
  ) ON ROWS
FROM [Adventure Works]

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

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

В следующем примере функция ранжирования используется для ранжирования членов иерархии "Город" на основе меры "Объем продаж торговых посредников", а затем отображает их в порядке ранжирования. Используя функцию Order для первого порядка набора элементов иерархии "Город", сортировка выполняется только один раз, а затем выполняется линейная проверка перед отображением в отсортированном порядке.

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 для упорядочивания непустых кортежей перед использованием функции фильтра . Функция 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]  
  

На оси строк можно увидеть, что группы территории продаж заказаны в порядке убывания по сумме налога, как показано ниже: Северная Америка, Европа, Тихоокеанский регион, NA. Теперь посмотрим, что произойдет, если мы пересекаем набор групп территорий продаж с набором подкатегорий продуктов и применяем функцию 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]  
  

Хотя набор подкатегорий продуктов был упорядочен по убыванию, иерархический порядок, группы территории продаж теперь не отсортированы и отображаются в порядке, который они отображаются в иерархии: Европа, NA, Северная Америка и Тихоокеанский регион. Это связано с тем, что сортируется только последняя иерархия в наборе кортежей, подкатегории продукции. Чтобы воспроизвести поведение служб 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]  

См. также

Справочник по функции многомерных выражений (многомерные выражения)