在分析视图中查询在SAP HANA中创建意外结果

您尚未提供要实现的完整详细信息。请参考SAP OSS注释1993033错误的结果,以进行分析视图查询

在激活分析视图期间,将生成列视图。但是,有些列在此列视图中无法计算。在这种情况下,将在其顶部生成一个附加的计算视图。如果在分析视图中定义了以下元素,则必须执行计算视图的生成:

  • 输入参数

  • 计算属性

  • 单位或货币换算

如果在分析视图中定义了这些元素中的至少一个,则激活将创建一个OLAP和一个计算视图。运行时的查询始终指向计算视图,该视图自己从OLAP视图中检索数据。计算视图将获取已聚合的数据,并且对计算量度的查询可能会根据其公式和复杂性返回意外结果。

关于计算的度量的放置,存在三种可能性:

  • OLAP,聚合前的计算(必须在分析视图中明确标记)

  • OLAP,聚合后计算(默认行为)

  • 计算视图

如果公式使用计算属性,输入参数或其他需要计算视图的计算度量,则必须在计算视图中计算计算度量。

现在,查询的结果取决于公式及其计算位置。公式对于聚合可能是透明的,例如,如果公式将度量值乘以某个因子:CM1 = M1 * 1000

无论公式是在(求和)聚合之前还是之后计算,结果始终是相同的。

但是,这不适用于添加常数的公式,例如CM2 = M1 + 1

说明(例如,M1有10个值,每个值等于1000):

    汇总前的计算

    每个CM2的计算为1001,总和结果为10010

    汇总后的计算

    结果是10 * 1000 +1 = 10001

如果分析视图定义了计算量度,其中一些是在OLAP视图中计算的,而另一些是在计算视图中,则根据公式的不同,它们的混合可能很危险。

在分析视图中不与其聚合类型互换的计算量度会产生意外结果-取决于此视图上的特定查询。如果至少使用以下元素之一,则要求进行这种计算得出的量度的查询可能很危险:

    按定义计算组中的视图属性

    请求单位/货币换算措施

    要求计数不同的度量

    分析视图上的堆叠SQL查询,例如

SELECT SUM(CALC_MEASURE) FROM (

SELECT SUM(CALC_MEASURE),A

FROM AVIEW GROUP BY A)

      

解决方案-

如果将上述复杂查询用于如上 的分析视图,则需要谨慎处理计算的度量,并应将其移至需要在分析视图之上建模的其他计算视图。分析视图用作定义已计算度量的计算视图的数据源。具有选项“聚合前计算”的计算度量必须保留在分析视图中。