The GoodData platform is a cloud-based multi-tenant platform. The infrastructure is shared, and the report computation performance of a workspace may vary depending on when report computation is performed.
Use the following best practices to achieve the best performance in report computation.
Minimize the amount of data (rows, size) within a report. For example, change the report definition by introducing more aggressive filtering.
Limit the number of reports within a dashboard or a tab.
If you use data arithmetic operations, do not use date facts. Use date attributes instead.
Avoid disconnected date dimensions. If you need to use it, do not use facts. Use attributes instead. For details, see Date Attribute Arithmetic.
Avoid Mandatory User Filters, especially using the OVER TO clause. As an alternative, split your workspace into a few workspaces based on filtering criteria.
Avoid using nested CASE statements in metrics. A CASE statement forces calculations to be done for every single attribute that meets that condition. Anything that does not match the CASE conditions reaches its ELSE clause and has to be processed as well.
Avoid using IFNULL statements in metrics. IFNULL statements may result in complex outer joins on the underlying database, whose processing is very time consuming.
Make your LDM as flat as possible to avoid unnecessary joins on the underlying database.
Limit workspace cache invalidation by limiting the number of ETL processes running in your workspace (triggered by the /etl/pull2 resource or a GD_dataset_writer in CloudConnect). After an ETL process completes, workspace cache gets invalidated, and the reports needs to be re-computed to “warm up” multi-level workspace cache. Cache makes a a workspace run faster. A report called from cache is much faster than an un-cached report.
Simplify the dashboards: use fewer objects on one dashboard tab.
Limit the output of tabular reports. Having too many rows in a table causes JScript running long, and your browser may freeze for several seconds.
Avoid embedding pictures from a different source. Instead, merge them. It reduces JScript run time and lagging.
Avoid embedding GoodData workspaces into other workspaces. Avoid embedding reports one by one. If you need to use more GoodData iframes in the parent application, embed the dashboard instead. The client code is loaded into your browser for each used GoodData iframe.