次の方法で共有


CurrentOrdinal (MDX)

繰り返し処理の実行時に、セット内の現在の繰り返しの数を返します。

構文

 Set_Expression.CurrentOrdinal

引数

  • Set_Expression
    セットを返す有効な多次元式 (MDX) 式です。

説明

Filter (MDX) 関数や Generate (MDX) 関数などを使用してセットの繰り返し処理を実行するときに、CurrentOrdinal 関数は繰り返しの数を返します。

次の簡単な例では、CurrentOrdinal と Generate を組み合わせて使用して、セット内の各項目の名前とセット内でのその項目の位置で構成される文字列を返す方法を示します。

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]

実際に CurrentOrdinal が使用されるのは、非常に複雑な計算に限られます。次の例では、Filter 関数を使用する前に Order 関数を使用して空ではない組を順序付けることで、セット内の一意な製品の数を返しています。順序を比較して同位のものを除去するために、CurrentOrdinal 関数が使用されています。

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]