SAP HANA - 计算列中的计算
SAP HANA - Calculations in calculated columns
是否可以在计算视图中创建一个计算列,如下所示:
Table A
Month Amount
1 1000
1 2000
2 3000
2 3500
filter month={CurrentMonth}; // here CurrentMonth= 2
输出
[{
previousMnthAmount:3000,
currentMnthAmount:6500
}]
我建议创建一个脚本计算视图。在其中,您可以编写 SQLScript 代码来执行必要的 selects 以根据需要获取数据。
我看到两个选项,具体取决于您要将视图用于什么目的:
- 没有输入参数。
- 带输入参数。
如果你选择带参数的视图,如果你真的只对一个月对应的数据感兴趣,可能会避免一些不必要的计算。
无参数
以下内容应该有效:
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 替换为您自己的table。假设以下是你的table的内容:
那么你会得到如下结果:
如果将其包装到视图中,则可以从中 select 并执行 WHERE "MONTH" = 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 和 1)替换为参数(例如 2 --> :IV_MONTH 和 1 --> :IV_MONTH - 1)。与上面相同的内容,您将得到以下结果:
我不确定问题的上下文,对于您要解决的实际问题,这可能不是一个合适的答案。抱歉,如果没有 :-)
如果这是一个数据仓库实现,并且您希望在前端报告中获得该信息,则更通用的方法是使用 current_month 和 previous_month 时间维度中每天更新的标志。然后您可以在计算或报告前端中使用它们。
然后这将适用于任何视图,而不是为那种情况创建特定视图。
是否可以在计算视图中创建一个计算列,如下所示:
Table A
Month Amount
1 1000
1 2000
2 3000
2 3500
filter month={CurrentMonth}; // here CurrentMonth= 2
输出
[{
previousMnthAmount:3000,
currentMnthAmount:6500
}]
我建议创建一个脚本计算视图。在其中,您可以编写 SQLScript 代码来执行必要的 selects 以根据需要获取数据。
我看到两个选项,具体取决于您要将视图用于什么目的:
- 没有输入参数。
- 带输入参数。
如果你选择带参数的视图,如果你真的只对一个月对应的数据感兴趣,可能会避免一些不必要的计算。
无参数
以下内容应该有效:
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 替换为您自己的table。假设以下是你的table的内容:
那么你会得到如下结果:
如果将其包装到视图中,则可以从中 select 并执行 WHERE "MONTH" = 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 和 1)替换为参数(例如 2 --> :IV_MONTH 和 1 --> :IV_MONTH - 1)。与上面相同的内容,您将得到以下结果:
我不确定问题的上下文,对于您要解决的实际问题,这可能不是一个合适的答案。抱歉,如果没有 :-)
如果这是一个数据仓库实现,并且您希望在前端报告中获得该信息,则更通用的方法是使用 current_month 和 previous_month 时间维度中每天更新的标志。然后您可以在计算或报告前端中使用它们。
然后这将适用于任何视图,而不是为那种情况创建特定视图。