SSAS多维数据集计算总结了较粗略的另一项措施

时间:2012-04-25 09:08:19

标签: scope ssas mdx measure

使用SQL Server 2008 R2,我遇到了使用SQL Server 2008 R2进行摘要报告的MDX度量计算的性能问题。

我有一个Person维度,以及一个包含每人多个记录的相关事实表。 (资格)

例如[Measures]。[Other Qual Count]会给我一定数量的资格。 每个人都可以有多个,所以[测量]。[其他质量计数]> 1人为一人。

然而,在我的总结报告中,我想表明这只是每人1。 (表明具有其他资格的人数。)

摘要报告将值与其他一些维度相对应,包括未知的Region层次结构(可以是3个层次结构中的一个)。

我这样做了如下:

MEMBER [Measures].[Other Count2]
AS
SUM(
    EXISTING [Person].[Staff Code].[Staff Code].Members,
    IIF([Measures].[Other Count] > 0, 1, NULL)
)

但是,我必须创建几个派生的度量 - 相互派生,并且在Person级别都可以避免不必要的多重计数。查询从<1秒减慢到1分钟+(我的目标是&lt; 3s)。

所有推导的原因都是很多逻辑,以确定报告一个人的6个互斥列中的哪一个。

我还试图创建一个多维数据集计算,但这给了我与[Other Count]相同的值。

SCOPE (({[Person].[Staff Code].[Staff Code].MEMBERS}, [Measures].[Has Other Qual]));
    THIS = ([Person].[Staff Code].[Staff Code], [Measures].[Has Other Qual]).Count;
END SCOPE; 

是否可以使用更好的MDX / Cube计算,或者有关提高性能的任何建议?

不幸的是,我第一次使用MDX并在接近截止日期时遇到了这个问题,所以我试图在没有更改多维数据集的情况下使这项工作成功。

1 个答案:

答案 0 :(得分:1)

我通过更改多维数据集解决了这个问题,这比预期的要简单。

在数据源视图中,我创建了一个命名查询,该查询总结了Person级别的现有事实表。我还得出了我在报告中需要的所有专栏。

将此命名查询作为单独的事实表处理,我为其添加了一个度量值组,并解决了我的所有问题。