SAP HANA - 计算列中的计算

时间:2017-02-23 05:59:24

标签: view sap data-modeling calculated-columns hana

是否可以在计算视图中创建计算列,如下所示:

Table A

Month       Amount

1           1000

1           2000

2           3000

2           3500


filter month={CurrentMonth}; // here CurrentMonth= 2

输出

[{
previousMnthAmount:3000,

currentMnthAmount:6500
}]

2 个答案:

答案 0 :(得分:0)

我建议创建一个脚本计算视图。在其中,您可以编写SQLScript代码,以便根据需要进行必要的选择以获取数据。

根据您要使用视图的内容,我看到两个选项:

  1. 没有输入参数。
  2. 使用输入参数。
  3. 如果您使用输入参数查看视图,如果您真的只对相应于一个月的数据感兴趣,则可以避免一些不必要的计算。

    没有参数

    以下内容应该有效:

    SELECT "T1"."MONTH", "T1"."TOTAL" AS "CURRENT_TOTAL", "T2"."TOTAL" AS "PREVIOUS_TOTAL" 
     FROM (SELECT "MONTH", SUM("AMOUNT") AS "TOTAL" FROM #TEST GROUP BY "MONTH") AS "T1" 
     LEFT JOIN (SELECT "MONTH", SUM("AMOUNT") AS "TOTAL" FROM #TEST GROUP BY "MONTH") AS "T2" 
     ON "T1"."MONTH" = "T2"."MONTH" + 1;
    

    你应该用自己的表替换#TEST。假设以下是您的表的内容: Raw table content

    然后您将获得以下结果: Result without parameters

    如果你把它包装成一个视图,那么你可以从中选择并做一个WHERE" MONTH" = 2并获得第2个月的值。

    带参数

    您可以通过完全删除连接并执行过滤的总和来优化sql:

    SELECT (SELECT SUM("AMOUNT") FROM #TEST WHERE "MONTH" = 2) AS "CURRENT_TOTAL", 
     (SELECT SUM("AMOUNT")  FROM #TEST WHERE "MONTH" = 1) AS "PREVIOUS_TOTAL" FROM DUMMY;
    

    当然,在一个计算中。您应该使用参数(例如2 - >:IV_MONTH和1 - >:IV_MONTH - 1)替换固定月份值(2和1)。使用与上面相同的内容,您将获得以下结果:

    Result with parameters

答案 1 :(得分:0)

我不确定问题的背景,对于您尝试解决的实际问题,这可能不是一个合适的答案。如果没有道歉:-)

如果这是一个数据仓库实现,并且您希望在前端报告中获得该信息,则更通用的方法是在时间维度中具有更新的current_month和previous_month标志日常。然后,您可以在计算或报告前端使用它们。

然后,这将适用于任何视图,而不是为该情况创建特定视图。