优化MDX查询

时间:2013-10-05 08:05:52

标签: query-optimization ssas mdx

我的查询中有两个需求 第一:根据我的尺度制作一个已排序的产品清单。销量较高的产品应首先出现。

ProductCode Sales                       
----------- ------------                                            
123          18     
332          17      
245          16          
656          15    

第二:在我的预分类产品清单上累积总和。

ProductCode   Sales      ACC                       
----------- ------------ ----                                            
123          18          18
332          17          35
245          16          51
656          15          66

我在MDX下面写了以达到上述目标:

WITH
 SET SortedProducts AS
     Order([DIMProduct].[ProductCode].[ProductCode].AllMEMBERS,[Measures]. [Sales],BDESC) 
 MEMBER [Measures].[ACC] AS
 Sum
    (
      Head
      (
       [SortedProducts],Rank([DIMProduct].[ProductCode].CurrentMember,[SortedProducts])      
      )
     ,[Measures].[Sales]
    ) 
SELECT  
      {[Measures].[Sales]  ,[Measures].[ACC]} 
   ON COLUMNS,
      SortedProducts
   ON ROWS 
 FROM [Model]

但是运行大约需要3分钟,有关如何优化代码的任何建议,还是正常的?

  

我共有9635个产品

1 个答案:

答案 0 :(得分:0)

如果你对谷歌进行快速研究,有不同的方法来实现它(这里也有很多答案)。

那就是说,我会试着用这种不同的方式来计算你的跑步总数

MEMBER [Measures].[SortedRank] AS Rank([Product].[Product].CurrentMember, [SortedProducts]) 
MEMBER [Measures].[ACC2] AS SUM(TopCount([SortedProducts], [Measures].[SortedRank]) ,[Measures].[Internet Sales Amount])

我不知道TopCount对于你的情况是否会比Head执行得更快,但是例如你在AdventureWorks多维数据集上我的测试机器上的查询使用Head或TopCount函数需要相同的时间。

希望这有帮助