Order (MDX)

Organizza i membri del set specificato e, facoltativamente, rispetta o meno la gerarchia.

Sintassi

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

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

Argomenti

  • Set_Expression
    Espressione MDX (Multidimensional Expression) valida che restituisce un set.

  • Numeric_Expression
    Espressione numerica valida che in genere è un'espressione MDX (Multidimensional Expression) di coordinate di celle che restituisce un numero.

  • String_Expression
    Espressione stringa valida che in genere è un'espressione MDX (Multidimensional Expression) di coordinate di celle che restituisce un numero espresso come stringa.

Osservazioni

La funzione Order può essere di tipo gerarchico, come specificato dal flag ASC o DESC, oppure non gerarchico, come specificato dal flag BASC o BDESC . Il flag B significa "non rispettare la gerarchia"). Se si specifica il flag ASC o DESC, la funzione Order ordina prima i membri in base alla rispettiva posizione nella gerarchia e quindi ogni singolo livello. Se si specifica il flag BASC o BDESC, la funzione Order dispone i membri del set indipendentemente dalla gerarchia. Se non si specifica alcun flag, per impostazione predefinita viene utilizzato ASC.

Esempi

Nell'esempio seguente vengono restituiti il numero di ordini dei rivenditori per il membro [Sales Territory].[Northwest] e tutti i predecessori di tale membro dal cubo Adventure Works. La funzione Order riordina il set che include il membro [Sales Territory].[Northwest] e i relativi predecessori per l'asse ROWS. La funzione Order dispone il set di membri in ordine gerarchico decrescente, in base alla gerarchia [Sales Territory].

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

Nell'esempio seguente viene restituita la misura Reseller Sales per le cinque sottocategorie di prodotti più vendute, indipendentemente dalla gerarchia, in base a Reseller Gross Profit. È possibile utilizzare la funzione Subset per restituire solo le prime cinque tuple dopo l'ordinamento del risultato mediante la funzione Order.

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

Nell'esempio seguente viene utilizzata la funzione Rank per assegnare un rango ai membri della gerarchia City in base alla misura Reseller Sales Amount e quindi vengono visualizzati tali membri in ordine di rango. Utilizzando la funzione Order per ordinare il set dei membri della gerarchia City, l'ordinamento viene eseguito una sola volta ed è seguito da una scansione lineare prima di essere visualizzato in modo ordinato.

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]

Nell'esempio seguente viene restituito il numero dei prodotti unici contenuti nel set, utilizzando la funzione Order per ordinare le tuple non vuote prima di applicare la funzione Filter. La funzione CurrentOrdinal consente di confrontare ed eliminare i valori equivalenti.

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]