Anwendungen mit erweiterter Dimensionalität mit Account-Dimension als Dense-Dimension
Wenn Sie eine Anwendung mit erweiterter Dimensionalität mit der Account-Dimension als Dense-Dimension verwenden, können Sie diese Skripttechniken verwenden. Beachten Sie die folgenden Punkte im Zusammenhang mit solchen Anwendungen:
Dimensionsreihenfolge : Die Movement-Dimension ist die erste Sparse-Dimension in der Dimensionsreihenfolge, auch bekannt als "Bitmap-Dimension".
Übergeordnete Elemente der Intercompany-Dimension weisen den Typ "Dynamische Berechnung" auf.
Bei allen Custom-Dimensionen müssen die übergeordneten Elemente auf "Dynamische Berechnung" gesetzt werden.
Die Idee ist, eine minimale Blockanzahl auf der oberen Ebene zu erreichen und dynamische Aggregationen bei Tabellenkalkulationsvorgängen zu erzielen.
Die Punkte 2 und 3 spielen eine wichtige Rolle beim Schreiben von angepassten Berechnungen, abgesehen von der Notwendigkeit, vorhandene Berechnungen neu zu schreiben, wenn oberste/übergeordnete Elemente in vorhandenen Berechnungen verwendet werden.
SET HYBRIDBSOINCALCSCRIPT FULL / NONE
HYBRIDBSOINCALCSCRIPT wird benötigt, wenn die rechte Seite des Ausdrucks oberste Elemente aufweist, zum Beispiel:
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";
In diesem Fall müssen Sie HYBRIDBSOINCALCSCRIPT für die betreffende Zeile deaktivieren und nach Ausführung der Zeile wieder aktivieren, zum Beispiel:
SET HYBRIDBSOINCALCSCRIPT NONE "CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;
Denken Sie daran, dass dies gegebenenfalls nur für konfigurierbare Berechnungsregeln (Einfügepunkt) durchgeführt werden muss.
SET HYBRIDBSOINCALCSCRIPT FULL / NONE
Wenn die rechte Seite nur ein oberstes Element aufweist, kann es vorkommen, dass HYBRIDBSOINCALCSCRIPT den Ausdruck verlangsamt, zum Beispiel:
"CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2";
In diesem Fall müssen Sie HYBRIDBSOINCALCSCRIPT für die betreffende Zeile deaktivieren und nach Ausführung der Zeile wieder aktivieren, zum Beispiel:
SET HYBRIDBSOINCALCSCRIPT NONE "CA3_010" = "FCCS_Mvmts_Subtotal" -> "Total Custom1" -> "No Custom2"; SET HYBRIDBSOINCALCSCRIPT FULL;
Denken Sie daran, dass dies gegebenenfalls nur für konfigurierbare Berechnungsregeln (Einfügepunkt) durchgeführt werden muss.
Methode für aufeinanderfolgende Addition
"Target_Account_Stored" -> "Mvmt_None" = "FCCS_Mvmts_Subtotal" -> "Source_Account_DynamicCalc" -> "Total Custom1" -> "Total Custom2";
In diesem Beispiel soll das Ergebnis der dynamischen Berechnung auf der rechten Seite in einem gespeicherten Dense-Element gespeichert werden. Diese Berechnung wird nicht durchgeführt, wenn sie mit SET HYBRIDBSOINCALCSCRIPT FULL ausgeführt wird. In solchen Fällen können Sie eine Methode für aufeinanderfolgende Addition verwenden, falls die Konsolidierungsoperatoren für Elemente der Ebene 0 der benutzerdefinierten Dimension die Addition zulassen. Da die Account-Dimension dünn besetzt ist, führen Sie für Elemente der Ebene 0 unter dem Quellkonto der dynamischen Berechnung FIX aus. Denken Sie außerdem daran, den Hybridmodus zu deaktivieren.
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
Betrachten wir den folgenden Fall, in dem für einige Elemente der Ebene 0 der Custom1-Dimension der Konsolidierungsoperator wie folgt festgelegt ist: Für Elemente von "Custom1_A" und "Custom1_B" ist der Konsolidierungsoperator auf "Subtrahieren" gesetzt.
Ein wichtiger Aspekt bei der Verwendung dieser Methode: Wenn die Geschäftsregel mehrmals ausgeführt wird, kann es vorkommen, dass das Zielkonto einen kumulierten Wert aufweist. Das führt zu falschen Zahlen. Daher sollten Sie in Betracht ziehen, den Zielwert in einem BOTTOMUP-Prozess mit "#Missing" zu initialisieren, da das Skript mindestens einmal ausgeführt worden wäre.
Vermeiden Sie die folgenden Konstrukte:
CALC DIM, CALC ALL, AGG und alle anderen zuweisungsfreien Ausdrücke, die einen untergeordneten Baum berechnen. Eine Best Practice ist, die Verwendung von CALC DIM und AGG auf Dimensionen zu beschränken, bei denen keine gespeicherten Elemente von dynamischen Elementen abhängig sind.
Verwenden Sie CREATENONMISSINGBLOCK oder CREATEBLOCKONEQ nicht in Berechnungsskripten.
Verwenden Sie diese Funktionen nicht innerhalb von Einfügepunkten:
@ALLOCATE
@CREATEBLOCK
@IRREX
@MDALLOCATE
@MDSHIFT
@MOVSUMX
@PTD
@SANCESTVAL
@STDEV
@STDEVP
@STDEVRANGE
@SYD
@TREND
Sparse-Elementblöcke und BOTTOMUP verwenden
Szenario für die Anwendung ohne erweiterte Dimensionen
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
Szenario für die Anwendung mit erweiterten Dimensionen
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
Das Element "FCCS_Mvmts_NetIncome" der Movement-Dimension wird als Anker verwendet. Die Movement-Dimension wird als Bitmap-Dimension betrachtet. Sie ist die erste Sparse-Dimension nach der dicht besetzten Account-Dimension. So weit wie möglich sollten Berechnungen, die ein einzelnes Movement-Dimensionselement einbeziehen, das Element der Movement-Dimension als Elementblock (bekannt als Anker) verwenden.
Berechnung unter Einbeziehung der obersten/übergeordneten Elemente als Quelle
Quelle für die Anwendung ohne erweiterte Dimensionen
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
Szenario für die Anwendung mit erweiterten Dimensionen
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
Oberste Elemente weisen den Typ "Dynamische Berechnung" auf und können nicht in FIX-Ausdrücken verwendet werden. Daher müssen sie auf der rechten Seite der Berechnung verwendet werden und das Ergebnis auf "Kein <member>" umleiten.
Ein einzelnes Dense-Dimensionselement, das das Ergebnis der Berechnung speichert, ist im FIX-Ausdruck zu platzieren.
Best Practices für Berechnungen in Anwendungen für erweiterte Dimensionalität
Verwenden Sie die Bottom-Up-Verarbeitung nur dann, wenn die rechte Seite der Berechnung keine obersten/übergeordneten Elemente umfasst.
Verwenden Sie @Remove, um das Dense-Element zu entfernen, anstatt die @ISMBR-Prüfung in der Dense-Dimension zu verwenden.
Verwenden Sie die boolesche @ISLEV-Funktion anstelle von @LEV und @CURRMBR.
Entfernen Sie eingeschränkte Elemente aus dem FIX-Ausdruck.
Verwenden Sie "Kopieren", um den Zielblock zu erstellen, wenn der Ankeransatz nicht funktioniert.
Die Berechnung sollte nur für ein Custom-Dimensionszielelement durchgeführt werden.
Verwenden Sie @LIKE, um das Skript generisch zu machen.
Prüfen Sie, ob es Grenzfälle gibt.
Prüfen Sie zuerst auf häufige Fälle.
Wenn Berechnungen in ein einzelnes Movement-Dimensionselement schreiben, verwenden Sie das Element der Movement-Dimension als Elementblock, bekannt als Anker.
Wenn Berechnungen in ein einzelnes Account-Dimensionselement schreiben, bei dem die Account-Dimension dicht besetzt ist, verschieben Sie das Account-Element in den FIX-Ausdruck. Verschieben Sie in einer Anwendung, in der Period und Movement die Dense-Dimensionen sind, das Account-Element auf die linke Seite der Berechnung.
Anwendungen mit erweiterter Dimensionalität verwenden einen hybriden Aggregationsmodus. Das Konstrukt "SET HYBRIDBSOINCALCSCRIPT" ist in Calculation Manager verfügbar und steuert, ob Cubes in der Anwendung den hybriden Aggregationsmodus in Berechnungsskripten verwenden, wenn gespeicherte Elemente von dynamischen Elementen abhängig sind.
Eine Liste der in Anwendungen mit erweiterter Dimensionalität unterstützten Essbase-Funktionen finden Sie im Abschnitt zu den im hybriden Aggregationsmodus unterstützten Funktionen in der Dokumentation Technische Referenz zu Oracle Essbase.
Anwendungsfall Kunde A
In diesem Anwendungsfall brachten die ursprünglichen Berechnungen diese Probleme:
Manuelle Cashflowberechnungen
Wenn Cashflowberechnungen in Einfügepunkte eingefügt wurden, war die Performance langsamer als ohne Berechnungen. Bei einer Entity dauerte die Konsolidierung zwei Minuten, gegenüber 40 Sekunden ohne Berechnung.
Die Berechnung konnte den vordefinierten Cashflow aufgrund ihrer gesetzlichen Praxis nicht verwenden.
Ursprüngliche Berechnungen
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
Die Berechnung schneidet aus den folgenden Gründen nicht gut ab:
Die Berechnungen auf der rechten Seite sind im Wesentlichen Abfragen an Essbase, da die meisten übergeordneten Elemente der jeweiligen Dimensionen den Typ "Dynamische Berechnung" aufweisen.
Im obigen Fall werden zwei gleichzeitige Abfragen gestartet, und erst beim Abrufen der Ergebnisse wird die eigentliche Berechnung initiiert, was zu einem langsamen Formelcache führt.
Das obige Skript wird für jede Entity während einer Konsolidierung ausgeführt, unabhängig von der Entityebene.
Geänderte Berechnung
Das folgende Beispiel zeigt eine geänderte Berechnung.
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
Skriptverbesserungen
Jede Abfrageberechnung wird als separate FIX-Anweisung getrennt, und Dense-Zielelemente werden in die FIX-Anweisung verschoben.
Das Skript wird bei einer Konsolidierung nur für die Entity der Ebene 0 ausgeführt.
Das Element der Movement-Dimension wird als Anker verwendet.
Die Performance hat sich von 2 Minuten auf 30 Sekunden pro Entity verbessert.
Anwendungen mit erweiterter Dimensionalität mit Account-Dimension als Sparse-Dimension sowie Period- und Movement-Dimension als Dense-Dimensionen
In diesem Abschnitt werden Skripttechniken für Anwendungen mit erweiterter Dimensionalität erläutert, die die Account-Dimension als Sparse-Dimension verwenden. Wenn Sie eine Anwendung erstellen oder eine bestehende Anwendung in eine Anwendung mit Period- und Movement-Dimensionen als Dense-Dimensionen sowie der Account-Dimension als Sparse-Dimension konvertieren, beachten Sie folgende Punkte:
Period- und Movement-Dimensionen sind Dense-Dimensionen.
Die Account-Dimension ist dünn besetzt.
Vordefinierte übergeordnete Elemente der Movement-Dimension weisen den Typ "Dynamische Berechnung" auf.
Übergeordnete Elemente der Intercompany-Dimension weisen den Typ "Dynamische Berechnung" auf.
Alle übergeordneten Elemente der benutzerdefinierten Dimension müssen den Typ "Dynamische Berechnung" aufweisen.
Hier geht es darum, eine minimale Blockanzahl auf der oberen Ebene zu erreichen und dynamische Aggregationen bei Tabellenkalkulationsvorgängen zu erzielen.
Die Punkte 2 und 3 spielen eine wichtige Rolle beim Schreiben von angepassten Berechnungen, abgesehen von der Notwendigkeit, vorhandene Berechnungen neu zu schreiben, wenn übergeordnete Elemente in vorhandenen Berechnungen verwendet werden.
Anwendungsfall Kunde A
Berechnung des Data Source-Elements "IC_Inventory_Alloc" auf Grundlage der Quelldaten bei "FCCS_Managed Data"
Vor der Optimierung
Kunde A - ursprüngliches Berechnungsskript
a. Wird TOPDOWN ausgeführt
b. Verwendet oberste Elemente mit dynamischer Berechnung auf der rechten Seite und verursacht so einen langsamen Datenabruf
c. In Berechnung wird unnötig mit derselben Schnittmenge multipliziert und dividiert
Anwendungsfall Kunde A - geändertes Berechnungsskript
Das geänderte Berechnungsskript verwendet die Methode für aufeinanderfolgende Addition sowie die BOTTOMUP-Verarbeitung.
a. Berechnung wird im BSO-Modus ausgeführt - SET HYBRIDBSOINCALCSCRIPT NONE
b. @CREATEBLOCK wird zum Erstellen der Zielblöcke "IC_Inventory_Alloc" aufgrund der Quellblöcke "FCCS_Managed Data" mit BOTTOMUP verwendet
c. Anstelle der obersten Elemente mit dynamischer Berechnung werden auf der rechten Seite gespeicherte Elemente verwendet.
Anwendungsfall Kunde B
Diese Berechnung für das Überschusskonto musste nach der Migration in das Modell mit Account-Dimension als Sparse-Dimension neu geschrieben werden. Die Datenspeicherungseigenschaft für vordefinierte übergeordnete Elemente in der Movement-Dimension lautet "Dynamische Berechnung". Das führte zu einigen Herausforderungen, da das Timing bei Konsolidierungen beeinträchtigt war. Die Berechnung musste nach der Migration angehalten werden.
Timing für gesamtes Jahr nach Einführung von Best Practices:
Anwendungsfall Kunde B - ursprüngliche Berechnung
In der ursprünglichen FCCS_20-Berechnung:
a. Elemente der Movement-Dimension wurden als Anker verwendet. Das Element "FCCS_Mvmts_Total" der Movement-Dimension weist den Typ "Dynamische Berechnung" auf und konnte nicht als Anker verwendet werden.
b. Die Account-Dimension ist dünn besetzt. Deshalb führten die obersten Elemente "FCCS_Total Liabilities and Equity" und "FCCS_Total Assets" auf der rechten Seite zu längeren Berechnungszeiten.
Anwendungsfall Kunde B - geänderte Berechnung
Dieses Beispiel zeigt die geänderte FCCS_20-Berechnung.
a. Das Element der Consolidation-Dimension wird als Anker verwendet.
b. Die Methode für aufeinanderfolgende Addition wird mit FIX für Elemente der Ebene 0 von "FCCS_Total Liabilities and Equity" und "FCCS_Total Assets" verwendet. Dabei werden zuerst alle Verbindlichkeiten und das gesamte Eigenkapital addiert und anschließend das Gesamtvermögen subtrahiert.