Orden (MDX)

Organiza los miembros de un conjunto especificado, preservando o rompiendo opcionalmente 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
Una expresión válida de Expresiones Multidimensionales (MDX) que devuelve un conjunto.

Numeric_Expression
Una expresión numérica válida que normalmente es una expresión de Expresiones Multidimensionales (MDX) de coordenadas de celda que devuelven un número.

String_Expression
Una expresión de cadena válida que normalmente es una expresión válida de coordenadas de celda por Expresiones Multidimensionales (MDX) que devuelven un número expresado como una cadena.

Remarks

La función de Orden puede ser jerárquica (según lo especificado usando la bandera ASC o DESC ) o no jerárquica (según lo especificado usando la bandera BASC o BDESC ; la B significa "romper jerarquía"). Si se especifica ASC o DESC , la función de Orden primero ordena a los miembros según su posición en la jerarquía y luego ordena cada nivel. Si se especifica BASC o BDESC , la función de Orden ordena los miembros en el conjunto sin tener en cuenta la jerarquía. En ningún caso se especifica ninguna bandera, ASC es el valor predeterminado.

Si la función de Orden se usa con un conjunto donde dos o más jerarquías están unidas cruzadamente, y se utiliza la bandera DESC , solo se ordenan los miembros de la última jerarquía del conjunto. Esto supone un cambio respecto a Analysis Services 2000, donde todas las jerarquías del conjunto estaban ordenadas.

Examples

El siguiente ejemplo devuelve, desde el cubo Adventure Works , el número de pedidos de revendedor para todos los trimestres del calendario de la jerarquía del calendario en la dimensión de fecha. La función de orden reordena el conjunto para el eje ROWS. La función de Orden ordena el conjunto según [Reseller Order Count] un orden jerárquico descendente determinado por la [Calendar] jerarquía.

SELECT
  Measures.[Reseller Order Count] ON COLUMNS,
  Order(
    [Date].[Calendar].[Calendar Quarter].MEMBERS,
    Measures.[Reseller Order Count],
    DESC
  ) ON ROWS
FROM [Adventure Works]

Fíjate cómo, en este ejemplo, cuando la bandera DESC cambia a BDESC, la jerarquía se rompe y la lista de trimestres del calendario se devuelve sin tener en cuenta 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 siguiente ejemplo devuelve la Medida de Ventas de Revendedores para las cinco subcategorías de productos más vendidas, independientemente de la jerarquía, basada en el Beneficio Bruto del Revendedor. La función subconjunto se utiliza para devolver solo las primeras 5 tuplas del conjunto después de ordenar el resultado usando la función de orden .

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

El siguiente ejemplo utiliza la función Rango para clasificar a los miembros de la jerarquía de la ciudad, basándose en la medida de Cantidad de Ventas de Revendedores, y luego los muestra en orden ordenado. Al usar la función de Orden para ordenar primero el conjunto de miembros de la jerarquía de la Ciudad, la ordenación se realiza solo una vez y luego se realiza un escaneo lineal antes de presentarse en orden ordenado.

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 siguiente ejemplo devuelve el número de productos en el conjunto que son únicos, usando la función de Orden para ordenar las tuplas no vacías antes de utilizar la función de filtro . La función CurrentOrdinal se utiliza para comparar y 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 cómo funciona la bandera DESC con conjuntos de tuplas, primero consideremos 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 Filas puedes ver que los Grupos de Territorios de Venta se han ordenado en orden descendente por importe del impuesto, de la siguiente manera: Norteamérica, Europa, Pacífico, NA. Ahora veamos qué ocurre si cruzamos el conjunto de Grupos de Territorio de Ventas con el conjunto de Subcategorías de Producto y aplicamos la función de Orden de la misma manera, de la siguiente manera:

  
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 Subcategorías de Producto se ha ordenado en orden descendente y jerárquico, los Grupos de Territorio de Ventas ahora no están ordenados y aparecen en el orden en que aparecen en la jerarquía: Europa, América del Norte, América del Norte y Pacífico. Esto se debe a que solo se ordena la última jerarquía en el conjunto de tuplas, Subcategorías Producto. Para reproducir el comportamiento de Analysis Services 2000, utiliza una serie de funciones Generate anidadas para ordenar cada conjunto antes de que se cruce, 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]