【问题标题】:Performance of calculated members in SSASSSAS 中计算成员的性能
【发布时间】:2013-10-09 15:20:49
【问题描述】:

我们在 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 的新手,所以我想知道我们是否只是遇到了系统的边界,或者是否有任何方法可以提高效率?我们需要它来处理超过 100 万条记录,所以我们想知道这是否是要走的路。

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

【问题讨论】:

    标签: c# ssas mdx


    【解决方案1】:

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

    【讨论】:

    • 它现在按预期工作。这比添加一个简单的属性要困难一些,因为它是一个多对多的关系。我需要向将“Bedrijven”(公司)链接到列表的多维数据集添加一个新的维度和度量值组。当用户上传新列表时,使用 2 个 XMLA 命令将数据添加到多维数据集,一个用于列表维度,一个用于度量值组(ProcessAdd 模式)。
    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多