累计求和/运行时累计
场景:如下图所示,对AMOUNT字段
累计求和

- 限定列-方式a
在Query Designer创建12个限定列,第1个限定列限定1月,第2个限定列限定1-2月……第12个限定列限定1-12月



- 限定列-方式b

使用常数选择

新建公式变量,使用替换路径,其它默认

新建公式

结果
- 限定列-Current Member

使用CM变量限定日历年月

结果
- 本地计算

在Query Designer设置
Calculate single values As Cumulated标识

结果
*对某些前端工具不起作用
- HANA计算视图-SQL
A)方式1:
Window function


B) 方式2:子查询

- HANA计算视图-图形

新建计算视图ZCV_CALMONTH_CUMULATIVE


数据示例

新建模型CV_RUN_TOTAL

Proj_Month节点

Proj_Data节点


Join_sum节点

Union_1节点

Aggregation节点

整个计算视图

结果集
- 动态计算列

通过ABAP增强RSROA的方法COMPUTE_TABLE动态计算

结果集(注意效率)
- 通过DTP将数据物化到模型
适用于大数据量情况
参考代码:
DATA
:
lt_rp2
TYPE
_ty_t_tg_1
,
ls_rp2
TYPE
_ty_s_tg_1
,
lv_cm2
TYPE
/bi0/oicalmonth2
,
lv_n
TYPE
/bi0/oicalmonth2
,
lv_cq1
TYPE
/bi0/oicalquart1
.
DATA
(
lv_rec
)
=
lines
(
RESULT_PACKAGE
)
+
1
.
"need to fill record field in result_package internal table.
LOOP
AT
RESULT_PACKAGE
INTO
ls_rp2
.
lv_cm2
=
ls_rp2
-
calmonth2
.
" take calmonth2, e.g. 01 for Jan, 02 for Feb and so on
lv_n
=
12
-
lv_cm2
.
" calc number of times the record should be multiplied in loop below
DO
lv_n
TIMES
.
ls_rp2
-
calmonth2
=
lv_cm2
+
sy
-
index
.
" calc corresponding month number
CONCATENATE
ls_rp2
-
calyear ls_rp2
-
calmonth2
INTO
ls_rp2
-
calmonth
.
" ... and calmonth
lv_cq1
=
ls_rp2
-
calmonth2
DIV
4
+
1
.
" calc corresponding quater number
ls_rp2
-
calquart1
=
lv_cq1
.
CONCATENATE
ls_rp2
-
calyear ls_rp2
-
calquart1
INTO
ls_rp2
-
calquarter
.
"... adn calquarter
ls_rp2
-
record
=
lv_rec
.
ls_rp2-/bic/zrt
=
'X'
.
"set field to sepatare rows with RT
APPEND
ls_rp2
TO
lt_rp2
.
lv_rec
=
lv_rec
+
1
.
ENDDO
.
ENDLOOP
.
APPEND
LINES
OF
lt_rp2[]
TO
RESULT_PACKAGE[]
.
"finally combine "in period"-dataset with RT-dataset.