【问题标题】:How to sum a calculated measure?如何对计算的度量求和?
【发布时间】:2013-06-26 13:13:12
【问题描述】:

我有一个相当复杂的计算度量,它完美地适用于多维数据集的每一行数据。但是,我需要逐行计算这些值的总和。但是计算度量的行为似乎在 Excel 中的小计和总计行中,它再次执行计算而不是对前面的行求和。有没有办法让计算的度量在每一行上执行它的计算,但他们在总计和小计中执行传统的 SUM?

提前致谢。

【问题讨论】:

    标签: ssas mdx data-warehouse olap ssas-2008


    【解决方案1】:

    计算的度量值不会聚合;每次都会计算。

    【讨论】:

      【解决方案2】:

      有一个解决方案,但那真的很难看:

      你必须使用类似的东西

      SCOPE([dim1].[hier1].[All]);
          [Measures].[MyCalculatedMeasure] = Sum([dim1].[hier1].[bottomlevel].Members, [Measures].[MyCalculatedMeasure]);
      END SCOPE;
      

      对于所有维度的所有层次结构,无论是属性还是用户层次结构,酌情替换dim1hier1bottomlevel

      【讨论】:

      • [All] 更可能是默认成员,基本上每个被计算的元组都会有很多计算度量;它如何与 solve_order 一起工作?将计算哪一个?
      • 您可以手动处理solve_order 和calculation_pass,但是Analysis Services 开发人员实施了一些启发式方法(例如“聚合”的优先级低于其他聚合),这使得AS 在简单的情况下易于使用,但确实很复杂在稍微复杂的情况下。见msdn.microsoft.com/en-us/library/ms145539(v=sql.110).aspx
      【解决方案3】:

      您需要模拟计算成员的真实度量行为。使用 Null 值进行虚拟实测,然后使用 Scope 在粒度级别上定义您的公式。更详细的答案请看这里:http://blog.crossjoin.co.uk/2013/05/29/aggregating-the-result-of-an-mdx-calculation-using-scoped-assignments/

      【讨论】:

        【解决方案4】:

        我找到了最简单的方法:

        1. 在 DSV 的相应度量表中创建一个新的命名计算。 (右键单击,添加新的命名计算并将其表达式设置为 CAST(NULL as [insert proper data type])。
        2. 将新命名的计算添加为多维数据集中的度量。
        3. 在多维数据集的计算区域切换到脚本视图并添加以下内容:

        ({[Measures].[您在步骤 1 中创建的命名计算]},Leaves())=您的复杂计算;

        这将定义设置在叶级别,并且所有聚合都可以正常工作。

        参考:http://sqlblog.com/blogs/mosha/archive/2005/02/13/performance-of-aggregating-data-from-lower-levels-in-mdx.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-19
          • 2018-04-01
          • 2013-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-11
          相关资源
          最近更新 更多