I have been working on cube optimization techniques for some time now. And honestly I even got my job for the same requirement. Its actually interesting to work with team of highly qualified MSBI professionals and learn new things on the same field, you were very confident about.
I am starting this as a journal and hoping to cover more and more on the topic gradually. In this way we can achieve a more strong foundation on this topic.
In this post we will cover the aspects where Cube optimization can be applicable/tested actually.
Following are areas we think of when we talk about cube optimization:
- Decreased usual size of cube: we often come in situation where cube is created and being used but it takes a lot of space on server. Cube optimization is mostly focused on decreasing the cube size which can lead to more efficiency in different other areas as well (listed below).
- Decreased processing time of cube: this one is a catch and we always want to achieve. Decrease in processing time can also impact in limiting space of cube, good reporting time, more frequency of data processing. Mostly due to longer time period of processing we decrease frequency of processing and users see a great latency in the report data (talking about MOLAP).
- Fast Reporting: Optimizing MDXs only in SSRS reports cannot give you fast report, it must come from real source “the cube”. And reporting like excel are only as fast as a cube is. We need faster reports for that we need a faster cube.
- “Can you think of any more valid reason anymore?”
Well we can talk about many other less important aspects like Loads on servers, better architecture blah blah . . .but what I believe is in project whats most important aspect is “Client” nothing else is significant more.
Client doesn’t care about populous server till he gets the result and damn if he care about your architecture if he doesn’t get the result he expected. Harsh but true :P.
So I hope using most important aspects for cube optimization. I will start with one of them to cover simple and effective optimization techniques.
To start with, apologies to my friends and followers who keep an eye on the blog. It’s been a long time since I have written anything here. But I’ll try my best no gaps now on.
- So it’s a small requirement of creating one more Cube in same SSAS Solution. New cube should be same as the cube we have in solution, after getting this copy we can whatever necessary change required.
- Yeah I know this shouldn’t be too difficult to implement but guess what, I was not able to find a small and easy way mentioned anywhere. So I am giving you most obvious two options:
a) COPY and PASTE
It as simple as they say. See the initial solution outline in Fig 1:
Once you copy the cube (fig 1) and tries to paste it (fig 2) it asks for a new name (fig 3) and finally you get a new cube solution (fig 4).
|Fig 1||Fig 2|
|Fig 3||Fig 4|
b) Use CREATE XMLA
Connect to the cube using SSMS. Select the Cube you want to copy and Right-Click cube and select option Create XMLA for Cube.
Once you get the Cube XMLA in front of you, update two tags only. below is the figure that shows “Before” we updated the query which is actual cube XMLA, then “After” we updated the query which is what changes we need to do. And the changes are new cube Name and ID.
Execute your new query in SSMS and VOILA!! you get your new cube under same solution.
Now you can update this new cube for whatsoever reason you want.
But where is the climax here, What’s the point I am sharing this all, Is there anything interesting left in the post ??????? YES 🙂
When we created a copy of cube using second the Option; it creates the cube which you cannot process, which you can open at any BIDS solution.
So the learning is:
- Cube created from a copy of older should have different PERSPECTIVEs. Two or more cubes in same Solution/ database cannot have same perspectives. So in first Option COPY/PASTE, new cube is created with new name and same Name changes are done to Perspectives automatically (you can observe in solution. So you might want to change the name as per your requirement for perspectives.In second Option CREATE XMLA, we need to find the Perspective names and IDs in code and update those with new names. And then job is done.