Tips & tricks for boosting the performance of your SAP Analytics Cloud application. Enjoy my cheat-list. I grouped performance issues by 5 sections:
- Data modeling
- Mobile version
- Web browser
The list is growing and updated regularly. If you find out any new tip, leave it in the comment.
First things first. Go back to the initial settings in the data model level. When you create a data model based on a massive dataset, turn on Optimize Story Building Performance. As a result, the data in the story will be refreshed only manually, by your request.
Data blending works slower with the dimension manipulation
Check out whether you can minimize the number of the linked models.
Avoid Linked Dimensions on Calculated Dimensions when you use data blending.
For hierarchies with the same structure and members, select Exclude descendents option. This ensures filtering by the selected members only.
The level-based hierarchy from the data import requires linking on ID and the hierarchy properties.
Remove unnecessary models from the story
SAC notifies you when you keep unnecessary data models in your application or story.
Turn off Cascading Effect
Analyze where the disabling cascading effect doesn’t harm your end-users. Each cascade filter increases the query volume.
Keep one million fact limit
Instead of showing All Members, limit values in the filters. Same with hierarchy levels: limit them to the most used scenarios.
Limit number of data points per page
Imagine, you got a highly condensed visualization. Put it as a single widget in the story. Don’t try to enrich the view with more objects. The users need more space to get focused on a specific graph. Showing only one widget per page assures:
- clarity in data communication
- quicker query loading!
The most interesting content for the users should be visible on the first page. Usually, it is a summary. Then you move to the explanation by showing the details. Finally, you move to the context of the situation.
Re-save the story
Each re-saves gives you an incremental improvement because you update your system.
Filters performance is relevant to the data model structure
You use one data model in your story & you use the same filter across multiple widgets.
The application works faster after converting the filters into a story filter.
You use two data models with a linked dimension in your story & you use the same filter across multiple widgets.
Keep the filter on the widget level. Converting it into a story filter slows down the application.
6 parallel queries per story
The optimal number of queries per story is six. 6 widgets = 6 queries.
Performance friends are MEMBERSET, FOREACH
MEMBERSET is a key function as we consider the performance in SAC. MEMBERSET limits the copying data you need to execute the query. You include only the necessary dimensions and measures for creating your calculation. That means you save tons of CPU capacity and keep the rest of your system memory for other queries.
FOREACH() used together with DATA() is a faster solution than LOOP().
You recognize variable members from having a # prefix. The number variable starts with @. Both objects keep the results of the intermediate calculation.
A variable member is like a member. It can store multiple values with the combination of other dimension members.
Number value stores only the intermediate calculation results from a single point of view.
Performance foes are RESTLOOKUP, DATA
The less RESTLOOKUP the better. Every execution of the calculation with RESTLOOKUP() retrieves the data. Use mathematical rules to limit the occurrence of RESTLOOKUPs in your calculation.
DATA() function decreases the application performance because it executes the queries in the back-end. Use it as least as possible.
When you face the issue of memory overload, test dividing DATA() into several workloads.
Input Control collapsed
Yeah, self-explanatory. Leave the input control always collapsed to load less data at once.
Limit number of pages in your story
I recommend adding a pane with hyperlinks to create navigation throughout your report.
Use more Restricted Measures and Calculations
Processing Restricted Measures and Calculations is faster than Exception Aggregation in the data model.
Still, SAP Master KBA reports that calculated rows and columns in tables are more efficient than the restricted measures. It depends on how complex is your model and calculations. Go for calculated rows and columns if you have many restricted measures in the Cross calculations dimension.
Disable data auto-refresh in Explorer
Disable Automatically Synchronize Visualization to make smooth interaction in Explorer. Keep in mind, the users must refresh the data manually when their charts are ready to be prompted.
If turn on Explorer in your story, show only relevant dimensions and measures.
Unbooked data in charts
This skips an extra process in the background. Hiding the unbooked data for dimension triggers the classification of whether the data is booked or not. I recommend keeping the unbooked data visible.
Ranking from the back-end
If your requirement is to show Top/Bottom 5 statically, set it up in the back-end.
The simpler the chart the better
Keep max. 500 data points per chart, optimally.
Use linked analysis wisely
Link only relevant charts. Each click triggers updates in the story (linked analysis works as action filters in Tableau).
Styling, formating and UX
Use responsive Pages
Responsive Pages load faster than Canva and Grid. Keep in mind, only the responsive page is compatible with iOS.
How to work with big tables in SAC?
By default, you can show max. 500 rows and 60 columns in the table. Change drill limitation to show more data.
Avoid formatting rules when your text table is large.
Drill Down and Up optimizes the display of the hierarchical data.
Enable Explorer rather create a huge table.
Personally, I don’t find it insightful to show lengthy text tables in analytical applications. The same input you find in the database. I recommend creating multiple charts that tell a story about your pivot table.
Import smaller PNG and SVG images
The recommended image size is smaller than 1 MB. PNG and SVG load faster than JPG.
Boost live connection to SAP BW
HTTP/2 must be enabled on SAP BW site. Check out Chrome configuration. Keep in mind the max number of queries per Page (6).
Performance on mobile devices
Stories with responsive pages
2G free space remains on your iOS device
Show higher aggregated views than on desktop version
Limit the number of data points on mobile. Anyway, you can’t see as many details on a small screen as on the desktop. You use mobile applications in a different way, for example, to look up the data before the executive meeting. Desktop applications are more analytical and operational.
Leave as least descriptive columns as possible. Use ID fields for columns.
Keep away from excessive amount of FOREACH() loops.
Google Chrome is a supported web browser with SAC.
Microsoft Edge is compatible too.
Avoid incognito mode
Don’t switch to incognito mode in Chrome because you fail to connect to SAC. This is a valid point when you use SAML SSO authentication in a live connection to SAP HANA.
Browser caching is helpful for complex stories and digital boardrooms. Unless you change the structure of the story or digital boardroom, you enjoy the strong performance through the cached data. Reopen the application to leverage the cache. Go to System> Administration > System Configuration > Enable Progressive Chart Rendering. This lets you see the cached version of the data for an hour.
However, if your application consists of one widget and slacks off, the reason for the poor performance must be somewhere else!
Remarks for live connection
Consult with your SAP system administrator how to test the performance for live connection. Compare the same story with live and acquired data connection.
Next steps: troubleshooting SAC poor performance
Do a quick cross-check of your issue. More details in the next post.
What kind of performance issues do you face? Any issues with your project? Drop me a line. I am here to help.
Reference: Best Practice Tips for Performance https://help.sap.com/viewer/00f68c2e08b941f081002fd3691d86a7/release/en-US/fa558b0ff273475c8f3cfa0053a5d89e.html https://apps.support.sap.com/sap/support/knowledge/public/en/2511489 https://apps.support.sap.com/sap/support/knowledge/public/en/2673776 https://apps.support.sap.com/sap/support/knowledge/public/en/2604574 https://help.sap.com/viewer/00f68c2e08b941f081002fd3691d86a7/release/en-US/5e46baa7575f47cfab8fba9b98f51fbf.html