Order (MDX)

Organizza i membri di un set specificato, facoltativamente rispettando o violando 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.

Se la funzione Order viene utilizzata con un set in cui sono presenti due o più gerarchie a cui è stato applicato il cross join e se viene utilizzato il flag DESC, vengono ordinati solo i membri dell'ultima gerarchia del set. Questa situazione rappresenta una modifica rispetto ad Analysis Services 2000 in cui tutte le gerarchie del set sono ordinate.

Esempi

L'esempio seguente restituisce, dal cubo Adventure Works, il numero di ordini dei rivenditori per tutti gli elementi Calendar Quarters dalla gerarchia Calendar nella dimensione Date.La funzione Order riordina il set per l'asse ROWS. La funzione Order dispone il set in base al valore [Reseller Order Count] in ordine gerarchico discendente come stabilito dalla gerarchia [Calendar].

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

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

,Measures.[Reseller Order Count]

,DESC

) ON ROWS

FROM [Adventure Works]

Si noti che in questo esempio, quando il flag DESC viene impostato su BDESC, la gerarchia viene interrotta e l'elenco di elementi Calendar Quarters viene restituito indipendentemente dalla gerarchia:

SELECT

Measures.[Reseller Order Count] ON COLUMNS,

Order(

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

,Measures.[Reseller Order Count]

,BDESC

) 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 del set 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 un'analisi 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]

Per comprendere il funzionamento del flag DESC con i set di tuple, considerare innanzitutto i risultati della query seguente:

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

Sull'asse delle righe è possibile vedere che i Sales Territory Groups sono stati ordinati in ordine decrescente per Quantità della tassa nel modo seguente: North America, Europe, Pacific, NA. Osservare le modifiche se si esegue il cross join del set di Sales Territory Groups con il set di Product Subcategories e si applica la funzione Order in modo analogo, come indicato di seguito:

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]

Mentre il set Product Subcategories è stato ordinato in modo gerarchico decrescente, gli elementi Sales Territory Groups attualmente non sono ordinati e vengono visualizzati nello stesso ordine in cui sono presenti nella gerarchia, ovvero Europe, NA, North America e Pacific. Questa situazione si verifica perché solo l'ultima gerarchia del set di tuple, ovvero Product Subcategories, è ordinata. Per riprodurre il comportamento di Analysis Services 2000, utilizzare una serie di funzioni Generate nidificate per ordinare ogni set prima che venga applicato il cross join, come indicato di seguito:

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]

Vedere anche

Riferimento

Guida di riferimento alle funzioni MDX (MDX)