Share via


Order (MDX)

Organiza los miembros de un conjunto especificado; opcionalmente preservando o rompiendo la jerarquía.

Sintaxis

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
    Expresión MDX válida que devuelve un conjunto.

  • Numeric_Expression
    Expresión numérica válida que suele ser una expresión MDX de las coordenadas de celdas que devuelven un número.

  • String_Expression
    Expresión de cadena válida que suele ser una expresión MDX de las coordenadas de celdas que devuelven un número expresado como una cadena.

Comentarios

La función Order puede ser jerárquica (como se especifica al utilizar las marcas ASC o DESC) o no jerárquica (como se especifica al utilizar las marcas BASC o BDESC; la B indica que se "rompe (Break) la jerarquía"). Si se especifica ASC o DESC, la función Order dispone primero los miembros de acuerdo con su posición en la jerarquía y, a continuación, ordena cada nivel. Si se especifica BASC o BDESC, la función Order dispone los miembros en el conjunto sin tener en cuenta la jerarquía. Si no se especifica ninguna marca, ASC es el valor predeterminado.

Si la función Order se utiliza con un conjunto donde se realiza una combinación cruzada de dos o más jerarquías, y se utiliza la marca DESC, solo se ordenan los miembros de la última jerarquía del conjunto. Este es un cambio con respecto a Analysis Services 2000 donde todas las jerarquías del conjunto estaban ordenadas.

Ejemplos

El siguiente ejemplo devuelve, a partir del cubo de Adventure Works, el número de pedidos de los distribuidores de todos los trimestres naturales de la jerarquía Calendar de la dimensión Date.La función Order vuelve a ordenar el conjunto para el eje ROWS. La función Order ordena el conjunto por [Reseller Order Count] en orden jerárquico descendente según determina la jerarquía [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 cómo en este ejemplo, cuando la marca DESC se cambia a BDESC, se interrumpe la jerarquía y la lista de trimestres naturales se devuelve independientemente de la jerarquía:

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

[Date].[Calendar].[Calendar Quarter].MEMBERS

,Measures.[Reseller Order Count]

,BDESC

) ON ROWS

FROM [Adventure Works]

El ejemplo siguiente devuelve la medida Reseller Sales de las cinco subcategorías de productos más vendidos, independientemente de su jerarquía, de acuerdo con Reseller Gross Profit. La función Subset se utiliza para devolver solo las 5 primeras tuplas del conjunto una vez que el resultado se ordena mediante la función Order.

SELECT Subset

(Order

([Product].[Product Categories].[SubCategory].members

,[Measures].[Reseller Gross Profit]

,BDESC

)

,0

,5

) ON 0

FROM [Adventure Works]

El ejemplo siguiente utiliza la función Rank para colocar en un rango a los miembros de la jerarquía City, de acuerdo con la medida Reseller Sales Amount, y mostrarlos en un orden de rango. Al utilizar la función Order para ordenar por primera vez el conjunto de miembros de la jerarquía City, dichos miembros se ordenan solo una vez y luego se realiza una exploración lineal antes de la presentación 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]

El ejemplo siguiente devuelve el número de productos del conjunto que son únicos mediante la función Order, que se utiliza para ordenar las tuplas que no están vacías antes de utilizar la función Filter. La función CurrentOrdinal se utiliza para comparar y eliminar valores equivalentes.

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 cómo funciona la marca DESC con conjuntos de tuplas, considere primero los resultados de la siguiente consulta:

SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]

En el eje de las filas puede ver que los Sales Territory Groups se han clasificado en orden descendente por Tax Amount, como sigue: North America, Europe, Pacific, NA. Ahora vea lo que ocurre si hacemos una combinación cruzada del conjunto de Sales Territory Groups con el conjunto de Product Subcategories y aplicamos la función Order de la misma manera, como sigue:

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]

Aunque el conjunto de Product Subcategories se ha clasificado ahora en orden jerárquico descendente, los Sales Territory Groups están ordenados y ahora aparecen en el mismo orden que en la jerarquía: Europe, NA, North America y Pacific. Esto se debe a que solo está ordenada la última jerarquía del conjunto de tuplas, Product Subcategories. Para reproducir el comportamiento de Analysis Services 2000, utilice una serie de funciones Generate anidadas para ordenar cada conjunto antes de realizarse la combinación cruzada, por ejemplo:

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]

Vea también

Referencia