Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Organiza membros de um conjunto especificado, opcionalmente preservando ou quebrando a hierarquia.
Sintaxe
Numeric expression syntax
Order(Set_Expression, Numeric_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
String expression syntax
Order(Set_Expression, String_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
Argumentos
Set_expression
Uma expressão válida de Expressões Multidimensionais (MDX) que retorna um conjunto.
Numeric_Expression
Uma expressão numérica válida que normalmente é uma expressão de Expressões Multidimensionais (MDX) de coordenadas de célula que retornam um número.
String_Expression
Uma expressão de cadeia válida que normalmente é uma expressão válida de Expressões Multidimensionais (MDX) de coordenadas de célula que retornam um número expresso como uma cadeia.
Remarks
A função de ordem pode ser hierárquica (conforme especificado usando a bandeira ASC ou DESC ) ou não hierárquica (conforme especificado usando a bandeira BASC ou BDESC ; o B significa "quebra hierarquia"). Se ASC ou DESC for especificado, a função de Ordem primeiro organiza os membros de acordo com sua posição na hierarquia e então ordena cada nível. Se BASC ou BDESC for especificado, a função de Ordem organiza os membros no conjunto sem considerar a hierarquia. Em nenhuma flag é especificada, ASC é o padrão.
Se a função de Ordem for usada com um conjunto onde duas ou mais hierarquias são cruzadas, e a flag DESC for usada, apenas os membros da última hierarquia do conjunto são ordenados. Isso é uma mudança em relação ao Analysis Services 2000, onde todas as hierarquias do conjunto eram ordenadas.
Exemplos
O exemplo a seguir retorna, do cubo Adventure Works , o número de pedidos de revendedor para todos os Trimestrais do Calendário da hierarquia do Calendário na dimensão Data. A função de ordem reordena o conjunto para o eixo ROWS. A função de Ordem ordena o conjunto em [Reseller Order Count] ordem hierárquica decrescente conforme determinado pela [Calendar] hierarquia.
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order(
[Date].[Calendar].[Calendar Quarter].MEMBERS,
Measures.[Reseller Order Count],
DESC
) ON ROWS
FROM [Adventure Works]
Note como, neste exemplo, quando a bandeira do DESC é alterada para BDESC, a hierarquia é quebrada e a lista de Trimestres do Calendário é retornada sem considerar a hierarquia:
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order (
[Date].[Calendar].[Calendar Quarter].MEMBERS,
Measures.[Reseller Order Count],
BDESC
) ON ROWS
FROM [Adventure Works]
O exemplo a seguir retorna a Medida de Vendas de Revendedor para as cinco subcategorias mais vendidas de produtos, independentemente da hierarquia, com base no Lucro Bruto do Revendedor. A função Subconjunto é usada para retornar apenas as primeiras 5 tuplas do conjunto após o resultado ser ordenado usando a função Ordem .
SELECT Subset
(
Order
(
[Product].[Product Categories].[SubCategory].members,
[Measures].[Reseller Gross Profit],
BDESC
), 0, 5
) ON 0
FROM [Adventure Works]
O exemplo a seguir usa a função Rank para ranquear os membros da hierarquia da cidade, com base na medida de Valor de Vendas de Revendedor, e então os exibe em ordem ranqueada. Ao usar a função Ordem para primeiro ordenar o conjunto de membros da hierarquia da cidade, a ordenação é feita apenas uma vez e seguida por uma varredura linear antes de ser apresentada em ordem ordenada.
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]
O exemplo a seguir retorna o número de produtos no conjunto que são únicos, usando a função Order para ordenar as tuplas não vazias antes de utilizar a função Filtro . A função CurrentOrdinal é usada para comparar e eliminar empates.
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]
Para entender como a flag DESC funciona com conjuntos de tuplas, considere primeiro os resultados da seguinte consulta:
SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]
No eixo das Linhas, você pode ver que os Grupos de Territórios de Vendas foram ordenados em ordem decrescente por Valor de Imposto, da seguinte forma: América do Norte, Europa, Pacífico, NA. Agora veja o que acontece se cruzarmos o conjunto dos Grupos de Território de Vendas com o conjunto de Subcategorias de Produto e aplicarmos a função de Ordem da mesma forma, da seguinte forma:
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]
Embora o conjunto de Subcategorias de Produtos tenha sido ordenado em ordem decrescente e hierárquica, os Grupos de Território de Vendas agora não estão organizados e aparecem na ordem em que aparecem na hierarquia: Europa, América do Norte, América do Norte e Pacífico. Isso ocorre porque apenas a última hierarquia no conjunto de tuplas, Subcategorias Produto, é ordenada. Para reproduzir o comportamento do Analysis Services 2000, use uma série de funções Generate aninhadas para ordenar cada conjunto antes que ele seja crossjoined, por exemplo:
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]