Friday, February 24, 2012

Calculations: Division calculation is returning incorrect results

Hi everyone,

I created the following simple MDX query containing a Division calculation (listed below):

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CREATE MEMBER [Adventure Works].[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54] AS ( [Employee].[Employee].[All Employees] ) / ( [Employee].[Employee].&[290] ) , SOLVE_ORDER = 1
GO
SELECT
[Delivery Date].[Date].MEMBERS DIMENSION PROPERTIES MEMBER_NAME, MEMBER_TYPE, DESCRIPTION, PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON COLUMNS ,
{[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54],[Employee].[Employee].MEMBERS} DIMENSION PROPERTIES MEMBER_NAME, MEMBER_TYPE, DESCRIPTION, PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON ROWS
FROM [Adventure Works]
GO
DROP MEMBER [Adventure Works].[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54]

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

When executing the query, I noticed that some of the values of the calculation were incorrect (which I verified by hand calculating the expected result). I noticed that the value becomes wrong starting at the "July 13, 2002" column until the end of the row. Oddly enough, though, when I add the "NON EMPTY" keywords to remove nulls from both axes and explicitly specify each hierarchy's default members for the slice, the calculation then returns the correct value:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

CREATE MEMBER [Adventure Works].[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54] AS ( [Employee].[Employee].[All Employees] ) / ( [Employee].[Employee].&[290] ) , SOLVE_ORDER = 1
GO
SELECT
NON EMPTY [Delivery Date].[Date].MEMBERS DIMENSION PROPERTIES MEMBER_NAME, MEMBER_TYPE, DESCRIPTION, PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON COLUMNS ,
NON EMPTY {[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54],[Employee].[Employee].MEMBERS} DIMENSION PROPERTIES MEMBER_NAME, MEMBER_TYPE, DESCRIPTION, PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME ON ROWS
FROM [Adventure Works]
WHERE
( [Account].[Account].defaultmember, [Account].[Account Number].defaultmember, [Account].[Account Type].defaultmember, [Account].[Accounts].defaultmember, [Customer].[Address].defaultmember, [Customer].[City].defaultmember, [Customer].[Commute Distance].defaultmember, [Customer].[Country].defaultmember, [Customer].[Customer].defaultmember, [Customer].[Customer Geography].defaultmember, [Customer].[Education].defaultmember, [Customer].[Email Address].defaultmember, [Customer].[Gender].defaultmember, [Customer].[Home Owner].defaultmember, [Customer].[Marital Status].defaultmember, [Customer].[Number of Cars Owned].defaultmember, [Customer].[Number of Children At Home].defaultmember, [Customer].[Occupation].defaultmember, [Customer].[Phone].defaultmember, [Customer].[Postal Code].defaultmember, [Customer].[State-Province].defaultmember, [Customer].[Total Children].defaultmember, [Customer].[Yearly Income].defaultmember, [Date].[Calendar].defaultmember, [Date].[Calendar Quarter of Year].defaultmember, [Date].[Calendar Semester of Year].defaultmember, [Date].[Calendar Year].defaultmember, [Date].[Date].defaultmember, [Date].[Day Name].defaultmember, [Date].[Day of Month].defaultmember, [Date].[Day of Week].defaultmember, [Date].[Day of Year].defaultmember, [Date].[Fiscal].defaultmember, [Date].[Fiscal Quarter of Year].defaultmember, [Date].[Fiscal Semester of Year].defaultmember, [Date].[Fiscal Year].defaultmember, [Date].[Month of Year].defaultmember, [Date].[Week of Year].defaultmember, [Delivery Date].[Calendar].defaultmember, [Delivery Date].[Calendar Quarter of Year].defaultmember, [Delivery Date].[Calendar Semester of Year].defaultmember, [Delivery Date].[Calendar Year].defaultmember, [Delivery Date].[Day Name].defaultmember, [Delivery Date].[Day of Month].defaultmember, [Delivery Date].[Day of Week].defaultmember, [Delivery Date].[Day of Year].defaultmember, [Delivery Date].[Fiscal].defaultmember, [Delivery Date].[Fiscal Quarter of Year].defaultmember, [Delivery Date].[Fiscal Semester of Year].defaultmember, [Delivery Date].[Fiscal Year].defaultmember, [Delivery Date].[Month of Year].defaultmember, [Delivery Date].[Week of Year].defaultmember, [Department].[Departments].defaultmember, [Destination Currency].[Destination Currency].defaultmember, [Destination Currency].[Destination Currency Code].defaultmember, [Employee].[Department Name].defaultmember, [Employee].[Email Address].defaultmember, [Employee].[Emergency Contact Name].defaultmember, [Employee].[Emergency Contact Phone].defaultmember, [Employee].[Employee Department].defaultmember, [Employee].[Employees].defaultmember, [Employee].[End Date].defaultmember, [Employee].[Gender].defaultmember, [Employee].[Hire Date].defaultmember, [Employee].[Hire Year].defaultmember, [Employee].[Marital Status].defaultmember, [Employee].[Pay Frequency].defaultmember, [Employee].[Phone].defaultmember, [Employee].[Salaried Flag].defaultmember, [Employee].[Sales Person Flag].defaultmember, [Employee].[Sick Leave Hours].defaultmember, [Employee].[Start Date].defaultmember, [Employee].[Status].defaultmember, [Employee].[Title].defaultmember, [Employee].[Vacation Hours].defaultmember, [Geography].[City].defaultmember, [Geography].[Country].defaultmember, [Geography].[Geography].defaultmember, [Geography].[Postal Code].defaultmember, [Geography].[State-Province].defaultmember, [Internet Sales Order Details].[Carrier Tracking Number].defaultmember, [Internet Sales Order Details].[Customer PO Number].defaultmember, [Internet Sales Order Details].[Internet Sales Orders].defaultmember, [Internet Sales Order Details].[Sales Order Line].defaultmember, [Internet Sales Order Details].[Sales Order Number].defaultmember, [Measures].defaultmember, [Organization].[Currency Code].defaultmember, [Organization].[Organizations].defaultmember, [Product].[Category].defaultmember, [Product].[Class].defaultmember, [Product].[Color].defaultmember, [Product].[Days to Manufacture].defaultmember, [Product].[Dealer Price].defaultmember, [Product].[End Date].defaultmember, [Product].[Large Photo].defaultmember, [Product].[List Price].defaultmember, [Product].[Manufacture Time].defaultmember, [Product].[Model Name].defaultmember, [Product].[Product].defaultmember, [Product].[Product Categories].defaultmember, [Product].[Product Key].defaultmember, [Product].[Product Line].defaultmember, [Product].[Product Model Categories].defaultmember, [Product].[Product Model Lines].defaultmember, [Product].[Reorder Point].defaultmember, [Product].[Safety Stock Level].defaultmember, [Product].[Size].defaultmember, [Product].[Size Range].defaultmember, [Product].[Standard Cost].defaultmember, [Product].[Start Date].defaultmember, [Product].[Status].defaultmember, [Product].[Stock Level].defaultmember, [Product].[Style].defaultmember, [Product].[Subcategory].defaultmember, [Product].[Weight].defaultmember, [Promotion].[Discount Percent].defaultmember, [Promotion].[End Date].defaultmember, [Promotion].[Max Quantity].defaultmember, [Promotion].[Min Quantity].defaultmember, [Promotion].[Promotion].defaultmember, [Promotion].[Promotion Category].defaultmember, [Promotion].[Promotion Type].defaultmember, [Promotion].[Promotions].defaultmember, [Promotion].[Start Date].defaultmember, [Reseller].[Address].defaultmember, [Reseller].[Annual Revenue].defaultmember, [Reseller].[Annual Sales].defaultmember, [Reseller].[Bank Name].defaultmember, [Reseller].[Business Type].defaultmember, [Reseller].[First Order Year].defaultmember, [Reseller].[Last Order Year].defaultmember, [Reseller].[Min Payment Amount].defaultmember, [Reseller].[Min Payment Type].defaultmember, [Reseller].[Number of Employees].defaultmember, [Reseller].[Order Frequency].defaultmember, [Reseller].[Order Month].defaultmember, [Reseller].[Phone].defaultmember, [Reseller].[Product Line].defaultmember, [Reseller].[Reseller].defaultmember, [Reseller].[Reseller Bank].defaultmember, [Reseller].[Reseller Order Frequency].defaultmember, [Reseller].[Reseller Order Month].defaultmember, [Reseller].[Reseller Type].defaultmember, [Reseller].[Year Opened].defaultmember, [Reseller Sales Order Details].[Carrier Tracking Number].defaultmember, [Reseller Sales Order Details].[Customer PO Number].defaultmember, [Reseller Sales Order Details].[Reseller Sales Orders].defaultmember, [Reseller Sales Order Details].[Sales Order Line].defaultmember, [Reseller Sales Order Details].[Sales Order Number].defaultmember, [Sales Channel].[Sales Channel].defaultmember, [Sales Reason].[Sales Reason].defaultmember, [Sales Reason].[Sales Reason Type].defaultmember, [Sales Reason].[Sales Reasons].defaultmember, [Sales Summary Order Details].[Carrier Tracking Number].defaultmember, [Sales Summary Order Details].[Customer PO Number].defaultmember, [Sales Summary Order Details].[Sales Order Line].defaultmember, [Sales Summary Order Details].[Sales Order Number].defaultmember, [Sales Summary Order Details].[Sales Orders].defaultmember, [Sales Territory].[Sales Territory].defaultmember, [Sales Territory].[Sales Territory Country].defaultmember, [Sales Territory].[Sales Territory Group].defaultmember, [Sales Territory].[Sales Territory Region].defaultmember, [Scenario].[Scenario].defaultmember, [Ship Date].[Calendar].defaultmember, [Ship Date].[Calendar Quarter of Year].defaultmember, [Ship Date].[Calendar Semester of Year].defaultmember, [Ship Date].[Calendar Year].defaultmember, [Ship Date].[Date].defaultmember, [Ship Date].[Day Name].defaultmember, [Ship Date].[Day of Month].defaultmember, [Ship Date].[Day of Week].defaultmember, [Ship Date].[Day of Year].defaultmember, [Ship Date].[Fiscal].defaultmember, [Ship Date].[Fiscal Quarter of Year].defaultmember, [Ship Date].[Fiscal Semester of Year].defaultmember, [Ship Date].[Fiscal Year].defaultmember, [Ship Date].[Month of Year].defaultmember, [Ship Date].[Week of Year].defaultmember, [Source Currency].[Source Currency].defaultmember, [Source Currency].[Source Currency Code].defaultmember )
GO
DROP MEMBER [Adventure Works].[Employee].[Employee].[All Employees].[BDA13F64-E5D5-418B-A4,A6,1F,C5,B8,44,2,54]

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Any insight into this problem would be much appreciated.

Jon

Do you think that we dont have nothing to do?!

...

|||Sorry, just trying to not leave out any details that would be helpful The
second (longer) MDX query is just to show how I managed to get correct results.

Jon

No comments:

Post a Comment