考虑到SAP的规模和普遍性,对SAP缺少认识通常是不可思议的。这里有一组惊人的数据:世界上77%的交易收入都与SAP系统有关。只要你花过钱,就很有可能与SAP系统打过交道。福布斯全球2000强中92%的公司都是SAP的客户。
但是,SAP软件究竟是如何做到这一切的呢?它有什么作用呢?尽管近年来SAP收购了许多SaaS(软件即服务)公司,以扩大其投资组合并使股东获利,但它最初的核心关注点还是企业资源规划(Enterprise Resource Planning,ERP)。
SAP于1972年在德国成立,它有一个“性感”的绰号“系统分析与程式开发”(Syste-manalyse und Programmentwicklung)。SAP在IBM服务器的DOS系统下运行,它的第一个功能是后台财务会计软件包。随后又推出了采购、库存管理和发票验证等模块。你可以看到公司的主题逐渐浮现:做企业需要的通用事务。
一开始SAP的功能列表看起来相当枯燥,尤其对于我们这些时髦的数据科学家来说。现在的数据科学家一般都会用Python模块和Tensor等,知道如何用计算机识别图片中是一条狗而不是一架飞机。SAP并不像Google搜索或在iPhone上使用Siri一样神奇。但是SAP给最初几个乏味的模块增添了新花样:集成。库存管理直接影响采购,采购又直接影响财务,财务又直接影响……哦,几乎影响所有的一切。这个简单的SAP ERP系统包含了所有这些模块。现在,公司不必购买和运行单独的财务、库存和发票系统,这样节省了大量资金。当一个系统能对用户的所有商业问题给出答案时,客户就开始成群结队地来购买。这就是ERP的价值和成功之处。当Gartner在20世纪90年代创造ERP这个术语时,SAP的年销售额已经超过10亿德国马克。
自20世纪70年代以来,SAP已扩展到后台业务的其他领域。现代SAP ERP系统实现包含了运行多种业务功能的复杂模块的选项。SAP内部人员非常熟悉的模块缩写如下:
SD:销售和分销
管理销售、运输和账单活动。
QM:质量管理
管理质量检查和由此产生的通知。
PM:工厂维护
工厂设备的维护计划,以及维护期间要执行的任务。
FICO:财务会计、控制
重要的组织财务数据,管理利润/成本中心和内部订单。
HCM:人力资本管理
任何与HR相关的事物。
PP:生产计划
产能规划、材料规划,以及其他与实际生产相关的活动。
MM:物料管理
物料的库存、采购和主要数据。
PS:项目系统
项目管理和项目组合管理,包括内部和外部融资项目。
考虑到SAP的卫星产品所能提供的其他功能,本列表提供的模块只是其功能的冰山一角。其他模块还包括客户关系管理、运输管理、供应商关系管理,以及云服务产品Ariba(B2B云采购网络和市场解决方案)和Concur(差旅和费用管理解决方案)。
一本书不可能囊括所有这些功能。在本书中,我们将重点介绍几个ERP模块和SAP CRM中的数据方案。
既然全世界很多大公司都在使用SAP来解决如此多的关键业务,那么在SAP内部又是怎样实现这么多业务的呢?
从SAP中获取数据
与大多数大型业务应用程序一样,SAP ERP使用关系数据库存储事务性数据和主数据。它的设计使得客户可以从众多关系数据库管理系统(RDBMS)中进行选择,以用作SAP应用程序数据库。微软的SQL Server、IBM的DB2、Oracle和SAP的MaxDB等数据库都支持SAP。在过去的几年中,SAP迅速推出了另一项专有的数据库技术——HANA,它是一种内存技术的RDBMS解决方案。虽然SAP的核心ERP产品的未来版本有朝一日会使用HANA,但目前大多数SAP安装仍使用其他技术之一作为其数据库。
在本书中,我们将介绍几种从SAP系统中获取数据的方法,这些方法都不需要你确切地知道SAP系统在哪个数据库上运行。但如果你是一个真正的书痴,你无论如何都会发现的。
为你公司的SAP实例提供支持的关系数据库是巨大的,并且充满了事务性数据和主数据。它们全面描述了SAP存储和处理的重要业务信息的形状。作为SAP系统核心的数据库,它是你可以发现真相的来源。
除非这是你最后的选择,否则千万不要直接访问数据库。
好吧,我们在这里有点开玩笑了。你会发现直接使用SQL语句从SAP数据库中查询数据有时候是有效的。但是数据模型的规模和令人难以置信的复杂性,使得完全理解简单销售订单的结构,就可能涉及40多个表和1000多个字段。即使是SAP黑带,也很难记住所有需要使用的各种表和字段。所以想象一下,对于初学SAP的数据科学家来说,分析所有必需的数据是多么低效。
BAPI:使用NetWeaver RFC库
不太了解SAP的数据迷应该从研究SAP系统中可用的业务应用程序编程接口(BAPI)开始。BAPI是SAP提供的可远程调用的函数,用于处理各种业务信息文档中的数据。与其弄清楚40多个销售订单表中的哪一个适用于你的特定数据问题,不如看看各种销售订单的BAPI结构,确定它们是否填补了这个空白。数据模型逆向工程的麻烦就没有了。
BAPI还有助于覆盖早期版本中的系统限制。在SAP核心产品开发的早期,各种模块限制了可以表示表或字段的字符数。由于SAP多年来出色的稳定性,这些表名和字段名一直坚持了下来。如果不熟悉SAP内部,你怎么可能知道“LIKP”和“VBELN”与交付数据有关系呢?BAPI是后来才出现的,因此它们的成长伴随着接口,这些接口可以更好地描述其形状和功能。
OData
SAP NetWeaver Gateway代表了SAP进入现代网络时代的众多方式之一。它是一个SAP模块,在某些情况下,它可以运行的内容足以构成一个单独的系统,允许SAP开发人员快速、轻松地与SAP后端业务数据建立HTTP连接。你会在第6章看到几个使用SAP NetWeaver Gateway的例子。
传输接口的基础层称为OData。OData是许多科技公司共同提出的通信标准,它是一种通过RESTful API在网络上进行通信的方式。它为网上传输的数据提供了通用格式(一般使用XML或JSON格式),也为客户端提供了基本的创建/读取/更新/删除等操作方式,用于对服务器数据进行操作。它还为服务器提供了一种基于XML的方法,可以为客户端确切地指定字段、结构和选项,用于与服务器提供的元数据进行交互。
通过SAP NetWeaver Gateway使用OData,需要使用SAP本身的后台语言ABAP进行编程。那些从事SAP工作的读者可能对这种语言非常熟悉,能生成Gateway OData API。其他读者可能不熟悉这种语言,但值得欣慰的是,如果你的公司以任何方式运行SAP,公司内就会有熟悉ABAP的人。这些人要么知道如何创建OData服务,要么能够快速学会,因为这并不困难。
当找不到满足你数据需求的BAPI时,请选择OData。这是一个很好的折中,为SAP管理员提供了测量和监控其使用情况的灵活性。它还让开发人员能够以他们选择的方式组合数据。使用OData的另一个好处是,它不需要像BAPI方法那样的NetWeaver连接器,任何能够在企业网络内安全地进行HTTP请求的设备都可以进行OData请求。
其他获取数据的方法
如果找不到合适的BAPI,也找不到提供OData服务的资源,总有一些其他方法可以采用。我们通常不推荐使用这些方法,因此只对其进行简要介绍
。
Web服务。SAP允许你通过它的Internet通信管理器(ICM)层创建Web服务。这些Web服务让你的工作比使用OData更加灵活,但是它们仍然需要ABAP知识。带网关的OData与完全定制的SAP Web服务之间的区别很小,请仔细考虑你的数据问题是否真的不能用OData来解决。
直接数据库访问。尽管大家都说不要直接访问数据库,但是我们也遇到过一两次这样的情况,只有访问数据库才是唯一可行的方法。如果你需要走这条路,关键任务是确保提取的数据与SAP在屏幕上提供给终端用户的数据相匹配。很多时候,隐藏的输入/输出转换和数据建模层在浏览数据模型时并不明显。
说真的,直接从SAP数据库中提取数据就像驾驶一辆刹车有问题的F1赛车。你会很快到达你想去的地方,但可能会在路上撞到一两堵墙。
屏幕转储到Excel。有时,只有终端用户才会确切知道哪个屏幕有适合自己的数据。很多时候,屏幕都会有将数据导出到Excel的机制。
决定如何从系统中获取SAP数据的一组简单规则如下:
BAPI
我知道自己想要什么样的数据,SAP正好提供了合适的远程函数来获取它。
OData
我知道自己想要什么样的数据,但是SAP并没有提供准确合适的函数,或者我希望通过简单的Web调用来提取这些数据。
Web服务
我知道自己想要什么样的数据,但OData并不能让我完全按照自己的意愿来塑造数据。
直接数据库访问
我知道自己想要什么样的数据,也知道SAP应用程序的数据模型提供了这样的数据,但是我不会使用ABAP来构建它。
屏幕转储到Excel
有人知道我想要什么样的数据,并且只能通过屏幕上的数据来提供给我。