Condividi tramite


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 gerarchica (come specificato tramite il flag ASC o DESC) o non gerarchica (come specificato tramite il flag BASC o BDESC; B è l'acronimo di "break hierarchy"). Se si specifica ASC o DESC , la funzione Order dispone prima i membri in base alla posizione nella gerarchia e quindi ordina ogni livello. Se si specifica BASC o BDESC , la funzione Order dispone i membri nel set senza considerare la gerarchia. In nessun flag viene specificato, il Centro sicurezza di Azure è l'impostazione predefinita.

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

Esempi

Nell'esempio seguente viene restituito, dal cubo Adventure Works , il numero di ordini rivenditori per tutti i trimestri del calendario della gerarchia Calendar nella dimensione Date. La funzione Order riordina il set per l'asse ROWS. La funzione Order ordina il set in [Reseller Order Count] ordine gerarchico decrescente come determinato dalla [Calendar] gerarchia.

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 modificato in BDESC, la gerarchia viene interrotta e l'elenco dei trimestri del calendario viene restituito senza considerare la 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. La funzione Subset viene utilizzata per restituire solo le prime 5 tuple nel set dopo l'ordinamento del risultato tramite 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 usata la funzione Rank per classificare i membri della gerarchia City, in base alla misura Reseller Sales Amount e quindi visualizzarli in ordine classificato. Utilizzando la funzione Order per ordinare prima di tutto il set di membri della gerarchia City, l'ordinamento viene eseguito una sola volta e quindi seguito da un'analisi lineare prima di essere presentata in ordine 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 di prodotti nel set univoci, usando la funzione Order per ordinare le tuple non vuote prima di utilizzare la funzione Filter . La funzione CurrentOrdinal viene usata per confrontare ed eliminare i legami.

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 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: America del Nord, Europa, Pacifico, NA. A questo punto, vedere cosa accade se si intercongiunga il set di gruppi territorio di vendita con il set di sottocategorie prodotto e si applica la funzione Order nello stesso modo, 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 Europa, NA, America del Nord 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, usare una serie di funzioni Generate annidate per ordinare ogni set prima che venga intergiunito, ad esempio:

  
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]  

Vedi anche

Guida di riferimento alle funzioni MDX (MDX)