Database Journal
MS SQL Oracle DB2 Access MySQL PostgreSQL Sybase PHP SQL Etc SQL Scripts & Samples Tips Database Forum Rss Feed

» Database Journal Home
» Database Articles
» Database Tutorials
MS Access
SQL Scripts & Samples
» Database Forum
» Slideshows
Free Newsletters:

News Via RSS Feed

Rss Feed

Database Journal |DBA Support |SQLCourse |SQLCourse2

Featured Database Articles


Posted Dec 13, 2004

Introduction to MSSQL Server 2000 Analysis Services: Semi-Additive Measures and Periodic Balances - Page 4

By William Pearson

Finally, we will expand the Time dimension to make the workings of our Stock Level measure readily apparent, with regard to how it accumulates value over time.

20.  Right-click the Year heading over the Row Axis.

21.  Select Drill Down from the context menu that appears, as depicted in Illustration 17.

Illustration 17: Select Drill Down to Expand the Year Level - Time Dimension

The Year level expands, revealing the underlying Quarter level.

22.  Drill down on the Quarter level, just as we did for the Year level above.

The Data Grid now resembles that shown in Illustration 18.

Illustration 18: Data Grid - Drilled to Month Level

Let's take a look at a zoom of a single year to get a feel for what is happening in our Data Grid. As we can see from the two annotated examples below, the Year 1997 Total (the "sum of the 2's," in Illustration 19) is a simple total of the four Quarters that make it up, and the Q1 Total (the "sum of the 1's," in Illustration 19), represents a simple total of its member Months 1, 2, and 3. This behavior is consistent throughout the dataset, although we use Year 1997 only in our examples in Illustration 19.

Illustration 19: Fully Additive Behavior of Stock Level in Our DataSet (Year 1997 Only)

While this simple summing would be quite appropriate for many measures (such as sales, expense, and other common income statement accounts, among others), semi-additive measures such as Stock Level do not, as we have discussed, appropriately add up in this way. For this reason, we need to make an adjustment in our calculated member that takes into consideration the fact that we wish to present the balance at the end of each time period as that of the last member of the respective period (say Month 3 of Q1, or Q4 of Year 1997, in our two illustrated examples above),

Let's make our adjustment now, and ascertain the correct results with the modified Stock Level calculated member.

23.  Right-click the Stock Level calculated member.

24.  Select Edit from the context menu that appears.

25.  Modify the Value expression to the following:

(ClosingPeriod([Month]),[Measures].[Units Ordered]) - 

    (ClosingPeriod([Month]),[Measures].[Units Shipped])

26.  Click the Check button, to the upper right of the Value expression box, to perform a simple syntax check, once again.

Analysis Manager generates a message box, indicating that "Syntax is OK", once more. (If this is not the result, check your syntax input).

27.  Click OK, to close the message box.

The Calculated Member Builder appears, with our modifications, as depicted in Illustration 20.

Illustration 20: Calculated Member Builder with Our Modifications (Compact View)

28.  Click OK, to accept our input and close the Calculated Member Builder.

The Calculated Member Builder closes, and we are returned to the Data view of the Cube Editor. The Data Grid should reappear, with new values to reflect our changes, as shown in Illustration 21.

Illustration 21: New Values in the Data Grid ...

A quick review of the values reveals that we have, indeed, accomplished our objective, modifying the behavior of Stock Level measure to reflect its intended, semi-additive nature. As we see in the subset of the data, wherein we highlight parallel examples to those we noted above, the balance found in the "last" member (for both Quarter and Year) is the value retained as the "final" balance of the respective parent.

Illustration 22: Semi-Additive Behavior of Stock Level in Our DataSet (Year 1997 Only, Again)

NOTE: For more information on the ClosingPeriod() function, see my Database Journal article MDX Time Series Functions, Part II: The OpeningPeriod () and ClosingPeriod() Functions.

29.  Select File --> Exit to leave the Cube Editor, when ready (saving the cube, when prompted).

We are returned to the Analysis Manager console.

30.  Select File --> Exit to leave Analysis Services, when desired.


In this article, we explored the nature and management of semi-additive measures, creating a calculated measure that is not fully additive, to meet the business requirements of a hypothetical group of information consumers. After discussing the nature of semi-additive measures, and describing uses for which they are appropriately employed, we created and processed a copy of the Warehouse sample cube in preparation for our practice example. We next established an illustrative set of business requirements as a specification for creating a semi-additive measure (a calculated member) in our practice cube.

We explored an initial approach to creating a simple inventory balance calculated measure, and explained why it was ineffective for our needs, due to its fully additive nature. We then modified the calculated measure to exhibit the desired semi-additive behavior of an inventory balance measure. Throughout the practice example, we discussed the results datasets obtained, within each of the steps we undertook to meet the expressed business requirements, verifying the effectiveness of our final solution.

» See All Articles by Columnist William E. Pearson, III

Discuss this article in the MSSQL Server 2000 Analysis Services and MDX Topics Forum.

MS SQL Archives

Latest Forum Threads
MS SQL Forum
Topic By Replies Updated
SQL 2005: SSIS: Error using SQL Server credentials poverty 3 August 17th, 07:43 AM
Need help changing table contents nkawtg 1 August 17th, 03:02 AM
SQL Server Memory confifuration bhosalenarayan 2 August 14th, 05:33 AM
SQL Server Primary Key and a Unique Key katty.jonh 2 July 25th, 10:36 AM