We use the below MDX code to do the Audit calculations but it's performing very poorly, Any suggestions would be greatly appreciated!! Currently this query takes 3 mins on a server and it's quite cpu/memory intensive.
I've tried replicating the query on Adventure Works - (Replicated query threw an out of memory exception on my laptop)
WITH MEMBER [Measures].[FIFO_Price] ASIIF([Measures].[Order Quantity] <> 0,[Measures].[Extended Amount]/[Measures].[Order Quantity],NULL)
MEMBER [Measures].[MPrice]AS
IIF([Measures].[Order Quantity] <> 0,[Measures].[Sales Amount]/[Measures].[Order Quantity],NULL)
MEMBER [Measures].[Cost difference] AS
abs([Measures].[MPrice] - [Measures].[FIFO_Price])
MEMBER [Measures].[Cost difference %] AS
IIF([Measures].[FIFO_Price] <> 0 , ABS(ROUND(([Measures].[Cost difference]/[Measures].[FIFO_Price])*100,2)),0)
MEMBER [Measures].[Cost difference Original] AS
([Measures].[MPrice] - [Measures].[FIFO_Price])
MEMBER [Measures].[COD] AS
([Measures].[Cost difference Original] * [Measures].[Order Quantity])
MEMBER [<1%pos] AS
IIF([Measures].[FIFO_Price] <> 0 AND [Measures].[MPrice] > 0 AND [Measures].[Order Quantity] > 0 AND
[Measures].[Cost difference %] < 1.0,
SUM(DESCENDANTS([Customer].[Customer Geography].CurrentMember, [Customer].[Customer Geography].[Customer])
,[Measures].[COD])
,NULL)
MEMBER [1-5%pos] AS
IIF([Measures].[FIFO_Price] <> 0 AND [Measures].[MPrice] > 0 AND [Measures].[Order Quantity] > 0 AND
[Measures].[Cost difference %] >= 1.0 AND [Measures].[Cost difference %] <= 5.0,
SUM(DESCENDANTS([Customer].[Customer Geography].CurrentMember, [Customer].[Customer Geography].[Customer])
,[Measures].[COD])
,NULL)
MEMBER [5-10%poslow] AS
IIF([Measures].[FIFO_Price] <> 0 AND [Measures].[MPrice] > 0 AND [Measures].[Order Quantity] > 0 AND
[Measures].[Cost difference %] >= 5.0 AND [Measures].[Cost difference %] <= 10.0,
SUM(DESCENDANTS([Customer].[Customer Geography].CurrentMember, [Customer].[Customer Geography].[Customer])
,[Measures].[COD])
,NULL)
MEMBER [>10%poshigh] AS
IIF([Measures].[FIFO_Price] <> 0 AND [Measures].[MPrice] > 0 AND [Measures].[Order Quantity] > 0 AND
[Measures].[Cost difference %] > 10.0,
SUM(DESCENDANTS([Customer].[Customer Geography].CurrentMember, [Customer].[Customer Geography].[Customer])
,[Measures].[COD])
,NULL)
SELECT {([Measures].[Cost difference %]),([Measures].[Cost difference Original]),
([<1%pos]),([1-5%pos]),([5-10%poslow]),([>10%poshigh]),([Measures].[Sales Amount])
} ON 0
,FILTER(NONEMPTY(
({DESCENDANTS([Customer].[Customer Geography].[Country].&[United States], [Customer].[Customer Geography].[Customer])}
+{DESCENDANTS([Customer].[Customer Geography].[Country].&[Canada], [Customer].[Customer Geography].[Customer])}
+{DESCENDANTS([Customer].[Customer Geography].[Country].&[United Kingdom], [Customer].[Customer Geography].[Customer])}
)
* [Product].[Product Categories].[Product]),
ROUND( [Measures].[Sales Amount],4) <>0) ON 1
FROM [Adventure Works];
Thanks in advance.