Order (MDX)

Organiza os membros de um conjunto especificado, preservando ou quebrando opcionalmente a hierarquia.

Syntax

  
Numeric expression syntax  
Order(Set_Expression, Numeric_Expression   
[ , { ASC | DESC | BASC | BDESC } ] )  
  
String expression syntax  
Order(Set_Expression, String_Expression   
[ , { ASC | DESC | BASC | BDESC } ] )  
  

Arguments

Set_Expression
Uma expressão válida de Expressões Multidimensionais (MDX) que devolve um conjunto.

Numeric_Expression
Uma expressão numérica válida que é tipicamente 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 é tipicamente uma expressão válida de Expressões Multidimensionais (MDX) de coordenadas de célula que retornam um número expresso como uma cadeia.

Observações

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 for especificado ASC ou DESC , a função de Ordem primeiro organiza os membros de acordo com a sua posição na hierarquia e depois 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 nenhum flag é especificado, ASC é o padrão.

Se a função de Ordem for usada com um conjunto onde duas ou mais hierarquias são cruzadas, e for usada a bandeira DESC , apenas os membros da última hierarquia do conjunto são ordenados. Isto é uma alteração em relação ao Analysis Services 2000, onde todas as hierarquias do conjunto eram ordenadas.

Examples

O exemplo seguinte devolve, do cubo Adventure Works , o número de encomendas de revendedor para todos os Trimestres do Calendário da hierarquia do Calendário na dimensão de 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 é devolvida sem qualquer consideração pela 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 seguinte devolve a Medida de Vendas por Revendedor para as cinco subcategorias de produtos mais vendidas, independentemente da hierarquia, com base no Lucro Bruto do Revendedor. A função de subconjunto é usada para devolver apenas as primeiras 5 tuplas do conjunto após o resultado ser ordenado usando a função de Ordem .

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

O exemplo seguinte utiliza a função de Classificação para classificar os membros da hierarquia da Cidade, com base na medida de Valor de Vendas do Revendedor, e depois apresenta-os por ordem de orden. Ao usar a função de Ordem para primeiro ordenar o conjunto de membros da hierarquia da Cidade, a ordenação é feita apenas uma vez e seguida de uma varredura linear antes de ser apresentada por 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 seguinte devolve o número de produtos no conjunto que são únicos, usando a função Ordem 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 compreender como a bandeira 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, pode ver que os Grupos de Territórios de Vendas foram ordenados por ordem decrescente pelo Valor Tributário, 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 das 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 Produto tenha sido ordenado por ordem decrescente e hierárquica, os Grupos de Território de Vendas agora não estão ordenados e aparecem na ordem em que aparecem na hierarquia: Europa, NA, América do Norte e Pacífico. Isto deve-se ao facto de apenas a última hierarquia do conjunto de tuplas, Subcategorias Produto, estar ordenada. Para reproduzir o comportamento do Analysis Services 2000, use uma série de funções Generate aninhadas para ordenar cada conjunto antes de ser 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]