1

我的查询中有两个需求首先:根据我的度量有一个排序的产品列表。销售量较高的产品应该首先出现。

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 个产品

4

1 回答 1

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 函数需要相同的时间。

希望这可以帮助

于 2013-10-07T10:39:23.623 回答