1

私のクエリには 2 つのニーズがあります First : 私の measure.product に基づいて並べ替えられた製品リストを作成し、売上高が最初に表示されるようにする必要があります。

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

2 番目: 事前に並べ替えられた製品リストに累積合計を表示します。

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 に答える