我正试图建立一个立方体计算。我目前的汇款是收到汇率,这些汇率将在月初寄出。有时他们会在一个月内改变,我会收到一个汇率,用于该货币。
最初的问题是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中浏览多维数据集时锁定了服务器,因为它尝试对整个日历进行聚合:(
对什么方法最好采取有什么建议吗?