Definizione di assegnazioni con ambito utilizzando i comandi script
In Analysis Services gli script MDX (Multidimensional Expressions) possono essere applicati all'intero cubo o a determinate sezioni del cubo, in punti specifici dell'esecuzione dello script. Sono già state descritte le procedure relative al comando script predefinito, l'istruzione CALCULATE, che popola le celle del cubo con dati aggregati in base all'ambito predefinito.
L'ambito predefinito è costituito dall'intero cubo, tuttavia, come indicato nell'argomento precedente, è possibile utilizzare l'istruzione SCOPE per definire un ambito più limitato, noto come sottocubo, a cui applicare uno script MDX. L'istruzione SCOPE definisce l'ambito di tutte le espressioni MDX e di tutte le istruzioni successive all'interno dello script di calcolo finché l'ambito non termina o non viene ridefinito. In seguito viene utilizzata l'istruzione THIS per applicare un'espressione MDX all'ambito corrente. L'istruzione BACK_COLOR può essere utilizzata per specificare un colore di sfondo per le celle dell'ambito corrente, allo scopo di facilitare il debug.
Nelle procedure descritte in questo argomento vengono utilizzate le istruzioni SCOPE e THIS per definire quote vendite per ogni trimestre fiscale dell'anno fiscale 2005. In seguito vengono allocate quote vendite al livello mese per tutti gli anni fiscali del cubo. Verrà inoltre descritto l'utilizzo dei punti di interruzione per il debug dello script di calcolo.
Controllo delle assegnazioni delle quote vendite in base alla data e ai dipendenti
Per controllare le assegnazioni delle quote vendite in base alla data e ai dipendenti
Aprire Progettazione cubi per il cubo di Analysis Services Tutorial e quindi fare clic sulla scheda Esplorazione.
Eliminare tutte le gerarchie e le misure dal riquadro Dati e tutti i membri della dimensione dal riquadro Filtro.
Aggiungere la misura Sales Amount Quota del gruppo di misure Sales Quotas all'area dati del riquadro Dati.
Aggiungere la gerarchia definita dall'utente Fiscal Date dalla dimensione Date all'area colonna.
Aggiungere la gerarchia dell'attributo Employee Name dalla dimensione Employee all'area riga.
Si noti che non è stato definito alcun valore di quote vendite per l'anno fiscale 2005.
Nell'area colonna fare clic sul pulsante freccia accanto a Fiscal Year, deselezionare le caselle di controllo accanto a FY 2002 e FY 2003, quindi fare clic su OK.
Nell'area colonna espandere FY2004, H2 FY 2004, quindi Q4 FY 2004.
Si noti che le quote vendite per ogni mese fiscale nel trimestre fiscale rappresentano lo stesso importo delle quote vendite per il trimestre fiscale. Il motivo è che il livello di dettaglio della dimensione temporale nel gruppo di misure Sales Quota è il livello trimestre, come spiegato nella Lezione 5.
Nella figura seguente viene illustrata la quota vendite per ogni dipendente che dispone di una quota vendite per ogni mese del quarto trimestre dell'anno fiscale 2004.
Definizione dell'ambito per il calcolo delle quote vendite per l'anno fiscale 2005
In questa procedura viene controllato l'ambito corrente, viene modificato l'ambito e quindi viene definito un calcolo che determina i valori delle quote vendite per l'anno fiscale 2005 in base ai valori per l'anno fiscale 2004.
Per definire l'ambito per il calcolo delle quote vendite per l'anno fiscale 2005
Selezionare la scheda Calcoli e quindi selezionare Visualizzazione Form nella barra degli strumenti.
Nel riquadro Libreria script selezionare Large Resellers, quindi fare clic sul pulsante Nuovo comando script sulla barra degli strumenti della scheda Calcoli.
Si noti che viene visualizzato uno script vuoto nel riquadro Espressioni di calcolo e che tale comando script viene visualizzato con un titolo vuoto nel riquadro Libreria script.
Digitare l'espressione seguente nel riquadro Espressioni di calcolo:
/* Changing Scope to All or Default Member */ SCOPE (ROOT())
Questa istruzione SCOPE cambia l'ambito del cubo nel membro Totale, o predefinito, per tutti gli attributi del cubo.
Fare clic su Nuovo comando script nella barra degli strumenti della scheda Calcoli e quindi digitare l'istruzione seguente nel riquadro Espressioni di calcolo:
/* Defining the cube scope for the sales amount quotas for FY2005 */ SCOPE ()
Si noti che viene visualizzata una riga rossa ondulata sotto la parentesi finale, per indicare che è stato definito un set di membri all'interno delle parentesi dell'istruzione SCOPE. Aggiungere quindi la misura Sales Amount Quota all'istruzione SCOPE per includere tale misura all'ambito.
Nella scheda Metadati nel riquadro Strumenti di calcolo espandere Measures, espandere Sales Quotas e quindi trascinare la misura Sales Amount Quota nelle parentesi dell'istruzione SCOPE nel riquadro Espressioni di calcolo.
Si noti che la riga rossa ondulata scompare. Il passaggio successivo consiste nell'aggiunta del membro della dimensione FY 2005 all'istruzione SCOPE per aggiungere questo membro della dimensione temporale all'ambito corrente.
Nella scheda Metadati del riquadro Strumenti di calcolo espandere la dimensione Date, quindi Fiscal, Fiscal Date, Fiscal Year e infine trascinare il membro FY 2005 nell'istruzione SCOPE del riquadro Espressioni di calcolo dopo il membro [Sales Amount Quota] del set che si sta definendo.
Si noti la riga rossa ondulata sotto la parte [Date] di questo nuovo membro del set, che informa dell'esistenza di un errore di sintassi subito prima il membro della dimensione, perché è necessario inserire una virgola tra ogni membro del set all'interno dell'istruzione SCOPE.
Aggiungere la virgola necessaria prima della parte [Date] del membro FY 2005 della dimensione Date.
Si noti che la riga rossa ondulata iniziale scompare. Il passaggio successivo consiste nell'aggiunta dei membri della gerarchia definita dall'utente Employees della dimensione Employee all'istruzione SCOPE per aggiungere tali membri all'ambito corrente.
Nella scheda Metadati del riquadro Strumenti di calcolo espandere la dimensione Employee, quindi trascinare la gerarchia definita dall'utente Employees nell'istruzione SCOPE del riquadro Espressioni di calcolo immediatamente dopo il membro [Date].[Fiscal Date].[Fiscal Year].&[2005] del set che si sta definendo.
Si noti la riga rossa ondulata sotto la sezione [Employee] del nuovo membro di questo set, che indica che è necessario inserire una virgola tra ogni membro del set all'interno dell'istruzione SCOPE.
Aggiungere la virgola necessaria prima della sezione [Employee] del nuovo membro.
Si noti che la riga rossa ondulata è scomparsa.
Alla fine del membro [Employee].[Employees] di questo set all'interno dell'istruzione SCOPE, aggiungere la clausola seguente per completare la definizione del terzo membro del set:
.Members
Questa clausola specifica che tutti i membri della gerarchia Employee della dimensione Employee devono essere inclusi nell'ambito del cubo corrente.
Verificare che l'istruzione SCOPE completata corrisponda allo script seguente:
SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Date].[Fiscal Year].&[2005], [Employee].[Employees].Members)
A questo punto è stata completata la definizione dell'ambito del sottocubo al quale si applicherà un'espressione MDX per calcolare le quote vendite per l'anno fiscale 2005.
Nella barra degli strumenti della scheda Calcoli fare clic su Visualizzazione Script e quindi controllare i comandi script appena aggiunti.
Si noti che ogni comando script viene visualizzato allo stesso modo in cui è stato digitato nel riquadro Espressioni di calcolo, ma con l'aggiunta di un punto e virgola finale. Si noti inoltre che in Analysis Services è stato inserito un commento prima di ogni comando script per facilitare la comprensione di ogni singolo comando.
Definizione e test del calcolo delle quote vendite per l'anno fiscale 2005
In questa attività si aggiungerà un nuovo comando script allo script di calcolo che calcola le quote vendite per l'anno fiscale 2005 per tutti i membri della dimensione Employee. Il comando script verrà tuttavia aggiunto direttamente alla visualizzazione Script invece che alla visualizzazione Form. Nella visualizzazione Script è necessario accertarsi di aggiungere un punto e virgola tra ogni comando script.
Per definire ed eseguire il test del calcolo delle quote vendite per l'anno fiscale 2005
Nella visualizzazione Script digitare le istruzioni seguenti su una nuova riga alla fine dello script di calcolo:
/* Applying a calculation to the subcube */ THIS = [Date].[Fiscal Date].[Fiscal Year].&[2004] * 1.25;
L'istruzione THIS assegna un nuovo valore alla misura Sales Amount Quota all'intersezione tra il membro Employee e il membro FY 2005 del sottocubo. Il nuovo valore è basato sul valore esistente per l'intersezione tra il membro Employee e la misura Sales Amount Quota in Fiscal Year 2004 moltiplicato per 1,25.
Nel riquadro Espressioni di calcolo fare clic sul margine a sinistra dell'istruzione THIS per impostare un punto di interruzione.
Si noti che viene visualizzato un punto rosso su tale margine e che l'istruzione viene evidenziata in rosso. Quando si esegue questo progetto in modalità debug, le modifiche apportate al progetto vengono distribuite all'istanza di Analysis Services, il cubo viene elaborato e lo script di calcolo viene eseguito fino al punto di interruzione. A questo punto è possibile analizzare gli script rimanenti, uno per uno. Se non si imposta un punto di interruzione e si esegue il progetto in modalità di debug, lo script di calcolo si interromperà alla prima istruzione script, ovvero l'istruzione CALCULATE.
Scegliere Avvia dal menu Debug. In alternativa, è possibile premere F5 sulla tastiera.
Il progetto viene distribuito ed elaborato e lo script di calcolo viene eseguito fino al punto di interruzione.
Nascondere tutte le finestre ancorate per disporre di un'area di visualizzazione maggiore per il riquadro Tabella pivot visualizzato nella parte inferiore della scheda Calcoli.
Il riquadro Tabella pivot faciliterà l'esecuzione del debug.
Nel riquadro Tabella pivot aggiungere la misura Sales Amount Quota all'area dati, aggiungere la gerarchia definita dall'utente Fiscal Date all'area colonna, quindi aggiungere la gerarchia di attributi Employee Name della dimensione Employee all'area riga. Scorrere fino alla fine della tabella pivot e controllare i dipendenti cui sono assegnate quote vendite.
Si noti che il membro FY 2005 del livello Fiscal Year per la misura Sales Amount Quota per ogni dipendente non contiene alcun valore nell'area dati relativa alla misura Sales Amount Quota. Per impostazione predefinita, le celle vuote vengono visualizzate nel riquadro Tabella pivot in modalità debug.
Premere F10 per eseguire l'istruzione THIS e calcolare le quote vendite per l'anno fiscale 2005.
Si noti che le celle nel riquadro Tabella pivot all'intersezione tra la misura Sales Amount Quota, il membro della dimensione FY 2005 e il membro Employee Name vengono ora calcolate. Si noti inoltre che le celle interessate dall'istruzione THIS sono evidenziate in giallo. È presente un'icona sulla barra degli strumenti che consente di attivare o disattivare l'evidenziazione delle celle modificate. Per impostazione predefinita le celle sono evidenziate.
Nel riquadro Tabella pivot deselezionare le caselle di controllo per rimuovere FY 2002, FY 2003 e FY 2004 dall'area colonna.
Fare clic con il pulsante destro del mouse in un punto qualsiasi nell'area dati e quindi fare clic su Mostra celle vuote per rimuovere il segno di spunta accanto all'opzione e nascondere tutte le celle vuote. Questa opzione è inoltre disponibile sulla barra degli strumenti della scheda Calcoli. Ciò facilita la visualizzazione di tutti i dipendenti con valori di quote vendite.
Nel riquadro Tabella pivot provare a espandere FY 2005 nell'area colonna.
Si noti che non è possibile espandere FY 2005 poiché i valori relativi al membro H1 FY 2005 all'intersezione della misura Sales Amount Quota e la gerarchia dell'attributo Employee Name non sono stati calcolati poiché esterni all'ambito corrente.
Per visualizzare le celle vuote per i valori dei membri H1 FY 2005, fare clic in un punto qualsiasi del riquadro Tabella pivot e quindi fare clic su Mostra celle vuote sulla barra degli strumenti della scheda Calcoli per visualizzare tutte le celle vuote.
Scegliere Termina debug dal menu Debug oppure premere MAIUSC-F5.
Rimuovere il punto di interruzione dallo script di calcolo facendo clic sul punto rosso nel margine sinistro.
Assegnazione di quote vendite ai semestri e ai trimestri dell'anno fiscale 2005
In questa attività si modificherà l'ambito per includere i membri del semestre fiscale dell'anno fiscale 2005 al posto del membro dell'anno fiscale 2005, quindi si allocherà metà del valore delle quote vendite per l'anno fiscale 2005 a ogni semestre dell'anno fiscale 2005. In seguito si modificherà l'ambito in modo da includere i membri del trimestre fiscale dell'anno fiscale 2005 al posto del membro dell'anno fiscale 2005, quindi si allocherà un quarto del valore delle quote vendite per l'anno fiscale 2005 a ogni trimestre dell'anno fiscale 2005. Per completare l'attività, si eseguirà un test di queste allocazioni.
Per assegnare quote vendite ai semestri e ai trimestri dell'anno fiscale 2005
Nella visualizzazione Script del riquadro Espressioni di calcolo digitare l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Semesters */ SCOPE ( [Date].[Fiscal Semester].[Fiscal Semester].Members );
Questa istruzione SCOPE è un'istruzione SCOPE nidificata poiché nessuna istruzione END SCOPE è presente tra questa istruzione SCOPE e l'istruzione SCOPE precedente. Quando un'istruzione SCOPE è nidificata, eredita l'ambito padre per quegli attributi per il quale non è stato ridefinito l'ambito. L'istruzione SCOPE precedente non modifica direttamente la misura Sales Amount Quota, la gerarchia definita dall'utente Employees o la gerarchia definita dall'utente Fiscal Date. L'istruzione aggiunge invece ogni membro della gerarchia dell'attributo Fiscal Semester alla definizione del sottocubo mediante la funzione Members. Per ulteriori informazioni, vedere Members (Set) (MDX). In seguito all'istruzione SCOPE nidificata risulta che ora lo spazio del cubo include tutti i membri che si trovano all'intersezione tra il membro Employee e la misura Sales Amount Quota in qualsiasi semestre fiscale dell'anno fiscale 2005. Si noti che al momento è presente un solo semestre fiscale nell'anno fiscale 2005 nel cubo.
Nel riquadro Espressioni di calcolo digitare l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;
Questa istruzione assegna il valore calcolato per il trimestre fiscale a ogni semestre fiscale nello spazio definito del cubo. La funzione CurrentMember.Parent viene utilizzata per allocare a ogni membro metà del valore del relativo padre. Per ulteriori informazioni, vedere CurrentMember (MDX) e Parent (MDX).
Nel riquadro Espressioni di calcolo digitare l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
/* Allocation of Sales Amount Quota to the 2005 Fiscal Quarters */ SCOPE ( [Date].[Fiscal Quarter].[Fiscal Quarter].Members );
Questa istruzione SCOPE è un'istruzione SCOPE nidificata poiché nessuna istruzione END SCOPE è presente tra questa istruzione SCOPE e l'istruzione SCOPE precedente. L'istruzione SCOPE precedente non modifica direttamente la misura Sales Amount Quota, la gerarchia definita dall'utente Employees o la gerarchia definita dall'utente Fiscal Date. L'istruzione aggiunge invece ogni membro della gerarchia dell'attributo Fiscal Quarter alla definizione del sottocubo mediante la funzione Members. Di conseguenza, lo spazio del cubo include ora tutti i membri che si trovano all'intersezione tra il membro Employee e la misura Sales Amount Quota in qualsiasi trimestre fiscale dell'anno fiscale 2005. Si noti che al momento è presente un solo trimestre fiscale dell'anno fiscale 2005 nel cubo.
Nel riquadro Espressioni di calcolo digitare l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 2;
Questa istruzione assegna il valore calcolato per il trimestre fiscale a ogni trimestre fiscale nello spazio definito del cubo. La funzione CurrentMember.Parent viene utilizzata per assegnare a ogni membro metà del valore del relativo padre.
Nel riquadro Espressioni di calcolo fare clic sul margine accanto all'ultima istruzione SCOPE per impostare un punto di interruzione e quindi premere F5.
Lo script di calcolo viene eseguito fino al punto di interruzione.
Fare clic in un punto qualsiasi dell'area dati nel riquadro Tabella pivot e quindi fare clic su Mostra celle vuote sulla barra degli strumenti della scheda Calcoli per nascondere le celle vuote.
Si noti che il riquadro dei dati viene popolato con le stesse misure e gerarchie utilizzate nell'ultimo passaggio del debugger e che il valore del membro H1 FY 2005 è stato calcolato nel modo illustrato nella figura più avanti in questa sezione, ovvero metà del valore del relativo padre.
Si noti infine che il valore di ogni membro FY 2005 viene ricalcolato in base all'aggregazione dei suoi membri, che in questo caso è il primo semestre fiscale dell'anno fiscale. Il calcolo del membro Fiscal Semester 2005 ha effetto sul valore del membro Fiscal Year 2005 perché ogni script viene eseguito come sessione separata. Per bloccare un valore esistente in modo che non venga interessato dalle istruzioni successive dello script di calcolo, utilizzare l'istruzione FREEZE. Per ulteriori informazioni, vedere Istruzione FREEZE (MDX).
Nell'area colonna, espandere H1 FY 2005.
Si noti che il valore per il membro Q1 FY 2005 non è ancora stato calcolato.
Fare clic in un punto qualsiasi dell'area dati nel riquadro Tabella pivot e quindi fare clic su Mostra celle vuote sulla barra degli strumenti della scheda Calcoli.
Nell'area colonna, espandere Q1 FY 2005.
Si noti che non viene assegnato alcun valore ai due mesi del primo trimestre dell'anno fiscale 2005 perché tali membri non sono ancora inclusi nell'ambito del sottocubo corrente, in quanto non sono ancora state eseguite le ultime due istruzioni dello script. La dimensione temporale nel cubo di Analysis Services Tutorial contiene solo i primi due mesi dell'anno fiscale 2005, di conseguenza non è presente alcun membro Q2 FY 2005.
Premere F10 per eseguire l'istruzione SCOPE e quindi premere di nuovo F10 per eseguire l'istruzione finale nello script di calcolo che applica il calcolo nel sottocubo corrente.
Si noti che il valore del membro Q1 FY 2005 viene calcolato e che il valore dei membri H1 FY 2005 e FY2005 viene ricalcolato come aggregazione dei relativi membri figlio, come illustrato nella figura seguente. Si noti inoltre che il valore di ogni mese fiscale dell'anno fiscale 2005, ovvero luglio e agosto 2005, non viene calcolato. Nella procedura successiva si assegneranno valori appropriati a ogni trimestre.
Scegliere Termina debug dal menu Debug oppure premere MAIUSC-F5.
Rimuovere il punto di interruzione dallo script di calcolo.
Assegnazione di quote vendite ai mesi
In questa procedura si modificherà l'ambito in modo da includere il livello mese fiscale in tutti gli anni fiscali, mentre le istruzioni dell'ambito precedente limitavano i calcoli all'anno fiscale 2005. In seguito si assegnerà un terzo del valore del trimestre fiscale per le quote vendite di ogni dipendente a ogni mese fiscale.
Per assegnare quote vendite ai mesi
Nel riquadro Espressioni di calcolo aggiungere l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
/* Allocate Quotas to Months */ SCOPE ( [Date].[Fiscal Date].[Month Name].Members );
Questa istruzione SCOPE è un'altra istruzione con ambito nidificato che modifica lo spazio del cubo al quale si applicherà un'espressione MDX per assegnare quote vendite a ogni mese fiscale in base al valore di ogni trimestre fiscale. Questa istruzione SCOPE è simile all'istruzione nidificata SCOPE precedente, ma si noti che è stato ridefinito l'ambito della gerarchia definita dall'utente Fiscal Date. Ne consegue che i membri dello spazio del cubo includeranno ora tutti i membri del mese fiscale della dimensione Date e non solo i membri del mese fiscale dell'anno fiscale 2005.
[!NOTA]
Si confronti questa modifica all'ambito del cubo con la modifica apportata all'ambito del cubo nella procedura precedente per accertarsi di comprendere la differenza tra le due istruzioni di modifica dell'ambito.
Nel riquadro Espressioni di calcolo aggiungere l'istruzione seguente su una nuova riga alla fine dello script di calcolo:
THIS = [Date].[Fiscal Date].CurrentMember.Parent / 3;
Questa istruzione assegna a ogni membro del mese della gerarchia Fiscal Date un terzo del valore del relativo padre, ovvero il livello trimestre. Questo calcolo si applicherà a tutti i mesi fiscali all'interno del cubo.
Nel riquadro Espressioni di calcolo fare clic sul margine a sinistra dell'ultima istruzione THIS per impostare un punto di interruzione e quindi premere F5.
Esaminare i valori relativi ai mesi di luglio e agosto 2004.
Si noti che attualmente non viene calcolato alcun valore per July 2004 o August 2004.
Fare clic con il pulsante destro del mouse in qualsiasi punto del riquadro Dati e quindi scegliere Mostra celle vuote per visualizzare solo le celle contenenti valori.
Ciò consentirà di vedere più facilmente l'applicazione dell'ultima istruzione nello script di calcolo.
Premere F10 per eseguire l'ultima istruzione.
Si noti che il valore Sales Amount Quota calcolato per ogni dipendente per ogni mese fiscale risulta uguale a un terzo del suo valore padre.
Nell'area colonna eliminare FY 2005 e quindi aggiungere Q4 FY 2004.
Espandere FY 2004, espandere H2 FY 2004 e quindi Q4 FY 2004.
Si noti che il valore di ogni mese fiscale è uguale al valore totale del trimestre fiscale.
Scegliere Termina debug dal menu Debug.
Rimuovere il punto di interruzione dallo script di calcolo.
Nella barra degli strumenti fare clic su Salva tutto.