Ricerca di obiettivi mediante il comando LOOP
In questo esempio di script di calcolo Essbase viene illustrato come calcolare il valore di vendita che è necessario raggiungere per ottenere un determinato profitto su un prodotto specifico. In questo caso, lo script di calcolo regola il valore del budget delle vendite per raggiungere un obiettivo di 15.000 profitti per gennaio.
Come mostrato nella gerarchia riportata di seguito, si supponga che nessun membro sia contrassegnato come Calcolo dinamico e che il membro Profitto per oncia (sotto Rapporti nella dimensione Misure) non sia incluso nel calcolo.
Figura 24-4 Misure Dimensione

Si supponga che, prima di eseguire lo script di calcolo per la ricerca di obiettivi, i valori dei dati siano i seguenti:
Product, Market, Budget Jan
Profit 12,278.50
Margin 30,195.50
Sales 49,950.00
COGS 19,755.00
Total Expenses 17,917.00
Marketing 3,515.00
Payroll 14,402.00
Misc 0
Inventory Label Only member
Ratios Label Only member
Margin % 60.45
Profit % 24.58Script di esempio:
/* Declare the temporary variables and set their initial values*/
VAR
Target = 15000,
AcceptableErrorPercent = .001,
AcceptableError,
PriorVar,
PriorTar,
PctNewVarChange = .10,
CurTarDiff,
Slope,
Quit = 0,
DependencyCheck,
NxtVar;
/*Declare a temporary array variable called Rollback based on the Measures dimension */
ARRAY Rollback [Measures];
/* Fix on the appropriate member combinations and perform the goal-seeking calculation*/
FIX(Budget, Jan, Product, Market)
LOOP (35, Quit)
Sales (Rollback = Budget;
AcceptableError = Target * (AcceptableErrorPercent);
PriorVar = Sales;
PriorTar = Profit;
Sales = Sales + PctNewVarChange * Sales;);
CALC DIM(Measures);
Sales (DependencyCheck = PriorVar - PriorTar;
IF(DependencyCheck <> 0) CurTarDiff = Profit - Target;
IF(@ABS(CurTarDiff) > @ABS(AcceptableError))
Slope = (Profit - PriorTar) / (Sales - PriorVar);
NxtVar = Sales - (CurTarDiff / Slope);
PctNewVarChange = (NxtVar - Sales) / Sales;
ELSE
Quit = 1;
ENDIF;
ELSE
Budget = Rollback;
Quit = 1;
ENDIF;);
ENDLOOP
CALC DIM(Measures);
ENDFIXEssbase esegue i calcoli riportati di seguito.
-
Dichiara le variabili temporanee obbligatorie utilizzando il comando VAR. Se del caso, vengono impostati i valori iniziali.
-
Dichiara un array unidimensionale denominato Rollback per memorizzare i valori del budget.
La dimensione del rollback si basa sul numero di membri nella dimensione Misure.
-
Correzioni sui valori Jan -> Budget per tutti i membri Product e Market.
-
Garantisce che i comandi tra LOOP e ENDLOOP vengano eseguiti in cicli per 35 volte per ogni combinazione di membri. Tuttavia, se la variabile Quit è impostata su 1, il LOOP viene interrotto e il calcolo continua dopo il comando ENDLOOP.
-
Esegue il ciclo delle combinazioni di membri eseguendo i calcoli riportati di seguito.
-
Posiziona il valore Budget -> Vendite nella variabile array temporanea Rollback.
-
Calcola l'errore accettabile moltiplicando il valore Target (15000) per il valore AcceptableErrorPercent (0,001). Il risultato viene inserito nella variabile AcceptableError.
-
Conserva il valore di vendita corrente e inserisce il valore di vendita per la combinazione di membri corrente nella variabile temporanea Valore precedente.
-
Conserva il valore Profitto corrente e inserisce il valore Profitto per la combinazione di membri corrente nella variabile temporanea PriorTar.
-
Calcola un nuovo valore di vendita moltiplicando il valore PctNewVarChange (0,1) per il valore di vendita corrente e aggiungendo il valore di vendita corrente. Il risultato viene inserito in Vendite.
-
Calcola e consolida la dimensione Misure.
-
Sottrae il valore PriorTar dal valore PriorVar e inserisce il risultato nella variabile temporanea DependencyCheck.
-
Verifica che DependencyCheck non sia 0 (zero) (IF).
-
Se DependencyCheck non è 0, sottrae il valore Target (15000) dal Profitto corrente e inserisce il risultato nella variabile temporanea CurTarDiff.
Il comando IF controlla se il valore assoluto (indipendentemente dal segno + o –) di CurTarDiff è maggiore del valore assoluto di AcceptableError:
-
Se è maggiore di AcceptableError, calcola le variabili temporanee Slope, NxtVar e PctNewVarChange.
-
Se non è maggiore di AcceptableError, interrompe il comando LOOP impostando il valore Quit su 1. Il calcolo continua dopo il comando ENDLOOP.
-
-
Se DependencyCheck è 0, il valore dell'array Rollback viene inserito in Budget. Essbase interrompe il comando LOOP impostando il valore Esci su 1. Il calcolo continua dopo il comando ENDLOOP.
-
-
-
Calcola e consolida la dimensione Misure.
I risultati del prodotto 100-10:
Product, Market, Budget Jan
Profit 15,000.00
Margin 32,917.00
Sales 52,671.50
COGS 19,755.00
Total Expenses 17,917.00
Marketing 3,515.00
Payroll 14,402.00
Misc 0
Inventory Label Only member
Ratios Label Only member
Margin % 28.47839913
Profit % 62.49489762