当前位置:  开发笔记 > 数据库 > 正文

在Sql Server Analysis Services中计算消耗的运行总计的最有效方法是什么?

如何解决《在SqlServerAnalysisServices中计算消耗的运行总计的最有效方法是什么?》经验,为你挑选了1个好方法。

我在SSAS 2005中有一个立方体,用于计算数百万条记录的运行总和.当前实现在MDX中使用PeriodsToDate sum函数,并且速度非常慢,在某些情况下需要15分钟或更长时间才能返回结果.这个问题有很多解决方案,所以我希望其他人已经测试了其中的一些,可以节省我实施和测试每个问题的时间.

是否更喜欢使用游标在T-SQL中计算运行总和和滑动窗口类型计算(请不要使用Celko的交叉连接解决方​​案,我知道它们在纸上看起来不错,但是随着数据的增长,交叉连接解决方​​案非常慢),使用SSIS中的脚本任务(或者在集成服务中有更好的方法)或在Analysis Services中使用MDX吗?

还有其他想法吗?



1> 小智..:

我花了很长时间来弄清楚它在哪里工作,没有时间维度的层次结构.根据我的数据和我的立方体结构,这是我放在一起的内容:

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的问题在于,有十八种方法可以做某事,只有一两种方法可以运行良好.

祝好运.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有