Applicazioni con dimensionalità estesa con Conto come dimensione densa
Se si utilizza un'applicazione con dimensionalità estesa con Conto come dimensione densa, è possibile utilizzare queste tecniche di script. Si notino i seguenti punti relativi a queste applicazioni:
Ordine dimensioni: la dimensione Trasferimento è la prima dimensione sparsa nell'ordine delle dimensioni, nota come dimensione bitmap.
I membri padre della dimensione Interaziendale sono calcoli dinamici.
Tutte le dimensioni customizzate devono possedere membri padre impostati su Calcolo dinamico.
L'idea è di ridurre al minimo il numero di blocchi di livello superiore e ottenere aggregazioni dinamiche durante le operazioni nel foglio di calcolo.
I precedenti punti 2 e 3 sono importanti per la scrittura dei calcoli customizzati, oltre all'esigenza di riscrivere i calcoli esistenti quando in essi vengono utilizzati i membri Superiore/Padre.
SET HYBRIDBSOINCALCSCRIPT FULL / NONE
HYBRIDBSOINCALCSCRIPT è obbligatorio quando il lato destro dell'espressione include membri di livello più alto, ad esempio:
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";
In questo caso, è necessario disabilitare HYBRIDBSOINCALCSCRIPT per la riga non valida e quindi abilitarlo di nuovo dopo l'esecuzione della riga non valida, ad esempio:
SET HYBRIDBSOINCALCSCRIPT NONE "CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;
Se richiesto, è opportuno ricordare che questa operazione deve essere eseguita solo per le regole del calcolo configurabile (punto di inserimento).
SET HYBRIDBSOINCALCSCRIPT FULL / NONE
Talvolta, in presenza di solo un membro di livello più alto sul lato destro, HYBRIDBSOINCALCSCRIPT rallenta l'esecuzione dell'espressione, ad esempio:
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";
In questo caso, è necessario disabilitare HYBRIDBSOINCALCSCRIPT per la riga non valida e quindi abilitarlo di nuovo dopo l'esecuzione della riga non valida, ad esempio:
SET HYBRIDBSOINCALCSCRIPT NONE "CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;
Se richiesto, è opportuno ricordare che questa operazione deve essere eseguita solo per le regole del calcolo configurabile (punto di inserimento).
Tecnica di addizione successiva
"Target_Account_Stored" -> "Mvmt_None" = "FCCS_Mvmts_Subtotal" -> "Source_Account_DynamicCalc" -> "Total Custom1" -> "Total Custom2";
L'obiettivo di questo esempio consiste nel memorizzate il risultato del calcolo dinamico a destra in un membro denso memorizzato. Questo calcolo non viene eseguito in caso di esecuzione con SET HYBRIDBSOINCALCSCRIPT FULL. In queste situazioni, in base agli operatori di consolidamento dei membri di livello zero della dimensione personalizzata impostata su Addizione, è possibile utilizzare una tecnica definita addizione successiva. Poiché la dimensione Conto è sparsa, si applica l'istruzione FIX ai membri di livello zero nel conto di origine Calcolo dinamico. Occorre inoltre ricordare di disattivare la modalità ibrida.
1. SET HYBRIDBSOINCALCSCRIPT NONE; /* Turn OFF Hybrid mode */ 2. FIX( @RELATIVE( "Total Custom1", 0 ), @RELATIVE( "Total Custom2", 0 ), <other dimension members of FIX> ) 3. "FCCS_Mvmts_Subtotal" ( @CALCMODE( BOTTOMUP ); 4. "Target_Account_Stored" -> "Mvmt_None" = "Target_Account_Stored" -> "Mvmt_None" + "Source_Account_DynamicCalc"; 5. ) 6. ENDFIX
Esaminare il seguente caso in cui alcuni membri Custom1 di livello zero dispongono dell'operatore di consolidamento impostato come segue: i membri Custom1_A e Custom1_B dispongono dell'operatore di consolidamento impostato su Sottrai.
Considerazione importante quando si usa questa tecnica: quando una regola business viene eseguita più volte è possibile che il conto target disponga di un valore accumulato. Si ottengono quindi numeri non corretti. Prendere quindi in considerazione l'inizializzazione del valore target su #Missing in un processo BOTTOMUP perché lo script sarà stato eseguito almeno una volta.
Le costruzioni indicate di seguito sono da evitare.
CALC DIM, CALC ALL, AGG ed eventuali altre espressioni senza assegnazione che calcolano un albero secondario. È consigliabile limitare l'uso di CALC DIM e AGG alle dimensioni in cui non esistono membri memorizzati dipendenti da membri dinamici.
Non utilizzare CREATENONMISSINGBLOCK o CREATEBLOCKONEQ negli script di calcolo.
Evitare l'uso di queste funzioni all'interno dei punti di inserimento:
@ALLOCATE
@CREATEBLOCK
@IRREX
@MDALLOCATE
@MDSHIFT
@MOVSUMX
@PTD
@SANCESTVAL
@STDEV
@STDEVP
@STDEVRANGE
@SYD
@TREND
Utilizzo di un blocco di membri sparsi e di BOTTOMUP
Scenario di applicazione di dimensioni non estese
1.FIX ("FCCS_EntityInputFCCS_EntityInputFCCS_EntityInputFCCS_EntityInput FCCS_EntityInput FCCS_EntityInputFCCS_EntityInputFCCS_EntityInputFCCS_EntityInput", "Entity "Entity Currency" Currency" Currency" Currency" Currency" Currency" Currency" ) 2.FIX ("Inventory_StockInventory_StockInventory_StockInventory_Stock Inventory_StockInventory_Stock Inventory_Stock Inventory_Stock ", "FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome ", "FCCS_NoFCCS_NoFCCS_NoFCCS_No FCCS_NoIntercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", "No "No Product", Product", Product", Product", Product", Product", Product", "FCCS_LocalFCCS_LocalFCCS_LocalFCCS_Local FCCS_Local GAAP" GAAP" GAAP" ) 3."FCCS_ManagedFCCS_ManagedFCCS_ManagedFCCS_Managed FCCS_Managed FCCS_Managed Data" Data" Data" ( 4."FCCS_OtherFCCS_OtherFCCS_OtherFCCS_Other FCCS_Other FCCS_Other Data" Data" Data" ="Warehouse_StockWarehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock " +"Showroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock Showroom_Stock "; 5.) 6.ENDFIX 7.ENDFIX ENDFIX
Scenario di applicazione di dimensioni estese
8.FIX ("FCCS_EntityFCCS_EntityFCCS_EntityFCCS_Entity FCCS_Entity Input", Input", Input", Input", Input", Input", Input", "Entity "Entity Currency" Currency" Currency" Currency" Currency" Currency" Currency" ) 9.FIX ("Inventory_StockInventory_StockInventory_StockInventory_Stock Inventory_StockInventory_Stock Inventory_Stock Inventory_Stock ", "FCCS_ManagedFCCS_Managed FCCS_Managed FCCS_ManagedFCCS_ManagedData" Data" Data" ,"FCCS_NoFCCS_NoFCCS_NoFCCS_No FCCS_NoIntercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", Intercompany", "No "No Product", Product", Product", Product", Product", Product", Product", "FCCS_LocalFCCS_LocalFCCS_LocalFCCS_Local FCCS_Local GAAP" GAAP" GAAP" ) 10 ."FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncomeFCCS_Mvmts_NetIncome FCCS_Mvmts_NetIncome " ( 11 ."FCCS_OtherFCCS_OtherFCCS_OtherFCCS_Other FCCS_Other FCCS_Other Data" Data" Data" ="Warehouse_StockWarehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock Warehouse_Stock " +"Showroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock Showroom_StockShowroom_Stock "; 12 .) 13 .ENDFIX ENDFIX 14 .ENDFIX
Il membro Trasferimento "FCCS_Mvmts_NetIncome" viene utilizzato come ancora. La dimensione Trasferimento viene considerata una dimensione bitmap. È la prima dimensione sparsa dopo la dimensione densa Conto. Per quanto possibile, i calcoli che coinvolgono un singolo membro della dimensione Trasferimento devono utilizzare il membro Trasferimento come blocco di membri, ovvero come ancora.
Calcolo che coinvolge come origine i membri Superiore/Padre
Origine dell'applicazione di dimensioni non estese
1. FIX ("Entity Currency", "FCCS_Entity Input") 2. FIX("FCCS_Managed Data", "FCCS_Intercompany Top", "Total Custom1", "Total Custom2") 3. "FCCS_Mvmts_NetIncome"( 4. IF(@ISLEV("Entity", 0)) 5. "Account 3" = "Account 1" + "Account 2"; 6. ) 7. ENDFIX 8. ENDFIX
Scenario di applicazione di dimensioni estese
1. FIX ("Entity Currency", "FCCS_Entity Input") 2. FIX("Account 3" ,"FCCS_Managed Data", "FCCS_No Intercompany", "No Custom1", "No Custom2") 3. "FCCS_Mvmts_NetIncome"( 4. IF(@ISLEV("Entity", 0)) 5. "FCCS_Intercompany Top"->"Total Custom1"- >"Total Custom2"->"Account 1" + "FCCS_Intercompany Top"- >"Total Custom1"->"Total Custom2"->"Account 2"; 6. ) 7. ENDFIX 8. ENDFIX
I membri Superiore sono calcoli dinamici e non possono essere utilizzati nelle espressioni FIX, mentre possono essere impiegati sul lato destro del calcolo e reindirizzano il risultato a "Nessun <membro>".
Un singolo membro di dimensione densa che memorizza il risultato del calcolo. Deve essere inserito in FIX.
Procedure consigliate per i calcoli nelle applicazioni con dimensionalità estesa
Utilizzare l'elaborazione BottomUp solo quando il calcolo sul lato destro non interessa membri Superiore/Padre.
Utilizzare @Remove per rimuovere il membro denso invece di usare il controllo @ISMBR nella dimensione densa.
Utilizzare @ISLEV booleano invece di @LEV e @CURRMBR.
Rimuovere i membri limitati da FIX.
Utilizzare Copia per creare il blocco target se non funziona l'approccio ancora.
È necessario limitare i calcoli a un solo membro della dimensione customizzata target.
Utilizzare @LIKE per rendere generico lo script.
Verificare la presenza di casi limite.
Controllare prima i casi comuni.
Quando i calcoli scrivono in un singolo membro della dimensione Trasferimento, utilizzare tale membro come blocco, ovvero come ancora.
Quando i calcoli scrivono in un singolo membro della dimensione Conto, in cui il conto è la dimensione densa, spostare il membro Conto in FIX. In un'applicazione in cui il periodo e il trasferimento sono membri densi, spostare il membro conto a sinistra del calcolo.
Le applicazioni con dimensioni estese utilizzano la modalità di aggregazione ibrida. Il costrutto SET HYBRIDBSOINCALCSCRIPT è disponibile in Calculation Manager e controlla se i cubi nell'applicazione utilizzano la modalità di aggregazione ibrida negli script di calcolo quando i membri memorizzati dipendono da membri dinamici.
Per un elenco delle funzioni Essbase supportate nelle applicazioni con dimensionalità estesa, fare riferimento alla sezione relativa alle funzioni supportate nella modalità di aggregazione ibrida in Oracle Essbase Technical Reference (in lingua inglese).
Caso d'uso Cliente A
In questo caso d'uso, i calcoli originali presentavano i problemi indicati di seguito.
Calcoli manuali del flusso di cassa
Rallentamento delle prestazioni quando i calcoli del flusso di cassa venivano introdotti nei punti di inserimento rispetto a quando i calcoli erano assenti. Il consolidamento di un'entità richiedeva due minuti a fronte dei 40 secondi richiesti senza il calcolo.
Il calcolo non poteva utilizzare il flusso di cassa predefinito a causa delle relative procedure obbligatorie.
Calcoli originali
1. FIX("Entity Currency", "FCCS_Entity Input") 2. /* Account CA3_010 - CET1 Capital ratio */ 3. /* Account CA3_020 - Surplus(+)/Deficit(-) of CET1 capital */ 4. FIX ("FCCS_No Movement", "No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany") 5. "Submitted" ( 6. "CA3_010" = ("FCCS_Mvmts_Subtotal"->"Total Custom1"->"Total Custom2"->"Total Custom3"-> "FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"->"CA1_020" / "FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"-> "CA2_010") - @Prior("CA3_010"->"FCCS_YTD"); 7. "CA3_020" = ("FCCS_Mvmts_Subtotal"->"Total Custom1"->"Total Custom2"->"Total Custom3"-> "FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"->"CA1_020" - ("FCCS_Intercompany Top"->"FCCS_Total Data Source"->"FCCS_YTD"-> "CA2_010" * 0.045)) - @Prior("CA3_020"->"FCCS_YTD"); 8. ENDFIX 9. ENDFIX
Il calcolo non viene eseguito correttamente per i motivi riportati di seguito.
I calcoli del lato destro sono sostanzialmente query a Essbase, dato che la maggior parte dei membri padre delle rispettive dimensioni sono calcoli dinamici.
Nel caso suddetto, vengono avviate due query simultanee, e solo quando si raggiungono dei risultati viene avviato il calcolo effettivo, che rallenta la cache delle formule.
Lo script precedente viene eseguito per ogni entità, durante un consolidamento, indipendentemente dal livello entità.
Calcolo rivisto
Di seguito è riportato un esempio di calcolo rivisto.
1. SET HYBRIDBSOINCALCSCRIPT NONE; /*Turn OFF HYBRID BSO Mode */ 2. FIX("Entity Currency", "FCCS_Entity Input") 3. /* Account CA3_010 - CET1 Capital ratio */ 4. /* Account CA3_020 - Surplus(+)/Deficit(-) of CET1 capital */ 5. /* First perform the natural aggregation in BOTTOMUP mode */ 6. FIX (@RELATIVE("Total Custom1", 0), @RELATIVE("Total Custom2", 0), @RELATIVE("Total Custom3", 0), "No Custom4", @RELATIVE("FCCS_Total Data Source", 0), @RELATIVE("FCCS_Intercompany Top", 0)) 7. "FCCS_Mvmts_Subtotal"(@CALCMODE(BOTTOMUP); 8. IF (@ISLEV("ENTITY", 0)) 9. "FCCS_No Movement"->"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_010" = "FCCS_No Movement"-> "FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_010" + ("FCCS_YTD"->"CA1_020"/"FCCS_YTD"->"CA2_010"); 10. "FCCS_No Movement"->"FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_020" = "FCCS_No Movement"-> "FCCS_No Intercompany"->"FCCS_Data Input"->"Submitted"->"CA3_020" + ("FCCS_YTD"->"CA1_020" - ("FCCS_YTD"->"CA2_010" * 0.045)); 11. ENDIF; 12. ) 13. ENDFIX 14. /* Now leverage usage of @SHIFMINUS instead of subtraction and @PRIOR */ 15. FIX ("No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany", "Submitted", "CA3_010") 16. "FCCS_No Movement"(@CALCMODE(BOTTOMUP); 17. IF (@ISLEV("ENTITY", 0)) 18. @SHIFTMINUS("CA3_010", "FCCS_YTD"->"CA3_010", -1); 19. ENDIF; 20. ) 21. ENDFIX 22. FIX ("No Custom2", "No Custom3", "No Custom4", "FCCS_Data Input", "FCCS_No Intercompany", "Submitted", "CA3_020") 23. "FCCS_No Movement"(@CALCMODE(BOTTOMUP); 24. IF (@ISLEV("ENTITY", 0)) 25. @SHIFTMINUS("CA3_020", "FCCS_YTD"->"CA3_020", -1); 26. ENDIF; 27. ) 28. ENDFIX 29. ENDFIX
Miglioramenti allo script
Ogni calcolo di query viene separato come FIX distinto e il membro denso di destinazione viene spostato in FIX
Lo script viene eseguito solo sull'entità di livello zero durante un consolidamento
Il membro di trasferimento viene utilizzato come ancoraggio
Miglioramento delle prestazioni da due minuti a 30 secondi per entità
Applicazioni con dimensionalità estesa con Conto come dimensione sparsa e Periodo e Trasferimento come dimensioni dense
Questa sezione illustra le tecniche di script per le applicazioni con dimensionalità estesa che utilizzano Conto come dimensione sparsa. Quando si sceglie di creare un'applicazione o convertire un'applicazione esistente in un'applicazione con Periodo e Trasferimento come dimensioni dense e Conto come dimensione sparsa, è necessario tenere in considerazione i seguenti aspetti:
Periodo e Trasferimento sono dimensioni dense.
La dimensione Conto è sparsa.
I membri della dimensione Trasferimento padre popolata sono di tipo Calcolo dinamico.
I membri padre della dimensione Interaziendale sono di tipo Calcolo dinamico.
Tutti i membri padre della dimensione personalizzata devono essere di tipo Calcolo dinamico.
L'obiettivo consiste nel ridurre al minimo il numero di blocchi di livello superiore e ottenere aggregazioni dinamiche durante le operazioni nel foglio di calcolo.
I punti 2 e 3 sono importanti per la scrittura dei calcoli customizzati, oltre all'esigenza di riscrivere i calcoli esistenti quando in essi vengono utilizzati i membri Padre.
Caso d'uso Cliente A
Calcolo del membro IC_Inventory_Alloc dell'origine dati, in base ai dati di origine in FCCS_Managed Data
Prima dell'ottimizzazione
Cliente A - Script di calcolo originale
a. Esecuzione TOPDOWN
b. Uso di membri più alti di Calcolo dinamico a destra, con conseguente rallentamento del recupero dei dati
c. Moltiplicazioni e divisioni non necessarie da parte del calcolo mediante la stessa intersezione
Caso d'uso Cliente A - Script di calcolo modificato
Lo script di calcolo modificato utilizza la tecnica di addizione successiva e l'elaborazione BOTTOMUP.
a. Esecuzione del calcolo in modalità BSO - SET HYBRIDBSOINCALCSCRIPT NONE
b. @CREATEBLOCK viene usato per creare blocchi IC_Inventory_Alloc target basati su blocchi di dati FCCS_Managed di origine, BOTTOMUP
c. Invece dei membri più alti di Calcolo dinamico, vengono usati membri memorizzati a destra
Caso d'uso Cliente B
È stato necessario riscrivere il calcolo del conto eccedenza dopo la migrazione a Conto come modello sparso. La proprietà Memorizzazione dati dei membri padre popolati nella dimensione Trasferimento è Calcolo dinamico. Ciò ha provocato alcuni problemi perché le tempificazioni di consolidamento sono state compromesse. È stato necessario interrompere il calcolo dopo la migrazione.
Tempificazione pari a un anno intero dopo l'adozione delle procedure consigliate:
Caso d'uso Cliente B - Calcolo originale
Nel calcolo FCCS_20 originale:
a. I membri della dimensione Trasferimento sono stati usati come ancoraggio. Il membro "FCCS_Mvmts_Total" di Trasferimento è Calcolo dinamico e non è stato possibile utilizzarlo come ancoraggio.
b. La dimensione Conto è sparsa, quindi i membri più alti "FCCS_Total Liabilities and Equity" e "FCCS_Total Assets" a destra hanno generato tempi di calcolo più lenti.
Caso d'uso cliente B - Calcolo modificato
Questo esempio mostra il calcolo FCCS_20 modificato.
a. Il membro di consolidamento viene utilizzato come ancoraggio.
b. La tecnica di addizione successiva viene utilizzata con FIX sui membri di livello zero di "FCCS_Total Liabilities and Equity" e "FCCS_Total Assets", aggiungendo prima di tutto tutte le passività ed equity e quindi sottraendo tutte le attività