我花了一点时间来弄清楚它在时间维度上有没有层次结构的情况下可以工作。根据我的数据和我的多维数据集结构,这是我放在一起的内容:
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() 子句,如果维度和度量有交集,它只会在计算的度量列中返回值。没有它,您将在度量列中得到一堆 NULL,在计算的度量列中得到一堆重复值。这实际上是一个非常方便的查询。
无论您在 SELECT 语句中指定的级别如何,无论是日期、月份还是年份,计算的成员都将起作用。就我而言,我尝试约会尽可能接近你想要做的事情。我为我的多维数据集编写了一个类似于您的查询,它在 43 秒内运行。这个新的运行大约 2 秒,我们有相当多的数据,所以它也应该运行得更快,假设你已经构建了聚合等。
MDX 的问题是有十八种方法可以做某事,但只有一两种可以运行良好。
祝你好运。