我在创建此MDX计算时遇到问题:
为了计算某个时间点的产品平均价格,我必须回顾所有产品的最新价格(并非所有产品都必须在那个时间点获得价格更新)。
我的事实表看起来像这样:
F_Products
(Product_key,Date_Key,Price,flag_PriceChanged)
Dim_Products
(Product_key,ProductID,Price)
我使用Chris Webb的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 :(得分:0)
我认为有两种方法可以加快速度:
您也可以使用PeriodsToDate功能,但它会返回设置,这会减慢您的计算速度。