通过通用计算度量排序会导致无限递归? (MDX)

时间:2012-09-13 14:20:08

标签: ssas mdx olap ssas-2008

我需要编写一个计算的度量,与任何给定维度的总和相比,显示Measure1的份额。我设法做到了这样:

CREATE MEMBER CURRENTCUBE.[Measures].[Test] AS
  [Measures].[Measure1] / ( AXIS( 1 ).ITEM( 0 ).DIMENSION.LEVELS( 0 ).ITEM( 0 ), [Measures].[Measure1] )

但由于[Test]的通用性质,无法按此方式订购维度。

SELECT [Measures].[Measure1] ON 0,
ORDER( [Dimension1].MEMBERS, [Measures].[Test] ) ON 1
FROM [MyCube]

执行上述代码会导致以下错误:

  

检测到无限递归。依赖循环是:测试 - >测试

这是合乎逻辑的 - 要获得AXIS( 1 ).ITEM( 0 ),我们在轴1上需要一组维度成员,但在成员按[Test]排序之前,无法获得此集合。

另一方面,如果我将[Test]定义为特定于某个维度,则按预期工作:

CREATE MEMBER CURRENTCUBE.[Measures].[Test] AS
  [Measures].[Measure1] / ( [Dimension1].[All], [Measures].[Measure1] )

它有效,因为[Dimension1].[All]对特定成员进行了寻址,而不需要轴1首先评估其成员集。

有没有办法让这个计算的衡量标准通用?也许,有可能以另一种方式获得当前维度的[All]成员吗?

1 个答案:

答案 0 :(得分:0)

如果您只显示一个度量,则可以重写第一个查询以避免错误:

SELECT [Measures].[Measure1] ON 0,
ORDER([Dimension1].MEMBERS) ON 1
FROM [MyCube]
WHERE ([Measures].[Test])