Compartilhar via


Order (MDX)

Organiza membros de um conjunto especificado, preservando opcionalmente 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 MDX válida que retorna um conjunto.

Numeric_expression
Uma expressão numérica válida, geralmente uma linguagem MDX de coordenadas de célula, que retorna um número.

String_expression
Uma expressão de cadeia de caracteres válida, geralmente uma expressão MDX válida de coordenadas de célula, que retorna um número expresso como uma cadeia de caracteres.

Comentários

A função Order pode ser hierárquica (conforme especificado usando o sinalizador ASC ou DESC ) ou não hierárquica (conforme especificado usando o sinalizador BASC ou BDESC ; o B significa "hierarquia de interrupção"). Se ASC ou DESC for especificado, a função Order primeiro organizará os membros de acordo com sua posição na hierarquia e, em seguida, ordenará cada nível. Se BASC ou BDESC for especificado, a função Order organizará membros no conjunto sem considerar a hierarquia. Em nenhum sinalizador especificado, ASC é o padrão.

Se a função Order for usada com um conjunto em que duas ou mais hierarquias são cruzadas e o sinalizador DESC é usado, somente os membros da última hierarquia no conjunto são ordenados. Esta é uma alteração do Analysis Services 2000 onde foram ordenadas todas as hierarquias no conjunto.

Exemplos

O exemplo a seguir retorna, do cubo Adventure Works , o número de pedidos de revendedor para todos os Trimestres de Calendário da hierarquia Calendário na dimensão Data. A função Order reordena o conjunto para o eixo ROWS. A função Order ordena o conjunto por [Reseller Order Count] em 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]

Observe como, neste exemplo, quando o sinalizador DESC é alterado para BDESC, a hierarquia é interrompida e a lista de Trimestres de 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 Valor das Vendas do Revendedor para as cinco subcategorias principais de vendas dos produtos, independentemente da hierarquia, com base no Lucro Bruto do Revendedor. A função Subset é usada para retornar apenas as cinco primeiras tuplas no conjunto depois que o resultado é ordenado usando a função Order .

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 classificar os membros da hierarquia cidade, com base na medida Valor de Vendas do Revendedor e, em seguida, exibe-os em ordem classificada. Usando a função Order para ordenar primeiro o conjunto de membros da hierarquia Cidade, a classificação é feita apenas uma vez e, em seguida, seguida por uma verificação linear antes de ser apresentada em ordem classificada.

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 exclusivos, usando a função Order para ordenar as tuplas não vazias antes de utilizar a função Filter . A função CurrentOrdinal é usada para comparar e eliminar vínculos.

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 o sinalizador DESC funciona com conjuntos de tuplas, primeiro considere 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 de Linhas, você pode consultar que os Sales Territory Groups foram colocados em ordem decrescente por Tax Amount, como segue: North America, Europe, Pacific, NA. Agora veja o que acontece se cruzarmos o conjunto de Grupos do Território de Vendas com o conjunto de Subcategorias de Produto e aplicarmos a função Order da mesma maneira, da seguinte maneira:

  
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]  
  

Enquanto o conjunto de Product Subcategories foi colocado em ordem decrescente e hierárquica, os Sales Territory Groups agora não são classificados e aparecem na ordem que eles aparecem na hierarquia: Europe, NA, North America e Pacific. Isto é porque somente a última hierarquia no conjunto de tuplas, Product Subcategories, é classificado. Para reproduzir o comportamento do Analysis Services 2000, use uma série de funções Generate aninhadas para classificar cada conjunto antes que ele seja cruzado, 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]  

Consulte Também

Referência de função MDX (MDX)