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

Возвращает ранг (начиная с единицы) указанного кортежа в указанном наборе.

Синтаксис

Rank(Tuple_Expression, Set_Expression [ ,Numeric Expression ] )

Аргументы

  • Tuple_Expression
    Допустимое многомерное выражение, возвращающее кортеж.

  • Set_Expression
    Допустимое многомерное выражение, возвращающее набор.

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

Замечания

Если числовое выражение указано, функция Rank определяет ранг (начиная с единицы) указанного кортежа, вычисляя числовое выражение над кортежем. Если числовое выражение указано, функция Rank присваивает всем кортежам набора с одинаковым значением один и тот же ранг. Присваивание одинакового ранга кортежам с повторяющимися значениями изменяет ранги последующих кортежей набора. Например, пусть набор состоит из кортежей {(a,b), (e,f), (c,d)}. Значение кортежа (a,b) совпадает со значением (c,d). Если кортеж (a,b) имеет ранг 1, то и (a,b), и (c,d) будут иметь ранг 1. Однако кортеж (e,f) будет иметь ранг 3. Кортежа с рангом 2 в наборе может не быть.

Если числовое выражение не указано, функция Rank возвращает порядковый номер указанного кортежа, начиная с единицы.

Функция Rank не упорядочивает набор.

Пример

В следующем примере возвращается набор кортежей, в котором содержатся заказчики и даты продаж, полученные с помощью функций Filter, NonEmpty, Item и Rank поиском даты последней покупки для каждого заказчика.

WITH SET MYROWS AS FILTER
   (NONEMPTY
      ([Customer].[Customer Geography].[Customer].MEMBERS
         * [Date].[Date].[Date].MEMBERS
         , [Measures].[Internet Sales Amount]
      ) AS MYSET
   , NOT(MYSET.CURRENT.ITEM(0)
      IS MYSET.ITEM(RANK(MYSET.CURRENT, MYSET)).ITEM(0))
   )
SELECT [Measures].[Internet Sales Amount] ON 0,
MYROWS ON 1
FROM [Adventure Works]

В следующем примере используется функция Order вместо 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]