ABAP CDS(Core Data Services)是一种数据建模语言,用于定义和管理数据模型和服务。它提供了一种简单而强大的方式来定义数据结构、关联和业务逻辑,并且可以与数据库无缝集成。ABAP CDS可以用于创建适用于SAP HANA数据库的数据模型,也可以用于创建适用于SAP S/4HANA和其他SAP应用程序的数据服务。它还可以与ABAP程序和其他SAP技术进行集成,为开发人员提供了更多的灵活性和功能。ABAP CDS是SAP的一种推荐的数据建模和服务定义语言,被广泛应用于SAP系统和应用程序的开发中。(来自gpt-3.5)
1.可以利用DDIC语义进行高级数据模型定义;
2.内置了各种SQL函数和表达式进行数据的处理;
3.cds表函数利用本地 SAP hana特性和功能;
Aggregation Functions: SUM, AVG, MIN, MAX, COUNT 等用于对数据进行聚合计算的函数。
String Functions: CONCAT, SUBSTRING, REPLACE, TRANSLATE 等用于处理字符串的函数。
Date and Time Functions: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP 等用于处理日期和时间的函数。
Mathematical Functions: ROUND, CEIL, FLOOR, ABS 等用于数学运算的函数。
Conditional Functions: CASE, COALESCE, NULLIF 等用于条件判断的函数。
ABS(arg1)
CEIL(arg1)
arg1 除以 arg2 的整数部分 在金额除以后分配符号;如果参数具有相同的符号,则为正数,如果参数具有不同的符号,则为负数。异常:arg2 的值为 0。
DIV(arg1,arg2)
arg1/arg2 保留 dec位小数;相除的结果是四舍五入的 ,dec必须是是int类型的
DIVISION(arg1, arg2, dec)
FLOOR(arg)
arg1/arg2 的余数
例如 10 / 4 = 2.5
MOD(arg1, arg2)
mod(10 , 4) = 5
CONCAT(arg1, arg2)
字符串 arg1,其中 arg2 的所有实例都替换为 arg3 中的内容。字母的替换区分大小写。
REPLACE(arg1, arg2, arg3)
例如:
arg1 = 'abcd1234'.
arg2 = 'cd'.
arg3 = '00'
REPLACE(arg1, arg2, arg3) = 'ab001234'
截取arg字符串从pos开始取len个字符
SUBSTRING(arg, pos, len)
例如:
arg = '1234567890'.
SUBSTRING(arg, 2, 5) = '23456' .
在使用函数或分支语句的时候 需要给 他一个别名
类似于SQL中的CASE语句,可以根据不同条件执行不同的逻辑。
写法一:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result3
END.
写法2:
CASE arg
WHEN 'A' THEN result1
WHEN 'B' THEN result2
ELSE result3
END.
用于执行简单的条件判断。
IF condition.
statement1.
ELSE.
statement2.
END.
sum(_m.stock_qty) as menge
取a.prodh 从 第一个字符到 第五字符的值
a.prodh = 'abcdefg123456'
substring(a.prodh,1,5) as prodh2
结果:
prodh2 = 'abcef'
case _ekko.bsart
when 'Z006' then _ekpo.menge * -1
when 'Z008' then _ekpo.menge * -1
else _ekpo.menge
end as emenge,
如果为z006/z008 menge * -1 - p.menge
否则 menge - p.menge
case when _ekko.bsart = 'Z006' or _ekko.bsart = 'Z008'
then coalesce(_ekpo.menge * -1,0) - coalesce(_ekbe.menge,0)
else coalesce( _ekpo.menge,0) - coalesce(_ekbe.menge,0)
end as menge_diff
division(A,B,3) : A / B 保留三位小数
division(_d.labst ,_mr.umrez,3) * _mr.umren
case when _ekko.bsart = 'Z006' or _ekko.bsart = 'Z008'
then
division( coalesce(_ekpo.menge * -1,0) - coalesce(_ekbe.menge,0) ,_marm.umren ,3) * _marm.umrez
else
division( coalesce( _ekpo.menge,0) - coalesce(_ekbe.menge,0) ,_marm.umren,3) * _marm.umrez
end as menge_tran
define view zbv_stka_eb_ddl
with parameters "条件
p_date : datum
as select from matdoc as _m
inner join ZBV_MARA_CO as _a on _a.matnr = _m.matnr
{
_m.werks,
substring(_a.prodh,1,5) as prodh2,
sum(_m.stock_qty) as menge
}where _m.budat <= $parameters.p_date "条件
group by
_m.werks,
having
sum(_m.stock_qty) <> 0