Share via


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.

Si la fonction Order est utilisée avec un jeu dans lequel deux ou plus de hiérarchies sont des jointures croisées, et l'indicateur DESC est utilisé, seuls les membres de la dernière hiérarchie dans le jeu sont triés. Il s'agit là d'une différence par rapport à Analysis Services 2000 où toutes les hiérarchies du jeu étaient triées.

Exemples

L'exemple suivant retourne, à partir du cube Adventure Works, le nombre de commandes de revendeurs pour tous les trimestres calendaires de la hiérarchie Calendar de la dimension Date. La fonction Order réorganise le jeu pour l'axe ROWS. La fonction Order trie le jeu par [Reseller Order Count], selon un ordre hiérarchique décroissant tel qu'il est déterminé par la hiérarchie [Calendar].

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

[Date].[Calendar].[Calendar Quarter].MEMBERS

,Measures.[Reseller Order Count]

,DESC

) ON ROWS

FROM [Adventure Works]

Notez que dans cet exemple, lorsque l'indicateur DESC est modifié en BDESC, la hiérarchie est interrompue et la liste de trimestres calendaires est retournée sans tenir compte de la hiérarchie :

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

[Date].[Calendar].[Calendar Quarter].MEMBERS

,Measures.[Reseller Order Count]

,BDESC

) 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]

Pour comprendre le fonctionnement des indicateurs DESC avec les jeux de tuples, prenez d'abord en compte les résultats de la requête suivante :

SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]

Sur l'axe des lignes, vous pouvez voir que les groupes du secteur de vente ont été classés par ordre décroissant par Montant des taxes, comme suit : Amérique du Nord, Europe, Pacifique, NA. Maintenant voici ce qui se produit si on effectue une jointure croisée du jeu des groupes du secteur de vente avec le jeu de sous-catégories de produits et si on applique la fonction Order de la même façon, comme suit :

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]

Alors que le jeu de sous-catégories de produits a été trié par ordre décroissant, hiérarchique, les groupes du secteur de vente ne sont plus triés et s'affichent dans l'ordre dans lequel ils apparaissent dans la hiérarchie : Europe, NA, Amérique du Nord et Pacifique. Cela vient du fait que seule la dernière hiérarchie du jeu de tuples, sous-catégories de produits, est triée. Pour reproduire le comportement d'Analysis Services 2000, utilisez une série de fonctions Generate imbriquées pour trier chaque jeu avant sa jointure croisée, par exemple :

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]