CurrentOrdinal (MDX)
Devuelve el número de iteración actual dentro de un conjunto durante la iteración.
Sintaxis
Set_Expression.CurrentOrdinal
Argumentos
- Set_Expression
Expresión MDX válida que devuelve un conjunto.
Comentarios
Al iterar en un conjunto, al igual que con las funciones Filter (MDX) o Generate (MDX), la función CurrentOrdinal devuelve el número de iteración.
Ejemplos
En el siguiente ejemplo simple se muestra el modo de usar CurrentOrdinal junto con Generate para devolver una cadena que contiene el nombre de cada uno de los elementos de un conjunto con su posición en el conjunto:
WITH SET MySet AS [Customer].[Customer Geography].[Country].MEMBERS
MEMBER MEASURES.CURRENTORDINALDEMO AS
GENERATE(MySet, CSTR(MySet.CURRENTORDINAL) + ") " + MySet.CURRENT.ITEM(0).NAME, ", ")
SELECT MEASURES.CURRENTORDINALDEMO ON 0
FROM [Adventure Works]
El uso práctico de CurrentOrdinal se limita a cálculos muy complejos. 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
, NOT((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]