Order (MDX)

Réorganise les membres d'un jeu, en préservant ou en rompant éventuellement la hiérarchie.

Syntaxe

Numeric expression syntax
Order(Set_Expression, Numeric_Expression 
[ , { ASC | DESC | BASC | BDESC } ] )

String expression syntax
Order(Set_Expression, String_Expression 
[ , { ASC | DESC | BASC | BDESC } ] )

Arguments

  • Set_Expression
    Expression MDX (Multidimensional Expressions) valide qui retourne un jeu.

  • Numeric_Expression
    Expression numérique valide qui correspond généralement à une expression MDX (Multidimensional Expressions) des coordonnées des cellules qui retournent un nombre.

  • String_Expression
    Expression de chaîne valide qui correspond généralement à une expression MDX (Multidimensional Expressions) valide des coordonnées des cellules qui retournent un nombre exprimé sous forme de chaîne.

Notes

La fonction Order peut être hiérarchique (comme spécifié à l'aide de l'indicateur ASC ou DESC) ou non hiérarchique (comme spécifié à l'aide de l'indicateur BASC ou BDESC  ; le B signifier « briser » la hiérarchie). Si ASC ou DESC est spécifié, la fonction Order réorganise d'abord les membres en fonction de leur position dans la hiérarchie, puis elle ordonne chaque niveau. Si BASC ou BDESC est spécifié, la fonction Order réorganise les membres du jeu indépendamment de leur position hiérarchique.. Si aucun indicateur n'est spécifié, la valeur par défaut est ASC.

Exemples

L'exemple ci-dessous retourne, à partir du cube Adventure Works , le nombre de commandes des revendeurs du membre [Sales Territory].[Northwest] et tous les ascendants de ce membre. La fonction Order réorganise le jeu qui inclut le membre [Sales Territory].[Northwest] et ses ascendants pour l'axe ROWS. La fonction Order trie le jeu en partant du membre le plus élevé jusqu'au membre le plus bas, selon un ordre hiérarchisé tel qu'il est déterminé par la hiérarchie [Sales Territory] .

SELECT
    Measures.[Reseller Order Count] ON COLUMNS,
    Order(
        Ascendants(
            [Sales Territory].[Sales Territory].[Northwest]
        ),
        DESC
    ) ON ROWS
FROM
    [Adventure Works]

L'exemple ci-dessous retourne la mesure Reseller Sales pour les cinq premières sous-catégories de vente de produits, quelle que soit la hiérarchie et conformément à la mesure Reseller Gross Profit (marge brute du revendeur). La fonction Subset retourne uniquement les cinq premiers tuples dans le jeu après avoir classé le résultat à l'aide de la fonction Order.

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

L'exemple ci-dessous fait appel à la fonction Rank pour classer par rang les membres de la hiérarchie City en se basant sur la mesure Reseller Sales Amount (volume de vente du revendeur), puis les affiche dans l'ordre de classement. Après le classement préalable du jeu de membres de la hiérarchie City à l'aide de la fonction Order, le tri n'a lieu qu'une seule fois et est suivi d'une analyse linéaire avant la présentation des éléments par ordre de tri.

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]

L'exemple ci-dessous retourne le nombre de produits uniques dans le jeu à l'aide de la fonction Order pour classer les tuples non vides avant d'utiliser la fonction Filter. La fonction CurrentOrdinal est utilisée pour comparer et éliminer les liens.

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]