Condividi tramite


Gestione di ambito e contesto (MDX)

Si applica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

In Microsoft SQL Server SQL Server Analysis Services uno script MDX (Multidimensional Expressions) può essere applicato all'intero cubo o a parti specifiche del cubo, in punti specifici all'interno dell'esecuzione dello script. Uno script MDX può utilizzare un approccio a livelli per i calcoli all'interno di un cubo, tramite l'utilizzo di sessioni di calcolo.

Nota

Per altre informazioni sul modo in cui i passaggi di calcolo possono influire sui calcoli, vedere Informazioni sull'ordine pass e risolutore (MDX).

Per controllare le sessioni di calcolo, l'ambito e il contesto in uno script MDX, è possibile usare l'istruzione CALCULATE, la funzione This e l'istruzione SCOPE.

Utilizzo dell'istruzione CALCULATE

L'istruzione CALCULATE popola ogni cella del cubo con dati aggregati. Lo script MDX predefinito, ad esempio, include una sola istruzione CALCULATE all'inizio dello script.

Per altre informazioni sulla sintassi dell'istruzione CALCULATE, vedere Istruzione CALCULATE (MDX).

Nota

Se lo script include un'istruzione SCOPE che contiene un'istruzione CALCULATE, MDX valuterà l'istruzione CALCULATE nel contesto del sottocubo definito dall'istruzione SCOPE, non rispetto all'intero cubo.

Utilizzo della funzione This

La funzione This consente di recuperare il sottocubo corrente in uno script MDX. È possibile usare la funzione This per impostare rapidamente su un'espressione MDX il valore delle celle del sottocubo corrente. La funzione This viene spesso usata insieme all'istruzione SCOPE per modificare il contenuto di uno specifico sottocubo durante una determinata sessione di calcolo.

Nota

Se lo script include un'istruzione SCOPE che contiene una funzione This , MDX valuterà la funzione This nel contesto del sottocubo definito dall'istruzione SCOPE e non rispetto all'intero cubo.

Esempio di funzione This

Nell'esempio di comando dello script MDX seguente viene usata la funzione This per aumentare il valore della misura Amount, nel gruppo di misure Finance del cubo di esempio Adventure Works DW 2012, al 10% superiore per i figli del membro Redmond nella dimensione Customer:

/* This SCOPE statement defines the current subcube */  
SCOPE([Customer].&[Redmond].MEMBERS,   
    [Measures].[Amount], *);  
        /* This expression sets the value of the Amount measure */  
        THIS = [Measures].[Amount] * 1.1;  
END SCOPE;  

Per altre informazioni sulla sintassi della funzione This , vedere This (MDX).

Utilizzo dell'istruzione SCOPE

L'istruzione SCOPE definisce il sottocubo corrente che contiene e specifica l'ambito di altre espressioni e istruzioni MDX dello script MDX. MDX valuta tali espressioni e istruzioni MDX aggiuntive, comprese la funzione This e l'istruzione CALCULATE, nel contesto del sottocubo.

Un'istruzione SCOPE è dinamica, ma non iterativa. Le istruzioni contenute in un'istruzione SCOPE vengono eseguite una volta sola, ma il sottocubo può essere determinato dinamicamente. Si consideri ad esempio un cubo di nome SampleCube. A tale cubo viene applicata l'istruzione SCOPE seguente, per creare un sottocubo che definisce come contesto il risultato della funzione ALLMEMBERS applicata alla dimensione Measures:

SCOPE([Measures].ALLMEMBERS);

THIS = [Measures].ALLMEMBERS.COUNT;

END SCOPE;

Le istruzioni e le espressioni contenute in questa istruzione SCOPE vengono eseguite una volta sola.

Si supponga ora che un utente aziendale esegua la query MDX seguente, che contiene una sola misura di nome ExistingMeasure, sul cubo SampleCube:

WITH MEMBER [Measures].[NewMeasure] AS '1'

SELECT

[Measures].ALLMEMBERS ON COLUMNS,

[Customer].DEFAULTMEMBER ON ROWS

FROM

[SampleCube]

Il set di celle restituito dalla query è simile all'output illustrato nella tabella seguente.

[ExistingMeasure] [NewMeasure]
[Customer].[All] 2 2

Osservando il set di celle restituito, è possibile notare che il valore ExistingMeasure incluso nell'istruzione SCOPE dello script MDX viene aggiornato dinamicamente dopo la definizione della misura NewMeasure.

Un'istruzione SCOPE può essere nidificata in un'altra istruzione SCOPE. Poiché l'istruzione SCOPE non è iterativa, la nidificazione delle istruzioni SCOPE viene utilizzata principalmente per suddividere ulteriormente un sottocubo per scopi particolari.

Esempio di istruzione SCOPE

Nell'esempio di script MDX seguente viene usata un'istruzione SCOPE per impostare il valore della misura Amount, nel gruppo di misure Finance del cubo di esempio Adventure Works DW 2012, al 10% superiore per i figli del membro Redmond nella dimensione Customer. Un'altra istruzione SCOPE modifica tuttavia il sottocubo in modo da includere la misura Amount per i bambini dell'anno di calendario 2002. La misura Amount viene infine aggregata solo per tale sottocubo, mentre i valori aggregati per la misura Amount relativa agli altri anni di calendario restano invariati.

/* Calculate the entire cube first. */  
CALCULATE;  
/* This SCOPE statement defines the current subcube */  
SCOPE([Customer].&[Redmond].MEMBERS,   
    [Measures].[Amount], *);  
        /* This expression sets the value of the Amount measure */  
        THIS = [Measures].[Amount] * 1.1;  
END SCOPE;  

Per altre informazioni sulla sintassi dell'istruzione SCOPE, vedere Istruzione SCOPE (MDX).

Vedere anche

Guida di riferimento al linguaggio MDX
Script MDX di base (MDX)
Nozioni fondamentali sulle query MDX (Analysis Services)