文章目录
- 1.什么是abap cds
- adap cds的优点
- 2.常用cds语法
- 常用函数
- 一 数值函数
- 1.绝对值
- 2. 最小整数不小于arg的值
- 3.两个参数相除
- 4.两个数相除切保留小数位
- 5.最小整数不大于arg的值
- 6.取除数的余数
- 二 字符串函数
- 1.拼接字符
- 2.替换字符
- 3.截取字符串
- 三 常用的分支语句
- 1.CASE 表达式
- 2.IF 表达式
- 3.cds 语法演示
- 1.汇总
- 2.字符串截取
- 3.CASE 语句
- 4.case / coalesce()
- 5.除法计算
- 7.添加过滤条件
1.什么是abap cds
ABAP CDS(Core Data Services)是一种数据建模语言,用于定义和管理数据模型和服务。它提供了一种简单而强大的方式来定义数据结构、关联和业务逻辑,并且可以与数据库无缝集成。ABAP CDS可以用于创建适用于SAP HANA数据库的数据模型,也可以用于创建适用于SAP S/4HANA和其他SAP应用程序的数据服务。它还可以与ABAP程序和其他SAP技术进行集成,为开发人员提供了更多的灵活性和功能。ABAP CDS是SAP的一种推荐的数据建模和服务定义语言,被广泛应用于SAP系统和应用程序的开发中。(来自gpt-3.5)
adap cds的优点
1.可以利用DDIC语义进行高级数据模型定义;
2.内置了各种SQL函数和表达式进行数据的处理;
3.cds表函数利用本地 SAP hana特性和功能;
2.常用cds语法
常用函数
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 等用于条件判断的函数。
一 数值函数
1.绝对值
ABS(arg1)
2. 最小整数不小于arg的值
CEIL(arg1)
3.两个参数相除
arg1 除以 arg2 的整数部分 在金额除以后分配符号;如果参数具有相同的符号,则为正数,如果参数具有不同的符号,则为负数。异常:arg2 的值为 0。
DIV(arg1,arg2)
4.两个数相除切保留小数位
arg1/arg2 保留 dec位小数;相除的结果是四舍五入的 ,dec必须是是int类型的
DIVISION(arg1, arg2, dec)
5.最小整数不大于arg的值
FLOOR(arg)
6.取除数的余数
arg1/arg2 的余数
例如 10 / 4 = 2.5
MOD(arg1, arg2)mod(10 , 4) = 5
二 字符串函数
1.拼接字符
CONCAT(arg1, arg2)
2.替换字符
字符串 arg1,其中 arg2 的所有实例都替换为 arg3 中的内容。字母的替换区分大小写。
REPLACE(arg1, arg2, arg3)例如:arg1 = 'abcd1234'.arg2 = 'cd'.arg3 = '00'
REPLACE(arg1, arg2, arg3) = 'ab001234'
3.截取字符串
截取arg字符串从pos开始取len个字符
SUBSTRING(arg, pos, len)例如:arg = '1234567890'.SUBSTRING(arg, 2, 5) = '23456' .
在使用函数或分支语句的时候 需要给 他一个别名
三 常用的分支语句
1.CASE 表达式
类似于SQL中的CASE语句,可以根据不同条件执行不同的逻辑。
写法一:
CASEWHEN condition1 THEN result1WHEN condition2 THEN result2ELSE result3
END.
写法2:
CASE argWHEN 'A' THEN result1WHEN 'B' THEN result2ELSE result3
END.
2.IF 表达式
用于执行简单的条件判断。
IF condition.statement1.
ELSE.statement2.
END.
3.cds 语法演示
1.汇总
sum(_m.stock_qty) as menge
2.字符串截取
取a.prodh 从 第一个字符到 第五字符的值
a.prodh = 'abcdefg123456'
substring(a.prodh,1,5) as prodh2结果:
prodh2 = 'abcef'
3.CASE 语句
case _ekko.bsartwhen 'Z006' then _ekpo.menge * -1 when 'Z008' then _ekpo.menge * -1 else _ekpo.menge end as emenge,
4.case / coalesce()
如果为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
5.除法计算
division(A,B,3) : A / B 保留三位小数
division(_d.labst ,_mr.umrez,3) * _mr.umren
- 复核处理case/division/coalesce
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
7.添加过滤条件
define view zbv_stka_eb_ddl with parameters "条件p_date : datum as select from matdoc as _minner 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