1

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

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

例如 [Measures].[Other Qual Count] 会给我某种类型的资格数量。每个人可以有多个,因此 [Measures].[Other Qual Count] > 1 对于一个人。

但是,在我的总结报告中,我想将此表示为每人仅 1 个。(注明具有其他资格的人数。)

摘要报告针对一些其他维度汇总值,包括未知区域层次结构(它可以是 3 个层次结构之一)。

我这样做如下:

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

但是,我必须创建更多派生措施 - 相互派生,并且都在 Person 级别,以避免不必要的多重计数。查询从 <1 秒减慢到 1min+(我的目标是 <3s)。

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

我也尝试过创建一个 Cube Calculation,但这给了我与 [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 并在接近截止日期时遇到了这个问题,所以我试图在不更改多维数据集的情况下尽可能完成这项工作。

4

1 回答 1

1

我通过更改立方体解决了这个问题,这比预期的要简单。

在数据源视图中,我创建了一个命名查询,它总结了个人级别的现有事实表。我还派生了报告中需要的所有列。

将此命名查询视为单独的事实表,我为它添加了一个度量值组,这解决了我的所有问题。

于 2012-04-26T10:10:18.900 回答