Partilhar 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 linguagem 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 um sinalizador hierárquico (conforme especificado com o sinalizador ASC ou DESC) ou não hierárquico (conforme especificado com o sinalizador BASC ou BDESC ; B significa “quebra de hierarquia”). 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á os membros no conjunto, independentemente da hierarquia. Se nenhum sinalizador for especificado, ASC será o padrão.

Se a função Order for usada com um conjunto onde duas ou mais hierarquias são interjuntadas, e o sinalizador DESC é usado, somente os membros da última hierarquia no conjunto serã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 revenda de todos os Trimestres do Calendário da hierarquia Calendário da dimensão Data.A função Order reordena o conjunto para o eixo Linhas. A função Order ordena o conjunto por [Reseller Order Count] na ordem hierárquica descendente conforme determinado pela hierarquia [Calendar].

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 do Calendário é retornada sem consideração para 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 somente as 5 primeiras tuplas no conjunto, após o resultado ser ordenado com 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 das Vendas do Revendedor e, em seguida, os exibe em ordem de classificação. Usando a função Order para organizar pela primeira vez o conjunto de membros da hierarquia Cidade, a classificação é feita somente uma vez, seguida de uma verificação linear, antes de ser apresentada na ordem de classificação.

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 solicitar as tuplas não vazias antes de utilizar a função Filter. A função CurrentOrdinal é usada para comparar e eliminar associações.

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 consulta a seguir:

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 nós fizermos a junção cruzada do conjunto de Sales Territory Groups com o conjunto de Product Subcategories e aplicarmos a função Order da mesma maneira, como segue:

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 de Analysis Services 2000, use uma série de funções aninhadas Generate para classificar cada conjunto antes de interjuntar, 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

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