我在SSAS 2005中有一个立方体,用于计算数百万条记录的运行总和.当前实现在MDX中使用PeriodsToDate sum函数,并且速度非常慢,在某些情况下需要15分钟或更长时间才能返回结果.这个问题有很多解决方案,所以我希望其他人已经测试了其中的一些,可以节省我实施和测试每个问题的时间.
是否更喜欢使用游标在T-SQL中计算运行总和和滑动窗口类型计算(请不要使用Celko的交叉连接解决方案,我知道它们在纸上看起来不错,但是随着数据的增长,交叉连接解决方案非常慢),使用SSIS中的脚本任务(或者在集成服务中有更好的方法)或在Analysis Services中使用MDX吗?
还有其他想法吗?
我花了很长时间来弄清楚它在哪里工作,没有时间维度的层次结构.根据我的数据和我的立方体结构,这是我放在一起的内容:
with member [Measures].[RunningTotal] as 'sum({[Deferred Revenue Date].[Standard Calendar].CurrentMember.Level.Item(0):[Deferred Revenue Date].[Standard Calendar].CurrentMember}, [Measures].[Deferred Revenue Amount])' select {[Measures].[Deferred Revenue Amount] ,[Measures].[RunningTotal] } on columns, nonempty([Deferred Revenue Date].[Standard Calendar].[Date], [Measures].[Deferred Revenue Amount]) on rows from DW;
一个技巧是nonempty()子句,如果存在与维度和度量的交集,它将仅返回计算的度量列中的值.没有它,您将在measure列中获得一堆NULL,并在计算的measure列中获得一堆重复值.这实际上是一个非常方便的查询.
无论您在SELECT语句中指定的级别(无论是日期,月份还是年份),计算所得成员都将工作.在我的情况下,我试着尽可能接近你想要做的事情.我为我的立方体写了一个类似于你的查询,它在43秒内运行.这个新的在大约2秒内运行并且我们有相当多的数据,所以它也应该运行得更快,假设您已经构建了聚合等.
MDX的问题在于,有十八种方法可以做某事,只有一两种方法可以运行良好.
祝好运.