TopPercent (MDX)
Classifica um conjunto em ordem decrescente e retorna um conjunto de tuplas com os valores mais altos, cujo total cumulativo é igual ou maior do que um percentual especificado.
Sintaxe
TopPercent(Set_Expression, Percentage, Numeric_Expression)
Argumentos
Set_Expression
Uma linguagem MDX válida que retorna um conjunto.Percentage
Uma expressão numérica válida que especifica o percentual de tuplas a ser retornado.Importante Percentage precisa ser um valor positivo; valores negativos geram um erro.
Numeric_Expression
Uma expressão numérica válida, geralmente uma linguagem MDX de coordenadas de célula, que retorna um número.
Comentários
A função TopPercent calcula a soma da expressão numérica especificada avaliada no conjunto especificado, classificando o conjunto em ordem decrescente. A função retorna os elementos com os valores mais altos, cujo percentual cumulativo do valor total somado seja pelo menos o percentual especificado. Essa função retorna o subconjunto menor de um conjunto cujo total cumulativo é pelo menos o percentual especificado. Os elementos retornados são classificados do maior para menor.
Cuidado |
---|
Se Numeric_Expression retornar qualquer valor negativo, TopPercent retornará apenas uma (1) linha. Consulte o segundo exemplo para obter uma apresentação detalhada desse comportamento. |
Importante |
---|
Assim como a função BottomPercent, a função TopPercent sempre quebra a hierarquia. |
Exemplo
O exemplo a seguir retorna as melhores cidades que ajudam a fazer os 10% principais das vendas do revendedor para a categoria Bike. O resultado é classificado em ordem decrescente, começando com a cidade que tem o valor mais alto de vendas.
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])
A expressão acima produz os seguintes resultados:
Reseller Sales Amount |
|
---|---|
Toronto |
$3,508,904.84 |
London |
$1,521,530.09 |
Seattle |
$1,209,418.16 |
Paris |
$1,170,425.18 |
O conjunto original de dados pode ser obtido com a consulta seguinte e retorna 588 linhas:
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])
Exemplo
O passo a passo ajudará a entender o efeito dos valores negativos na Numeric_Expression. Primeiro, vamos criar algum contexto onde podemos apresentar o comportamento.
A consulta a seguir retorna uma tabela de Resellers 'Sales Amount', 'Total Product Cost' e 'Gross Profit', em ordem decrescente de lucro. Observe que somente há valores negativos para lucro; portanto, a menor perda aparecerá no início.
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]
A consulta acima retorna os resultados a seguir; as linhas da seção intermediária foram removidas para proporcionar legibilidade.
Reseller Sales Amount |
Reseller Total Product Cost |
Reseller Gross Profit |
|
---|---|---|---|
Touring-2000 Blue, 50 |
$157,444.56 |
$163,112.57 |
($5,668.01) |
Touring-2000 Blue, 46 |
$321,027.03 |
$333,021.50 |
($11,994.47) |
Touring-3000 Blue, 62 |
$87,773.61 |
$100,133.52 |
($12,359.91) |
… |
… |
… |
… |
Touring-1000 Yellow, 46 |
$1,016,312.83 |
$1,234,454.27 |
($218,141.44) |
Touring-1000 Yellow, 60 |
$1,184,363.30 |
$1,443,407.51 |
($259,044.21) |
Agora, se pedissem a você para apresentar as principais bicicletas 100% por lucro, seria necessário escrever uma consulta como:
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]
Observe que a consulta solicita um percentual de 100%; o que significa que todas as linhas devem ser retornadas. No entanto, como há valores negativos em Numeric_Expression , somente uma linha é retornada.
Reseller Sales Amount |
Reseller Total Product Cost |
Reseller Gross Profit |
|
---|---|---|---|
Touring-2000 Blue, 50 |
$157,444.56 |
$163,112.57 |
($5,668.01) |