2016-08-15 107 views
0

我有創造這個MDX計算問題增量更新:MDX計算與事實表

  • 的產品隨着時間的推移知道我的事實表獲取價格更新增量平均價格;

爲了計算產品在某個時間點的平均價格,我必須查找所有產品的最新價格(並非所有產品都必須在此時間點獲得價格更新) 。

我的事實表看起來是這樣的:

F_Products

(Product_key,Date_Key,Price,flag_PriceChanged) 

Dim_Products

(Product_key,ProductID,Price) 

我有一個成功的解決這個用克里斯 - 韋伯的last ever non empty solution,但它極大地得到每當我將它應用於大集合時,速度會更慢的產品或在很長一段時間內。

,我用看起來像這樣計算:

CREATE MEMBER CURRENTCUBE.[Measures].DAYSTODATE AS 
IIF([Measures].[Price]=NULL, NULL, 
COUNT(NULL:[Date].[Date].CURRENTMEMBER)-1); 

CREATE MEMBER CURRENTCUBE.[Measures].HADSALE AS 
IIF([Measures].[Price]=NULL, NULL, MEASURES.DAYSTODATE);  

SCOPE([Measures].MAXDATE, [Date].[Date].[Date].MEMBERS);  
    THIS = MAX(NULL:[Date].[Date].CURRENTMEMBER, MEASURES.HADSALE);  
END SCOPE;  

CREATE MEMBER CURRENTCUBE.[Measures].LASTSALE AS 
IIF(ISEMPTY([Measures].MAXDATE), NULL, 
([Measures].[Sales Price], 
[Date].[Date].[Date].MEMBERS.ITEM(MEASURES.MAXDATE)));  

CREATE MEMBER CURRENTCUBE.[Measures].[Average Price Incl. VAT] 
AS 
IIF([Measures].HADSALE = NULL,NULL, 
    AVG([Dim Products].[Product ID].[Product ID],MEASURES.LASTSALE*1.25)); 

任何幫助,將不勝感激。

回答

0

我看到兩種方法可以加速這一過程:

  1. 在存期屬性Where子句:其中({NULL:[日期] [日期] [20160826]。})。
  2. 創建一個新的事實表和更新最新價格每個週期(天,周,月等),您可以查看您的報告。

你也可以用PeriodsToDate功能發揮,但它返回減慢你的計算反正。

+0

1.恐怕使用過濾的結果:{NULL:[日期] [日期] [20160826]}將使查詢更慢我已經使用日期過濾器,但在一個較小的範圍;還是雖然結果很慢(14天 - 一個月的時間) 2.我已經保存了每日更新的專用事實表;該報告必須每天進行更新 請隨意扔任何其他建議。 –

+0

1.您是否在過濾器中使用了LastNonEmpty價格?您必須使用LastNonEmpty聚合添加價格列中的度量。然後通過刪除LastNonEmpty邏輯來重寫MDX。這是一種更快的方式。 – user1464922