2010-07-26 78 views
0

我在尝试设置多维数据集计算。我目前的职责是收到汇率,并在月初发送。有时他们会在这个月内改变,我会收到一个用于该货币的汇率。递归日级计算的汇总

最初的问题是LastNonEmpty使用被质疑的粒度,这意味着当我查询大部分日子时没有汇率,所以计算失败。我取代了汇率的措施,初步形成了具有递归计算,但后来有以下几点:

WITH 
MEMBER [Measures].[EOD] 
AS 
    Aggregate({NULL:[Date].[Calendar Y M D].CurrentMember}, [Measures].[End Of Day Rate]) 

因此,在日期维度看时,它会得到最新的汇率。这使得每天的计算如下:

MEMBER [Measures].[Converted] 
AS 
    SUM 
    ( 
     {[Currency].[Currency].[Currency] * [Date].[Calendar Y M D].CurrentMember}, 
     (
      ( 
       [Measures].[Sales] 
      ) 
      /[Measures].[EOD] 
     ) 
    ) 

最后我用这个在查询:

SELECT 
{ 
    [Measures].[Converted] 
} 
ON COLUMNS, 
NON EMPTY 
{ 
    [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-01] : 
    [Date].[Calendar Y M D].[Calendar Day].&[2010-Q3-08-31] 
} 
ON ROWS 
FROM [Cube] 

这一切工作正常,但最好我宁愿由年/月来查询,因为这些是月末报告。我可以在代码层中总结所有这些,但我宁愿让MDX自己做。

问题是计算几乎在日期级递归完成,那么我希望他们卷到月份(甚至年份)级别。

我也尝试了货币转换向导,交换汇率上面的时间聚集之一,但尝试浏览多维数据集在SSMS锁定了服务器,因为它试图做聚合整个日历:(

有什么建议最好采用什么方法?

回答

1

如果您在DSV中使用视图或命名查询而不是表格,那么您可以调整视图或命名查询以将数据限制为您已加载交换的日期我不确定这是否会满足您的业务需求,但您可以通过这种方法消除空数据问题。毕竟,加载不包含数据的数据没有多大用处在一个值中,或者更糟糕的是,预先加载一个实际可用数字后必须重写的预期汇率。

+0

一个有趣的方法,但我认为它不会奏效 - 每天都会有数据需要转换,但每天不会有汇率 - 我需要使用数据的最新汇率,在一天的水平,回顾该货币的最新汇率。我想知道现在是否可以通过递归CTE视图来生成汇率... – Meff 2010-07-27 07:50:18

+0

OK,所以递归CTE的工作,我开始用我随后沿着日期向上走的汇率,使用我遇到的下一个汇率货币。最后4个CTE,1是递归的:o – Meff 2010-07-27 09:50:28