BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库

介绍

通常情况下,报告需要在一个类似树的结构来显示数据。通过启用此特性在SAP BW层次结构。高级数据显示的层次结构的顶层节点。更详细的数据可以向下钻取到的层次结构中的下级节点的可视化。

考虑一个例子层次客户联络层次“,用于限定电信呼叫中心接收电话。

   

图1:客户联络层次

   

加载层次结构的标准机制

有几种可能性供货与SAP BW中的数据的层次结构:

  • 在SAP BW层次结构可以手工维护,但大或频繁变化的层次结构,这样做当然是耗时。
  • 层次结构可以从源系统中所有类型的自动获取。SAP提供了众多的BI内容的数据源提取标准的SAP数据源系统,为各种行业和模块。这也是很多标准的层次结构的情况下,如利润中心,组织单位... 然而,很多时候的层次结构的数据源系统中的自定义表。SAP不允许自定义的层次结构,以一个通用的数据源中提取。
  • 层次结构,也可以提取使用分段BAPI( usiness 一个 pplication P AGC软件覆盖整个院落)或纯文本文件,可以通过程序自动生成的,然后加载到层次结构中的InfoObject 从外部系统(非SAP) 在此过程的自动化引入的一个问题是,这并不总是容易克服的物理纯平要上传的文件,该文件是应放置在SAP BW服务器。这并不总是可能的几个原因。
  • 最后的选项加载一个层次是允许装载在SAP BW系统或其他SAP BW系统的数据接口,数据集市。现在的问题是,层次结构(还)没有在SAP BW系统。但是,此选项将被证明是非常有用的,使自定义层次结构提取。

如果你想加载一个标准的SAP层次结构或层次结构的基础上的平面文件,你可以使用一个以上的机制来获取数据。然而,当装入非标准的SAP层次或从其他来源的层次结构,你都面临着一个很大的问题。SAP BW 标准层次结构的数据源或基于层次结构的平面文件数据源,并有一件事是肯定的,加载任何类型的层次结构只允许需要的数据源的类型层次结构,将数据插入到相应的InfoObject表!所以没有标准化的方法来从源系统中加载自定义的层次结构。

我们怎样才能解决这个问题呢?

总之,解决的办法是获取数据到一个数据存储对象(DSO)[1],使确定的InfoObject有正确的属性[2],加载一个虚拟的层次结构(数据集市接口)[3]和提高本提取,以取代从DSO数据的伪层次结构[4]。此过程将在下面更详细地进行说明。

   

图2:解决方案概述

   

1。DSO的层次数据

第一步是得到的层次结构的数据转换成一个DSO。为此目的,我们可以使用一个事务处理的数据源。构建一个简单的层次结构相结合的节点ID和它的父节点ID是足够的。

   

图3:DSO ZDSOCUST

   

重要的是要注意,我们不需要一个层次数据源。无论什么样的数据源和类型的提取,SAP允许不同的程序,以获取的“交易“ 

在这个例子中所用的DSO ZDSOCUST填充用一个简单的平面文件。

联系我们说明家长联系

1001;商业;

1002;技术支持;

1003;更改合同; 1001

1004;结束合同; 1001

1005,新的合同,1001

(1006);电视; 1002

1007,联系电话; 1002

1008;互联网; 1002

1009;销售1003

1010下出售; 1003

1011;边卖; 1003

1012;结束; 1004

1013年,新的1005

1014数字电视; 1006

1015;模拟电视,1006

1016;手机; 1007

1017固定; 1007

2。层次的InfoObject

图4:的InfoObject客户服务联系我们

   

使用交易代码RSD1,保持的InfoObject作为信息资源直接更新。

启用后,相应的复选框选择一个应用程序组件。根据上的InfoObject属性,这将允许加载属性,文字和层次结构的数据的特性。

作为信息提供者,将其分配给一个资讯区域的特征标记。的InfoObject将被显示在信息提供者树在数据仓库工作台。

作为出口数据源中启用的特点。这允许提取的的InfoObject数据使用的数据集市接口。

图片5的InfoObject

   

源文档< http://www.element61.be/e/resourc-detail.asp?ResourceId=189

   

   

很明显,你还需要到指定的InfoObject包含层次。具体的设置,如时间依赖性和版本,所产生的影响的表,这将反过来又需要特定编码后数据源中的增强。

   

图片6与层次的InfoObject

   

3。虚拟层次提取

现在的InfoObject是正确的维护和激活,我们可以建立一个虚拟的层次结构中,我们将使用后为出发点的数据提取。本手册的过程中需要做一次(每SAP BW系统中的景观)。使用按钮“ 保持层次结构,以创建虚拟的层次结构。

   

图片7创建一个虚拟的层次结构

   

酮(虚设)节点添加到该层次结构是足以激活的层次结构。添加一个文本节点是最简单的。

图像8使用一个空节点

   

9张图片的虚拟层次结构

   

接下来的步骤是生成的出口数据源。这实际上会产生一个数据集市提取属性(M),文本(T)和层次结构(H),根据的InfoObject设置。“ 数据仓库工作台“(交易代码RSA1),然后右键单击上的InfoObject。在上下文菜单中,选择“ 附加功能“>”生成,出口数据源“。通常得到的技术名称'M','T'或'H'> 8,可以发现应用程序组件被称为“数据集市主数据(DM-IO),之后复制此应用程序组件的数据源区域的数据源数据仓库工作台(记得检查BW系统本身作为源系统,在屏幕的左上方)。如果该特定应用程序组件尚未激活您的BW系统中,可以发现新的数据源的应用程序组件的未分配节点'(NODESNOTCONNECTED的)。

现在,我们有层次结构的数据源,我们可以将它连接到我们的InfoObject层次结构,通过传输规则。层次数据源的尚未使用的SAP NetWeaver 2004s/7.0技术支持,因此,我们仍然需要使用SAP BW 3.5的数据源和传输规则来建立连接。事实上,我们连接的InfoObject本身。为了创建传输规则,右键单击层次结构,并使用上下文菜单中去“附加功能”>“创建传输规则”。接下来,我们需要选择正确的源系统。由于我们要采用的出口数据源我们前面创建的,选择你登录到一个相同的SAP BW系统。会弹出一个列表所有可用的数据源,源系统。选择出口数据源我们先前创建的。它应该有名称8 <>'H'。传输规则自动生成的,而事实上,他们建立的出口数据源和的InfoObject层次之间的联系。

创建一个新的Infopackage层次结构的数据源,通过右键点击数据源,然后选择“ 创建Infopackage ... “。给“Infopackage一个描述性的名称和刷新“ 可用的层次结构。这将加载在源代码中提供的所有层次结构。我们只创建了一个虚拟的层次结构,这将是唯一的等级,我们可以提取。选择这个虚拟的层次和保存Infopackage的。这是明智的重命名的目标层次。

图片10 InfoPackage

4。提取增强

到目前为止,我们已经建立了一个虚拟的层次,使提取到一个新的层次结构是完全相同的副本原来的数据流。现在,我们仍然需要插入的层次结构的数据,目前居住在DSO。这可以通过在一个用户出口,增强所产生的层次结构的数据源。

11张图片的层次数据流

   

像任何其他类型的数据源,可以提高层次数据源。每种类型都有其自己的功能模块,在强化“RSAP0001 -客户服务API 函数调用

  • EXIT_SAPLRSAP_001:交易数据
  • EXIT_SAPLRSAP_002:主数据的属性或文本
  • EXIT_SAPLRSAP_004:等级

,如果提高RSAP0001是尚未处于活动状态在您的系统,它可以简单地被激活,并分配到项目中。

功能模块EXIT_SAPLRSAP_004被称为每次执行的层次结构数据源。它是功能组的一部分该功能模块包含一个包括称为“ ZXRSAU04“。这包括可以提高使用ABAP代码从我们前面加载的DSO来获取数据。最重要的表在此退出是表C_T_HIENODE的的应该充满层次的实际数据。这表的类型RSAP_T_HIENODE,它是这样定义的结构ROSHIENODE。

图片12结构ROSHIENODE

需要注意的是不是所有的字段,以便成功地建立层次结构。根据不同的层次结构属性中的InfoObject设置,其他领域,甚至其他表可以成为必需的。

上面的例子中的层次结构是相当直接的,因此,它是足够的填充只有一个选择的字段的表C_T_HIENODE; NODEID,IOBJNM,NODENAME,TLEVEL和PARENTID。

让我们在这些领域有更详细的了解。的的字段NODEID有被唯一地定义。进行领域IOBJNM应填写的InfoObject名ZCUSTCONT“或值0 HIER_NODE”如果你想加载一个文本节点。领域NODENAME应填写与实际值(的InfoObject值或文本节点的描述)。也可以使用复合的InfoObject,但那么我们就需要到指定的复合价值。试想一下,我们的InfoObject ZCUSTCONT复合国家。填充该字段NODENAME如果我们“1003”的值,这个值会被自动分割成国家“BE”和“客户联系”1003“。

下一个字段被称为TLEVEL并包含该节点的层级。如果一个节点的层级是不等于其父母和1的层次结构级别的总和,这将产生一个错误,当加载的层次结构。的层次结构的最上层节点被称为根和多根被允许在一个单一层次。这根节点总是有层次的水平。PARENTID包含的父节点ID。

表1填充C_T_HIENODE

根据您的层次结构特性,其他领域和/或表是必需的。例如,如果你有一个随时间变化的层次结构,的领域DATEFROMDATETO应填补。

现场NODENAME独一无二的,除了,当领域LINK包含值'X'(首都),它可以为一个层次结构节点在层次结构中包括几次在不同的层次分支。换句话说,一个NODENAME可以有多个父节点。在一份报告中,当使用这些重复的层次结构节点的InfoObject值的关键人物值,将显示多次的层次。当然,这关键的人物只会考虑一次,结果行!当使用的时间间隔,你也将有填写的表格C_T_HIEINTV。

如果我们有一个DSO,只包含节点ID和它的父节点ID,我们有足够的信息来构建我们的层次结构。但是,我们需要手工计算的层级。最好的做法是开始与根(S)和它的孩子,然后找到这些儿童和儿童等。需要注意的是每根当然应该单独列出。

让我们来仔细看看的编码。,包括“ ZXRSAU04“每次都被执行,执行的层次结构数据源,它是推荐的数据源之间作出区分。

这一过程确保您的编码时,不执行其他层次结构的数据源执行。

在ABAP程序做的第一件事是删除虚拟层次的内部表C_T_HIENODE的数据。

现在,我们可以设置的层次结构描述的“ 客户联系“。

接下来,我们需要获取数据从DSO到内部表的层次结构。

对于每个节点,我们需要找出的层级和它的父节点的ID。确保所有相关领域都充满。正如前面提到的,根据不同的InfoObject属性。最简单的方法是自顶向下和从根(S)。根是一个没有父节点。层次结构可以由多根。一旦我们确定了根,我们可以搜索它的孩子。然后,我们需要寻找的孩子的孩子。每一条记录被保存表中的C_T_HIENODE。我们将继续这个过程,直到所有的记录被处理。

现在,我们已经完成了数据源的增强,最后一步是执行的Infopackage的。这将填充层次结构的基础上,我们的数据集加载到一个DSO。完整的加载程序可以被自动执行流程链。

这就是它!层次是准备用于在SAP BW报告。

结论

使用SAP NetWeaver BW 7.1(或之前),也没有标准化的方式来加载自定义的层次结构。使用BW 3.x数据流和数据源迁移是不可能的,只能装层次。在这种洞察力描述的过程,是一个很好的解决方法,使一个自动化的自定义层次结构提取。随着全新的层次结构框架,提供与SAP NetWeaver BW 7.30,这将变得更加容易,因为可以使用任何类型的数据源。

posted @ 2014-04-30 13:36  hanmos  阅读(3204)  评论(1编辑  收藏  举报