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 (Expresiones multidimensionales) 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 mediante la marca ASC o DESC ) o no jerárquica (según se especifica mediante la marca BASC o BDESC ; el B significa "jerarquía de interrupción"). Si se especifica ASC o DESC , la función Order organiza primero los miembros según su posición en la jerarquía y, a continuación, ordena cada nivel. Si se especifica BASC o BDESC , la función Order organiza los miembros del conjunto sin tener en cuenta la jerarquía. En no se especifica ninguna marca, ASC es el valor predeterminado.
Si la función Order se usa con un conjunto donde se cruzan dos o más jerarquías y se usa 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
En el ejemplo siguiente se devuelve, desde el cubo Adventure Works , el número de pedidos de revendedor para todos los trimestres de calendario de la jerarquía Calendar de la dimensión Date. La función Order reordena el conjunto para el eje ROWS. La función Order ordena el conjunto en [Reseller Order Count]
orden jerárquico descendente según lo 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]
Observe cómo en este ejemplo, cuando se cambia la marca DESC a BDESC, la jerarquía se interrumpe y la lista de trimestres calendarios 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 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 Subconjunto se usa para devolver solo las 5 primeras tuplas del conjunto después de ordenar el resultado 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]
En el ejemplo siguiente se usa la función Rank para clasificar los miembros de la jerarquía City, en función de la medida Reseller Sales Amount y, a continuación, se muestran en orden clasificado. Mediante el uso de la función Order para ordenar primero el conjunto de miembros de la jerarquía city, la ordenación se realiza una sola vez y, a continuación, va seguida de un examen 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]
En el ejemplo siguiente se devuelve el número de productos del conjunto que son únicos, mediante la función Order para ordenar las tuplas no vacías antes de usar la función Filter . La función CurrentOrdinal se usa para comparar y eliminar los 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 comprender cómo funciona la marca DESC con conjuntos de tuplas, considere primero los resultados de la consulta siguiente:
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, Europa, Pacific, NA. Ahora, vea lo que sucede si se cruza el conjunto de grupos de territorio de ventas con el conjunto de subcategorías de producto y se aplica la función Order de la misma manera, como se indica a continuación:
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, use 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]