CurrentOrdinal (MDX)
Retorna o número de iteração atual dentro de um conjunto durante a iteração.
Sintaxe
Set_Expression.CurrentOrdinal
Argumentos
- Set_Expression
Uma expressão MDX (Multidimensional Expressions) válida que retorna um conjunto.
Comentários
Ao fazer a iteração por meio de um conjunto, como ocorre com as funções Filter (MDX) ou Generate (MDX), a função CurrentOrdinal retornará o número da iteração.
Exemplos
O exemplo simples a seguir mostra como CurrentOrdinal pode ser usado com Generate para retornar uma cadeia de caracteres que contém o nome de cada item em um conjunto junto com sua posição no 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]
O uso prático de CurrentOrdinal é limitado a cálculos muito complexos. 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
, 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]