购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 主数据实施的“酸甜苦辣”

在BW中主数据实施需要在一定规范下进行,很多开发者刚刚接触BW主数据设计时会有较多的不适应,本节会分享一些“故事”,为读者提供一些经验参考。

2.4.1 例外聚合信息对象的设计和应用

在SAP BW/4HANA中,例外聚合(Exception Aggregation)可以实现更加灵活的数据分析,但用好例外聚合并不容易。接下来将通过一些实际案例来介绍它。

某日,一用户向David提出了一个需求。由于各种原因,用户企业的系统中存有大量生产过程中产生的物料主数据,很多物料价格不高,但耗费了大量人力成本来管理,给实际工作带来了不便。因此,用户希望分析出各个客户手中价格低于20美元的物料有多少,以便对其进行专项管理。基础数据如表2-16所示。

表2-16 基础数据

David在BW中创建了一个Query,并在其中创建了一个计算指标:价格低于20美元的物料数量,如图2-27所示。

图2-27 例外聚合计算指标示例

他还设置了例外聚合,这个计算指标的异常聚合将与其计算的参考特征值(客户)一起产生作用,如图2-28所示。

图2-28 设置例外聚合

带有异常聚合的KF将显示值1,即客户手中有1个物料满足价格低于20美元。实际上,计算是通过在向下钻取中保持参考特征值来完成的,但输出显示时并没有该参考特征值。

表2-17显示了BW中的例外聚合函数。

表2-17 例外聚合函数

2.4.2 主数据结构变更引发的“血案”

在数据库中,如果需要改变表的字段类型、调整字段长度等,都需要通过Alter命令来调整表结构。而BW是一个高度集成的系统,在调整表结构时稍有不慎,便会引发“血案”。以下是一个具体的案例。

销售部针对经营日报提出了一个优化需求:能够对客户所属产品线进行分类,并且在报表中提供过滤筛选功能。David经过调研,决定在客户主数据中增加一个导航属性—所属产品线,并在报表中添加变量,以供用户筛选。然而,当 David 按计划修改了客户信息对象“0CUSTOMER”并激活后,他惊讶地发现,所有包含信息对象“0CUSTOMER”的ADSO和HCPR都变为停用状态。而信息对象“0CUSTOMER”不仅在销售模块中用到了,在采购和供应链模块中也用到了。David只好逐个排查受影响的模型、转换、DTP,并进行手动激活。

对于SAP BW/4HANA来说,为了保证信息对象和生成的HANA列视图的一致性,技术上需要取消激活相应的模型(包括HCPR和ADSO),以便系统进行深度和灵活的检查。因此,SAP BW/4HANA只会激活那些真正需要激活的对象。

对信息对象进行下列操作都会导致相关模型(包括对应的转换)处于停用(Inactive)状态。

(1)删除/添加导航属性。

(2)删除/添加显示属性。

(3)修改信息对象的数据类型(Char、Numc等)。

(4)修改信息对象的数据长度。

(5)改变访问类型。

目前,SAP BW/4HANA尚未实现自动激活已经停用的模型,只能手动激活受影响的模型。因此,实际应用时要做好前期工作以尽量减少这方面的影响。在设计阶段,主数据模型基于整体、跨模块的方式进行设计,且在大多数时候优先于业务模块模型的设计,以便减少后期的改动。在特殊情况下,可以预留长度、少量显示属性和导航属性来应对变化。

2.4.3 主数据中特殊字符的处理

从文件或其他数据源加载数据时,很多特殊字符支持加载,却不能够存储于BW系统中。遇到加载了非法字符的数据时,BW错误日志中会出现如下内容。

(1)Error in SID generation.

(2)Error when assigning SI:Action VAL_SID_CONVERT table.

(3)Characteristic 0XXX/ZXXXX contains invalid characters like 235-A100[060D].

(4)Activation of M records from Data Store object terminated.

(5)Error mentioning#,@,$,%,!etc are not allowed while loading data.

出现以上情况是因为在BW中,只有满足规范要求的数据才能被加载到特征值中。默认情况下,允许使用的字符包括!、"、%、&、′、(、)、*、+、,、-、.、/、:、;、<、=、>、?、_、0~9、A~Z。

BW 是否只能加载上面这些字符呢?其实并不是。BW 是一个规范化和集成化要求比较高的系统,主数据的特征需要满足一致性要求,而复杂的字符对象较难满足这一点。遇到这种情况时,可以将主数据设计为“主键—描述”的形式,以性别维度为例,如表2-18所示。

表2-18 主数据设计示例

在信息对象的Text属性中,允许使用绝大多数字符类型。因此,这里的特殊字符指的是信息对象中的特征值主键所面临的特殊字符。

根据业务实际情况,可采取如下两种方法处理特殊字符。

(1)保留需要的特殊字符。

(2)排除不需要的特殊字符。

保留需要的特殊字符,可以通过以下两种方法来实现。

1)保留新字符

将系统中允许的和需要的字符通过TCODE RSKC下发执行,即可在BW系统中正常使用。

图2-29表示特殊字符#、&被允许在BW系统中使用。

图2-29 保留新字符

使用新字符时,只需要在文本框中输入字符并执行,执行后可以看到界面的左下方出现提示信息:字符已经被保存。这些字符将被存储于数据库表 RSALLOWEDCHAR中。

Space(空格)也是一个比较特殊的字符,在之前介绍的字符中并没有包含 Space(空格)。如果允许空格留存于字段中,也需要使用TCODE RSKC来添加,使之成为全局保留字符。不过,添加Space(空格)与一般的字符不同,可以在TCODE RSKC界面中利用快捷键“Alt+255”或者“Alt+0160”来完成。

在TCODE SE37中输入“RSKC_ALLOWED_CHAR_GET”,可以看到BW系统中目前已经设置好的保留字符,且Space(空格)是第一个。

另外,以下几种情况会导致系统报错。

(1)只有#,因为不输入是用#来表示的。

(2)以!开头的值,系统会删除该字符值。

(3)数据字符的十六进制值(00~1F)。

2)成为首字符

一般来说,特殊字符是不允许作为数据的首字符出现的。当确实需要用特殊字符作为首字符时,可以使用TCODE RSKC来执行“ALL_CAPITAL”、“ALL_CAPITAL_PLUS_HEX”或“ALL_CAPITAL*”。如果这个需求仅在某个字段或信息对象中出现,那么可以在转换中创建一个规则。

需要注意的是,使用“ALL_CAPITAL”“ALL_CAPITAL_PLUS_HEX”会对从源系统抽取到BW系统中的所有数据字符产生影响,即允许使用所有字符,并且不会进行大小写转换(将小写转换成大写)。

排除不需要的特殊字符,可以通过以下两种方法来实现。

1)区分大小写

如果需要加载小写字母或者中文到BW信息对象中,可以在信息对象的设置界面中勾选Case-Sensitive(区分大小写)选项,这样可以避免以后抽取数据时出现错误,如图2-30所示。

2)移除意外字符

尽管利用上述方法可以保留很多特殊字符,也可以排除一些特殊字符,但在数据抽取过程中还是会从源系统中得到很多不需要的字符,可以通过以下方法来移除这些字符。

图2-30 区分大小写

(1)利用标准函数来移除。

函数SCP_REPLACE_STRANGE_CHARS可以在转换规则或开始例程中使用,这个函数可以将指定字段或所有字段中不需要的字符移除。

(2)移除从文件加载的非法字符。

从文件中加载数据时,更容易出现特殊字符,可以通过设置字符集来处理,如图2-31所示。

图2-31 设置字符集

在默认设置中,Unicode 系统将使用 UTF-16LE 编码(代码页为 4103)。常用的 SAP代码页是 1100(基于 ISO 8859-1),此代码页涵盖西欧、南美洲、北美洲、澳大利亚和非洲等地区的语言。其他SAP代码页(基于ISO 8859代码页)有1401(东欧语言)、8000 (日语)、8400(简体中文)、8300(繁体中文)、1500(俄语)等。

当传入的文件中有无法使用配置的代码页算法解释的字符时,系统会分配一个替换字符,默认为“#”。 KwEbNdF1AkBZgWJtJGc5Dm1P75mjFBTAaq54/KCQI3b/Gj4jDkojs/vA2BTW4m6W

点击中间区域
呼出菜单
上一章
目录
下一章
×