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


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

Сортирует набор в убывающем порядке и возвращает набор кортежей с наибольшими значениями, совокупное значение которых равно указанному проценту или больше него.

Синтаксис

  
TopPercent(Set_Expression, Percentage, Numeric_Expression)   

Аргументы

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

Percentage
Допустимое числовое выражение, указывающее процент возвращаемых кортежей.

Внимание

Процент должен быть положительным значением; отрицательные значения создают ошибку.

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

Замечания

Функция TopPercent вычисляет сумму указанного числового выражения, вычисляемого по указанному набору, сортируя набор в порядке убывания. Затем функция возвращает элементы с наибольшими значениями, доля суммы которых в суммарном значении меньше указанного процента или равна ему. Эта функция возвращает самый маленький поднабор набора, совокупное значение которого равно по меньшей мере заданному проценту. Возвращенные элементы упорядочены по убыванию.

Предупреждение

Если Numeric_Expression возвращает любое отрицательное значение, TopPercent возвращает только одну строку (1).

Подробное представление такой особенности см. во втором примере.

Внимание

Как и функция BottomPercent, функция TopPercent всегда разбивает иерархию.

Примеры

О. Возврат TopPercent

В следующем примере возвращаются лучшие города, дающие вклад в 10 % от продаж посредников в категории Bike. Результат сортируется по убыванию, начиная с города с максимальной суммой продаж.

SELECT [Measures].[Reseller Sales Amount] ON 0,  
TopPercent  
   ({[Geography].[Geography].[City].Members}  
   , 10  
   , [Measures].[Reseller Sales Amount]  
   ) ON 1  
FROM [Adventure Works]  
WHERE([Product].[Product Categories].[Bikes])  

Приведенное выше выражение дает следующие результаты.

City Reseller Sales Amount
Торонто $3508,904,84
Лондон $1,521,530,09
Seattle $ 1,209,418.16
Париж $1,170,425.18

Исходный набор данных можно получить следующим запросом, возвращающим 588 строк:

SELECT [Measures].[Reseller Sales Amount] ON 0,  
Order  
   ({[Geography].[Geography].[City].Members}  
   , [Measures].[Reseller Sales Amount]  
   , BDESC  
   ) ON 1  
FROM [Adventure Works]  
WHERE([Product].[Product Categories].[Bikes])  
  

B. Общие сведения о влиянии отрицательных значений

В следующем пошаговом руководстве показано, как понять влияние отрицательных значений в Numeric_Expression. Сначала нужно построить контекст, где представлен этот эффект.

Следующий запрос возвращает таблицу со столбцами «Sales Amount», «Total Product Cost» и «Gross Profit» для посредников с сортировкой по убыванию прибыли. Заметьте, что для прибыли заданы только отрицательные значения, поэтому сверху будет отображаться минимальный убыток.

SELECT { [Measures].[Reseller Sales Amount], [Measures].[Reseller Total Product Cost], [Measures].[Reseller Gross Profit] } ON columns  
     ,  ORDER( [Product].[Product Categories].[Bikes].[Touring Bikes].children, [Measures].[Reseller Gross Profit], BDESC )   ON rows  
FROM [Adventure Works]  
  

Этот запрос возвращает следующие результаты. Средние строки удалены для упрощения чтения.

Туристические велосипеды Reseller Sales Amount Reseller Total Product Cost Reseller Gross Profit
Touring-2000 Blue, 50 $157,444,56 $163,112,57 ($5668.01)
Туринг-2000 Синий, 46 $321,027.03 $333,021,50 ($11,994,47)
Туринг-3000 Синий, 62 $87,773,61 $100,133,52 ($12,359.91)
... ... ... ...
Туринг-1000 желтый, 46 $ 1016,312.83 $1,234,454,27 ($218,141,44)
Touring-1000, желтый, 60 $1,184,363.30 $1,443,407,51 ($259,044,21)

Если нужно представить первые 100 % велосипедов по прибыльности, следует составить следующий запрос:

SELECT { [Measures].[Reseller Sales Amount], [Measures].[Reseller Total Product Cost], [Measures].[Reseller Gross Profit] } ON columns  
     ,  TOPPERCENT( [Product].[Product Categories].[Bikes].[Touring Bikes].children, 100,[Measures].[Reseller Gross Profit] )   ON rows  
FROM [Adventure Works]  
  

Заметьте, что в запросе указан размер выборки 100 % и должны возвращаться все строки. Однако, так как в Numeric_Expression есть отрицательные значения, возвращается только одна строка.

Туристические велосипеды Reseller Sales Amount Reseller Total Product Cost Reseller Gross Profit
Touring-2000 Blue, 50 $157,444,56 $163,112,57 ($5668.01)

См. также

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