财务经理早上打开 SAP Fiori 分析报表时,真正想看到的通常不是一个空白的筛选条件页面,也不是要求重新输入当天日期、当前会计年度、公司代码、成本控制范围和成本中心。更符合企业应用习惯的体验是,系统已经知道今天是哪一天,知道当前处于哪个 Fiscal Year,知道当前登录人员负责哪些 Cost Center,也知道应该把报表的时间窗口限制在当前月份或者当前季度。
SAP ABAP CDS 里的 Derivation Functions 就是为这类需求准备的。
它解决的并不是简单的字段计算,而是分析查询中的一个很重要的问题,如何根据运行时上下文,自动得到参数或者过滤条件需要使用的值。
SAP 官方对 derivation 的描述非常明确,@Consumption.derivation可以从另外一个 CDS entity 中取得值,并把得到的结果传递给主查询,在运行时参与参数填充或者过滤条件计算。对于参数派生,通常只需要得到一个值,而用于过滤条件时,则可以得到一个或者多个值。
这套机制看起来和普通的 Default Value 有些相似,但二者解决的问题其实不同。
一个普通默认值往往是静态的。假定报表参数默认使用某个固定 Company Code,这个值写成1000并不会随着日期、人员或者业务环境改变。
Derivation Function 面向的则是动态上下文。
今天打开报表,默认日期可能是 2026 年 10 月 2 日。明天再次打开,同一个 CDS Query 应该自动使用 2026 年 10 月 3 日。进入新的会计年度以后,Current Fiscal Year 也应该随之改变。成本中心