If you’re an SSAS Multidimensional developer, you’ll know that not every dimension has to have a relationship with every measure group in your cube. You may also know that by setting the Granularity Attribute property of a regular relationship, you can join a dimension to a measure group using an attribute that isn’t the dimension’s key attribute. What happens when you make a scoped assignment to a non-calculated measure outside the granularity of a measure group?
The simple answer is that, unlike what happens when you assign to a non-calculated measure inside the granularity of a measure group, your assigned value does not aggregate up. For example, consider a dimension called Demo Dim with one user hierarchy, where there is just one member on each level:
If you add this dimension to a cube but don’t define any relationships to any measure groups (and don’t change the IgnoreUnrelatedDimensions property of the measure group) you’ll see the value of the All Member on the hierarchy repeated across all of the other members of the hierarchy:
If you use a scoped assignment to change the value of the member D for a regular, non-calculated measure M1, like so:
[sourcecode language=”text” padlinenumbers=”true”]
SCOPE([Measures].[M1], [Demo Dim].[L4].&[D]);
THIS = 999;
You’ll see that D changes value, but the value isn’t aggregated up:
The same thing happens if you make an assignment below the granularity attribute of a dimension. This all makes sense when you think about it, in my opinion, and it means that in this scenario at least non-calculated measures and calculated measures behave in the same way.
One last word of warning: whenever I’ve done this, I’ve found that query performance hasn’t always been as good as I would have liked.