SAC - Performance Best Practices For Planning
SAC - Performance Best Practices For Planning
PUBLIC
Agenda
Planning Model
§ Performance considerations / Calculations / Account dimension / Versions
Data Import
Data Actions
§ Advanced Formula best practices
§ Demo Data Action Performance Statistics & Analysis story
Data Entry
Performance Analysis
§ SAP Analytics Cloud Performance Analysis Tool
Data Actions
§ Performance Best Practices
§ Example Business Scenarios
Planning
§ Modelling Checklist
§ Optimizing Calculations
Browser HANA
JavaScript Engine SAC tenant
SAC tenant
SAC tenant
SAC tenant
SAC Client
Contentlib
Contentlib
Contentlib
Contentlib
HTTP for acquired data
Chart Engine
EPM Models
EPM EPM
Models
Models
Models
Request generator
HANA on premise
UI interactivity (UI5)
HTTP for live connection
Calc View engine and MDS
SAC Tenant
§ Can have an impact when doing acquisition
scenarios
Network (bandwidth)
§ Network infrastructure in general
§ Data transfer between the different components
Planning Model
Model
Best Practices
Data Actions Analytic
/ Allocations Applications
Planning in SAP Analytics Cloud
Special Dimensions
Special Attributes
Table Calculations
Story-based Calculated Accounts
Cross Calculations Special Widget Features:
Story Ad-hoc Planning Panel, Variances etc.
Calculated Dimensions
fx
Data
Widgets
fx Calculated
Accounts
Model
Advanced Formulas Security Application JavaScript (Result Set API)
Visual Formulas Data Data Validation Table Calculations
Actions / Analytic
Data Locking Applications
Allocations Allocations Application-based Calculated Accounts
fx fx Cross Calculations
Calculated Dimensions
Persistent
On-the-fly Calculations
Calculations
The Account Dimension contains attributes that define how values are
read, calculated and aggregated.
Exception Aggregation
§ Formula: Product_EA = Volume * Revenue
§ No Exception Aggregation defined: (Prio: Formula)
[LOOKUP_04] [LOOKUP_05]
LOOKUP([FUNC_01].[d/Flow]="#" and [d/lndustry]="#") LOOKUP([FUNC_02],[d/Date]="201712"and[d/Industry]="#", [d/Date])
[FUNC_03] [LOOKUP_03]
IF([d/Industry]="#"and[d/Flow]="#", 0, [FUNC_01] ) LOOKUP([FUNC_02],[d/Date]="201712")
[FUNC_01] [FUNC_02]
IF([d/Item].[p/SOURCE]='INM',[LINK_03]/[LOOKUP_01], IF(ISNULL([LOOKUP_02]) OR[LOOKUP_02]!=1,[LINK_06],[LINK_02] )
IF([d/Item].[p/SOURCE]='SAC',[LINK_04]+[LINK_05]/[LOOKUP_01] , 0 ) )
[LOOKUP_01]
LOOKUP([LINK_01], ,[d/Version] and [d/Item] and
[d/Item].[p/SOURCE] and [d/Item].[p/CID]) Glossary:
• Function
[LINK_02] • Lookup
[LINK_01] LINK([OtherModel], [ACC_02],[d/Unit] = "#" and
• Link
LINK([OtherModel],[ACC_01],[d/Flow]="#" and [d/Industry]="#" and [d/Product]="#" and [d/Company]="[all]" [d/Market] = "#")
and [d/Item]="#" and [d/Market]="#" and [d/Unit]="#" and [d/Date]="[all]")
© 2021 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 17
Planning Model: Versions
Version Concept
§ Published data of public versions are stored in fact table.
§ Data of private versions are stored in separate tables
§ A public version in edit mode is treated as a user’s private version.
§ Once a public version is edited, a private version is created (by
copying all accessible data) for the user editing the version.
§ When the user publishes, the delta (i.e. updated rows) are saved.
Data copy of all accessible data Huge data volumes in a planning version
Append Keeps the existing data as is and adds new entries to the target
model. Duplicate rows can be aggregated or rejected.
Update Updates the existing data and adds new entries to the target
model. The scope of this update is based on a combination of
all dimensions in the target model.
Clean and Replace selected Version data Deletes the existing data and adds new entries to the target
model, but only for the versions that you specify in the import.
Clean and Replace subset of data Deletes the existing data and adds new entries to the target
model, but only for a defined subset of the data based on a
scope of selected versions and specific dimensions.
Reset Model (optional) Clean all the data currently in the model before it can be
replaced with the newest set. This will clean any existing data
in all dimensions, excluding public dimensions.
© 2021 SAP SE or an SAP affiliate company. All rights reserved. ǀ PUBLIC 20
Data Import
Importing data from on-premise data sources typically requires the SAP Cloud
Connector and SAP Analytics Cloud Agent.
Copy Steps
§ Copy (overwrite/append) data within a model
§ Can copy calculated accounts to regular accounts
§ Can persist aggregations
Cross-Model Copy
§ Copy data from one model to another model
§ Can copy calculated accounts to regular accounts
Performance Recommendations
§ Refrain from copying large data volumes if reading calculated accounts:
§ Refrain from copying large data volumes if reading non-standard aggregations
§ Background: Copying pure facts allows direct fact data access while calculated accounts enforce
querying data via MDS. In addition, you may run into query limitations (MaxResultSet Error).
General Recommendations
§ Limit the calculation scope as much as possible:
– Use MEMBERSET to define the step’s data scope.
– Use parameters to restrict the scope.
– Define security to ensure the planner will run the calculations in the allowed data sections.
§ Simplify the formulas:
– The fewer RESULTLOOKUP / DATA calls, the better.
– Try use members and properties as parameters rather than IF … ENDIF.
– Use VARIABLEMEMBER as temporary results for aggregations and for reusing results in
multiple calculations.
INTEGER @ZERO = 0
IF RESULTLOOKUP() = NULL THEN
DATA() = @ZERO
ENDIF
DATA([d/Account]=#YTD_AccountX, [d/Date]="202012") =
RESULTLOOKUP([d/Account]="AccountX")
DATA([d/Account]=#YTD_AccountY, [d/Date]="202012") =
RESULTLOOKUP([d/Account]="AccountY")
DATA([d/Account]=#YTD_AccountZ, [d/Date]="202012") =
RESULTLOOKUP([d/Account]="AccountZ")
DATA([d/Acc]="X") = DATA() =
RESULTLOOKUP([d/Acc]="A") * RESULTLOOKUP([d/Acc]=[d/Acc].[p/CALC1]) *
RESULTLOOKUP([d/Acc]="B") RESULTLOOKUP([d/Acc]=[d/Acc].[p/CALC2])
DATA([d/Acc]="Y") =
RESULTLOOKUP([d/Acc]="C") *
RESULTLOOKUP([d/Acc]="D")
Model Properties
DATA([d/Acc]="Z") =
RESULTLOOKUP([d/Acc]="E") * Member ID CALC1 CALC2
RESULTLOOKUP([d/Acc]="F") X A B
Y C D
Z E F
Decentral Execution
§ It is very important that the scope is properly limited to the minimal data section that
is required.
Central Execution
§ It should be considered to run Data Actions centrally for all users if there is a large
data volume involved.
§ Data Actions can be scheduled via the Planning Calendar.
§ Data Actions can be published automatically after the execution.
Different focus:
§ Data Actions manipulate planning data
§ Multi Actions combine existing operations to simplify tasks for
planning users.
§ e.g. Use a Multi Action to run a Data Action, publish data, then run
another Data Action.
Demo Model
Data Actions Analytic
/ Allocations Applications
Data Action Performance Statistics & Analysis Story
Data Entry is done via tables with one entry causing a refresh. Story
Recommendations
§ Deactivate “Planning Enabled” for reporting tables.
§ Limit the number of tables (or in general data widgets) per page.
§ Make use of input controls instead of table navigations; particularly
when using unbooked mode. Model
§ Avoid expensive Calculated Accounts in input-ready tables.
§ Use Mass Data Entry mode, particularly for larger tables. Data Actions
/ Allocations
Analytic
Applications
– Enter Mass Data Entry Automatically
§ Avoid many hidden cells in large tables
– In these cases consider Restricted Measures.
§ Consider splitting tables instead of creating complex ones.