2. 从“老字典”到“新抽屉”:数据模型的拆解与对比
2.1 核心概念对照:InfoObject 还在吗
很多从老BW转过来的同事,接手BW/4后第一反应就是问:InfoObject这个叫法怎么没了?其实还在,只是换了个马甲。老BW里,InfoObject分两类,一类是描述业务实体的主数据(比如客户编号、物料编号),另一类是描述度量值的关键指标(比如销售金额、库存数量)。到了BW/4里,这两类统一叫InfoObject,只不过在创建时通过“类型”来区分,界面上不再沿用老版本那种让人绕晕的分类树。
实操中我的建议是:不要纠结名字变化,先理解它的本质。BW/4里的InfoObject依然承担三件事——数据存储时的结构定义、查询分析时的维度/度量标识、以及主数据属性维护的载体。你建一个客户编号InfoObject,它照样有主数据表、有文本表、有层级表,这些跟老BW的机制几乎一脉相承,只是后台物理存储有了明显变化。
新增的关键字是“基于SQL的分析”。老BW里,分析师必须依赖BEx Query Designer,或者通过分析插件在Excel里做透视 Reporting。BW/4里这套入口依然存在,但更值得关注的是,系统原生支持用SQL直接访问BW/4的数据模型,这对习惯了数据库思维的团队来说非常友好。我在某公司的实施中,就把一部分报表从BEx迁移到了基于SQL的视图访问,团队上手速度快了很多。
2.2 InfoProvider:由“多”变“少”的模型统一
老BW中,InfoProvider的类型极其丰富:DSO、CUBE、MultiProvider、InfoSet、HybridProvider……每一种都有自己独特的创建方式和适用场景。新手上路光搞清这些类型就能耗掉两三天。BW/4将这些模型大幅收敛,核心就两类:
- aDSO(高级数据存储对象):用于数据存储和处理,可以理解为BW/4的“数据底座”。
- CompositeProvider(复合提供方):用于查询和数据分析,用于联合多个aDSO或其他模型,相当于老BW中MultiProvider和InfoSet的替代者。
对比来看,aDSO相较于老DSO在很多细节上做了升级,最直接的变化是支持主数据存储(老版DSO不分主数据)、支持数据表分区(老版只能在特定场景手动做)、支持直接作为分析查询的提供方(无需再做激活成Cube的步骤)。
很多人会问:那我以前建的一堆DSO、CUBE怎么办?官方提供了迁移工具,老模型可以转换到新的aDSO架构。但注意,这里不是“一键搞定”,需要先做对象依赖分析,再处理数据流中的各类转换规则,最后还要做数据迁移验证。我经手的项目里,迁移没有一次是零返工的,建议预留充足时间在测试环境反复演练。
2.3 新概念:Core Data Services 与虚拟数据模型
BW/4的一个显著变化是引入了CDS(Core Data Services)视图的概念。老BW时代,数据建模基本靠BW自身的工具和底层ABAP代码;新版本则把开放性的SQL层面作为一等公民。你可以用CDS视图定义数据模型,再配合BW/4自身的建模工具进行加工。这带来的直接优势是——数据模型可以更好地与SAP S/4HANA以及非SAP数据源进行整合。
但有一点要特别提醒:CDS视图在技术上很开放,也意味着数据权限控制、数据血缘追踪、对象依赖关系都需要从建模初期就规划好,否则后期排查问题会非常痛苦。我在项目中吃过亏:某个CDS视图在开发系统里跑得好好的,到了测试环境做传输时,因为依赖关系的对象没一起传,直接导致激活失败。后来我们在传输清单里养成了“依赖对象前置检查”的习惯,避免了很多返工。
从HANA的角度理解,BW/4就是站在HANA这个内存计算平台之上的数据仓库。所有模型最终都落到HANA的列式存储表上,列式存储天然适合对单个字段做聚合分析,这也是为什么BW/4官方一直强调内存计算带来的提速效果——在列式表上,很多亿万行级别的聚合可以做到秒级响应,这在老BW常见行式存储时代几乎不敢想。
3. 数据流全景:数据如何从源头跑到报表
3.1 不同场景的数据接入差异
数据进入BW/4的方式必须按场景分开看,统一的错误思维是“只要我用了BW/4,肯定都用最佳实践接口”。真实情况如下:
| 数据源类型 | 推荐接入方式 | 适用场景 | 注意事项 |
|---|---|---|---|
| SAP S/4HANA 系统 | 基于CDS视图的ODP(操作数据提供方) | S/4版本较新、启用ABAP CDS | 需要提前开通相应RFC、信任关系 |
| SAP ECC/BW 老系统 | ODP + 传统数据源(或使用SDA/SDI) | 老系统升级、混合架构过渡期 | 源系统版本兼容性需重点确认 |
| 非SAP数据库 | SDI(SAP Data Intelligence)+ 数据库连接 | 数据在Oracle/SQL Server/PostgreSQL等库中 | 用SDI做实时复制,配合CDC能力 |
| 文件数据 | 文件数据源 + DXC(增量文件加载) | 业务方提供Excel/CSV | 文件格式校验和错误行定位是难点 |
我建议在项目规划阶段就把“数据源口径”和“增量策略”做成一份统一的接入清单,逐条评审,否则上线后会冒出大量数据对不上的问题。
3.2 数据流中的处理环节:抽取、转换、加载
BW/4的数据流没有颠覆“抽取→转换→加载”的经典模型,但处理节点的实现方式发生了变化。
数据抽取环节,BW/4提供了数据源、提取器等旧有机制,同时更强调通过ODP API从源系统实时拉取数据。举个例子,从S/4HANA抽取物料主数据或销售订单,通常是配置ODP数据源,只要源端开启了CDS视图,BW/4即可通过OData或RFC方式请求增量数据。
转换环节,老BW中大量使用转换规则(Transfer Rules / Update Rules),BW/4仍然支持,但核心是“精简”和“灵活”。我看到很多团队在传统BW里写了极其复杂的更新规则,一个字段的赋值逻辑能写满一篇500行代码。在BW/4实践中,我强烈建议把复杂的规则下沉到HANA SQL视图或存储过程中处理。为什么?因为有HANA的算力打底,SQL语句的调试效率远高于ABAP写的转换例程,业务逻辑也能更好地复用。
加载环节,数据进入aDSO后,可以选择直接激活或先落暂存区做校验。BW/4里aDSO的“新增加了直接写激活队列”选项,让数据不必走“先到新表再激活”的旧流程,极大降低了数据加载的延迟。我在一个日增千万行数据的项目中,调整加载模式后批处理时间缩短了将近三分之一。
3.3 增量机制的背后逻辑
增量数据同步是老话题,BW/4全新设计中,增量机制的实现也与HANA紧密结合。传统做法是通过时间戳或序列号在源端捕获变更,BW/4在连接S/4时,更推荐用ABAP CDS视图配合增量复制,底层是利用源系统的增量队列(Delta Queue)记录变更条目。
这里有个坑:部分第三方源不提供可靠的增量标记,或者增量队列出现问题,会导致增量数据重复或丢失。排查时不要只盯目标系统,先检查源端增量队列的稳定性。经验是,每次数据抽取后尽快把源端队列清空,同时保留抽取日志便于回溯。
4. 查询与分析建模:打开BW/4的正确姿势
4.1 分析查询的关键对象
BW/4中的查询分析构建,核心是基于CompositeProvider和查询设计器(Query Designer,即BW/4版本)。与老版本相比,分析与报表建模有两点必须理解:
- 查询使用的模型必须是激活后的数据模型,不能直接查询源系统表。
- 查询的底层执行,最终会被BI前端翻译成SQL语句,在HANA上执行。
这种架构带来的好处是,前端工具统一且简单。无论是SAP Analytics Cloud、Analysis for Office还是第三方的BI工具,只要通过标准接口(如ODBC/JDBC、OData、BICS)连接BW/4,就能访问统一的数据模型,不需要重复做数据准备。
实际项目中,大部分用户最熟悉的还是Excel前端。将数据导出到Analysis for Office中做格式调整、计算列添加、图表生成,几乎无障碍。唯一提醒:不要为了图方便把全部明细数据都拖到Excel里,BW/4查询默认会限制返回行数(一般默认上限是100万行),应根据业务实际需求设计汇总粒度。
4.2 字段、维度与棘手的权限控制
查询设计器中,属性、度量、层级结构的使用方式与老版本基本一致。有一个值得注意的地方:过程链(Process Chain)里引用的对象会涉及“生成时间”问题。因为BW/4是基于HANA的,很多操作是并发执行的,但在查询激活时,如果引用的底表还没有完成发布,可能遭遇“对象无效”的报错。我踩过的坑是:某个每天跑批的报表突然有一天报“RS_TOOLS_BW4_QUERY 对象不一致”,查了半天才发现是前一天的过程链里查询激活步骤被放在了数据加载之前。调整顺序后问题消失。
在权限控制上,BW/4支持三种方式:
- 分析授权,用于控制用户在查询中能看到哪些维度值。
- 数据保护授权,应用于字段级敏感数据管控。
- 对象授权,控制用户能否访问某个数据模型或查询。
权限的设计需要结合业务架构。我在做权限方案时,通常会梳理“用户岗位—业务线—权限等级”的三层模型,映射成分析授权,预先定义好授权数据源。否则,等到上线测试阶段再补权限,会拖垮整个项目进度。
4.3 从BEx 到前端可视化
很多企业还停留在BEx报表为主的阶段,BW/4无疑会推动他们考虑前端可视化工具的选型。SAP Analytics Cloud(SAC)作为SAP系的云端BI,优势是可以直连BW/4实时查询,并支持智能预测和增强分析;劣势是部分企业因为数据合规或网络隔离要求,无法把数据放入云端,这时候就需要本地部署方案或通过Analysis for Office离线处理。
从我个人的项目经验来看,无论选哪种前端,都应遵循“查询设计先行、报表美化在后”的原则。先把维度、度量、过滤条件、权限边界想清楚,再去做图形化的修饰;不要先画好界面再倒推数据模型,因为一旦模型不合理,前端再漂亮也救不回来。
5. 实操笔记:创建aDSO到出数的一小套流程
5.1 三步建模型:InfoObject、aDSO、查询
这里记录一套最简的可复现流程,适合刚接触BW/4的朋友照着走一遍。
第一步,创建InfoObject。事务代码RSA1进入BW工作台,右键选择“创建InfoArea”,在其下新建InfoObject,类型选“关键指标”还是“特征”根据业务定。创建时要设定数据长度、类型(CHAR/DEC等)、是否为主数据、是否支持大写转换。如果是主数据对象,还需确认文本对象设置,因为BW/4里文本存储和主数据支持逻辑与老版本做了合并。
第二步,创建aDSO。选择“数据存储对象(高级)”,指定InfoArea后,将需要的InfoObject拖入字段列表。需要特别注意的是字段的类型分配:所有维度类字段应标识为“关键字段”,度量字段设为“度量字段”。如果你希望某些字段既能做过滤又能做聚合,建议拆成两个字段分别处理。
第三步,创建CompositeProvider。选择基表时会把前面建好的aDSO直接拖入,在“维度”和“度量”面板中确认字段。然后新建查询,选择该CompositeProvider,拖入维度字段并指定限定条件,执行查询即可看到基于最新数据的结果。
这套流程走下来,正常情况下一个上午就能完成。如果你能把每一步的操作都自然记下来,就具备了独立建模的基础能力。
5.2 数据加载与调优的核心参数
数据加载环节,重点要关注aDSO的三个设置:
- 激活模式:有“直接激活”和“等待激活”两个选项,前者适合批处理时间要求高的场景,但可能造成数据一致性的短暂窗口,后者适合数据要求强一致的场景。
- 数据温度:BW/4原生支持热/冷数据分层,热数据保留在HANA内存中,冷数据可以存放在扩展存储。开启后,可以在数据加载时指定数据温度字段,便于将历史分区自动归入冷区,降低内存成本。
- 合并重写:如果你的业务有更新主数据或做数据修复的需求,aDSO支持按关键字段进行覆盖式更新,不建议用老方式“删除再全量加载”,因为新机制可以基于HANA进行行级别合并,速度极快。
深入调优时,还可以关注HANA的列式存储压缩逻辑。不要担心数据表的行数过于庞大,列式存储本身已经为高基数场景做了优化,只在你反复做全表扫描、频繁访问热点数据时,才需要手动考虑在特定字段上创建二级索引。
5.3 把过程链跑稳:调度和运维
过程链仍然承担批处理的调度职责。在BW/4中设计过程链的思路与老版本差别不大,但有几个细节值得注意:
- 步骤“删除数据目标”和“加载数据目标”要严格分先后,避免加载完成后又被清除。
- 过程链的“变式”参数需要设置标准化,不要每次上线手动改参数,因为一旦人为输入错误,会直接导致数据错位。
- 用调度“事件”而不是绝对时间。比如等待上游接口完成后,再触发数据加载,比固定凌晨3点更健壮。
有句话说得好:过程链不是建完就完事的,它需要像养孩子一样持续观察,因为你永远不知道哪一天上游字段长度变化会引发你从未想过的问题。
6. 踩坑集锦:那些文档没告诉你的细节
6.1 字段长度、类型和激活失败
BW/4中的字段定义,一旦对象被后续模型引用,再做长度变更就容易引发激活冲突。我的处理习惯是:尽量在建模型初期就与业务确认好字段长度,并预留20%到50%的扩展空间。特别是“订单号”“物料号”这类业务主键,如果定义了CHAR 20,后期业务编码规则调整到25位,你就要面临对象级联调整的巨大工程。
激活失败的另一个高频原因:引用了已删除或处于“已修改”状态的对象。查错方法很简单,使用事务代码RSA1查看对象运行时状态,或者直接在激活时报错日志中定位依赖关系,节省不少时间。
6.2 编码映射与数据格式导致的数据错乱
数据抽取时遇到文件编码不一致的情况并不少见。CSV文件在Windows里默认是GBK编码,而BW/4源文件接口支持的通常是UTF-8,如果不提前转码,中文字段直接乱码,数据加载后只能在报表上看到“口口”。我一般建议让业务部门以UTF-8无BOM格式导出文件,或者由运维做一道“转码+入库”的中间处理。
数字格式上也要注意:某些源系统导出时把数值写成文本,并带有千分位逗号,直接加载会被识别为文本字段。稳妥做法是在处理链中加入“字段清洗”步骤,把数值字符串标准化后再进入aDSO。
6.3 查询变慢:性能排查三板斧
查询慢,是BW/4项目里最常见的“投诉”。排查时按这个顺序走:
- 看执行计划。在HANA Studio或Datalakehouse中用“Explain Plan”查看SQL,确认是否走了索引。
- 看数据统计信息。如果表统计信息过旧,优化器可能选择了错误计划,必要时手动更新统计信息。
- 看查询参数化。很多慢查询的罪魁是未能使用参数化的表达式,多条件查询一旦变成重复硬解析,性能自然一落千丈。
还有个容易忽略的点:不要在查询中加入过多动态计算列。每个动态计算列在SQL执行时都会被转换为表达式计算,在亿行级别数据量下会明显拖慢响应。能把计算下沉到aDSO数据模型的加工字段,就尽量下沉。
7. 写在最后:我们的个人体会
折腾BW/4也有几年了,最大的体会是:概念的变化只是表象,数据仓库的“数据模型设计、数据流编排、性能优化、权限治理”这四件事依然是核心。换到HANA这个大底座上,建模和调优的思维方式确实要更新,但业务理解力和数据敏感度还是决定一个数据工程师上限的关键。
如果你正准备从老BW迁移到BW/4,或者刚开始做BW/4实施,我的建议很简单:先动手做一个最简单的数据流(文件或S/4接口→aDSO→CompositeProvider→查询→Excel),把整个链路从头到尾打通一遍,比看十本理论书都管用。遇到概念卡壳时,回看这篇笔记,再翻开官方文档对照着走一遍,多半就能豁然开朗。下一次我会记录一些关于S/4HANA与BW/4实时数据集成、以及SAC前端可视化的实战案例,到时候再跟大家分享。