SSAS中计算成员的表现

时间:2013-10-09 15:20:49

标签: c# ssas mdx

我们在MS SQL Server 2008 R2中使用SSAS来存储包含公司数据的多维数据集。我们使用此多维数据集作为Web应用程序中透视网格的数据源,并生成“市场渗透”报告。

用户可以上传公司ID列表。 ID存储在数据库中。

当用户想要生成“市场渗透”报告时,他或她必须指定一个充当“选择”的列表和一个充当“市场”的列表。

提交后,两个列表的ID最终都是多维数据集中的计算成员,使用这样的MDX语句:

CREATE MEMBER [Prospects].[Measures].[selectids] AS COALESCEEMPTY(SUM( {
  [Dim Bedrijf].[BronId].&[1234], [Dim Bedrijf].[BronId].&[1235],
  ...., [Dim Bedrijf].[BronId].&[3456]}, [Measures].[Fact Bedrijven Count] ),0)

创建这些成员后,会创建更多成员来计算报表中的指标(使用已在多维数据集中定义的成员和维度)。最后,有一个select语句返回必要的数据。

当任一列表中的ID数小于100k时,此方法正常。如果数字变大,我们就会开始出现超时错误。超时设置为1小时(报告在与Web应用程序分开的win服务中生成)。

我还是SSAS的新手,所以我想知道我们是否刚刚进入系统的界限,或者是否有任何方法可以提高效率?我们需要能够处理超过1M条记录,因此我们想知道这是否可行。

希望我很清楚,但如果我不喜欢,请告诉我。

1 个答案:

答案 0 :(得分:0)

您遇到了Analysis Services的一个性能问题:过度使用计算成员,特别是如果您引用了很多单个成员,会降低查询时间。我建议您在[Dim Bedrijf]维度上创建另一个属性,该属性将您在计算中拥有的成员分组。这样就可以完全避免计算成员的需要,因为您可以选择适当的属性成员和基本度量[Measures].[Fact Bedrijven Count]。当然,这意味着在ETL /关系建模方面需要更多努力。但它会在查询运行时以非常好的性能奖励您。