Summary
In this chapter we've learned how to optimize the performance of our cube so our users' queries execute as quickly as possible. We've looked at how Analysis Services processes queries and what the roles of the Storage Engine and the Formula Engine are; we've seen how building partitions and aggregations can improve the performance of the Storage Engine, and we've also seen how to write MDX to ensure that the Formula Engine works as efficiently as possible. Last of all, we've seen how important caching is to overall query performance and what we need to do to ensure that we can cache data as often as possible, and we've discussed how to scale-out Analysis Services using network load balancing to handle large numbers of concurrent users.