SAP BW层级结构小结属性数据源+专家例程实现层级结构增强加载

作者 idan lian  如需转载备注出处

BW信息对象-层级结构

RSH1 维护信息对象层级

这里的文本描述对应T表中的描述,文本数据源加载之后有数据

信息对象层级H表

以上描述都是根据自我理解翻译的,非官方翻译

层级标识:自动生成,其实就是创建的层级标题的技术编码,这上面就是H1,H2创建生成的标识

版本:自动生成,A激活版本 如下图

节点编码:创建数据源时需要给值,每一个层级标题下,每一个节点都对应唯一一个编码,向下延续,如何在RSH1中维护节点后会自动生成,正序排列

等级编码:自动生成,根据节点编码,父节点编码,来决定是哪一个等级的,通俗就是展开是第几层

父节点编码:创建数据源时需要给值,上一级的编码,在RSH1时把节点挂在另一个节点下面,那么另一个节点就是他的父节点

子节点的第一个编码:创建数据源时不用给值,自动生成,就是下一等级的第一个编码

兄弟节点下一个编码: 同一级别的下一个编码

数据源

层次结构文本数据源

标准层次数据源

例如成本中心等层级数据源,在S4中有标准的,没用过,暂时不写

转换&DTP

对应五个转换

1层级标题,层级结构技术名称比需有值,就是H1,H2

不是必须的

必须维护,尤其是NODEID,父节点,信息对象等,常用的链接如下,其他可以不维护

文本,可以不维护

文本,可以不维护

文本层级数据源

DTP转换选择层级标题,这里层级标题是创建数据源时生成的,也就是H1,H2,只有文本层级数据源的转换才有这个选项

专家例程实现案例 利用属性数据源实现层级结构的加载

需求:

SUBJECT-CRD8UDZ

文本

H1层次结构

S02

在建工程项目

默认值:SALL

ZTFI_HB_CIP-PSPID(项目定义)

ZTFI_HB_CIP-

默认值:S02

ZTFI_HB_CIP-AUFNR(订单)

ZTFI_HB_CIP- KTEXT

默认值:S02

将项目ID与描述保存在与维度SUBJECT的CRD8UDZ、中,父项固定为“S02”。再用处理链,将成员复制到BPC维度SUBJECT中去。

其实就是生成父节点,并根据来源的数据源根据 向下进行编码,这里我们通过专家例程实现,最重要的是理解我们需要处理哪些字段,还有各个字段对应的含义,不懂可以再2参考上面写的。

创建属性数据源,实现自动编码,固定父节点,其他规则搞懂各个字段含义照葫芦画瓢即可

专家例程实现,代码如下:

IF SOURCE_PACKAGE IS NOT INITIAL.

      " 定义一些常量

      CONSTANTS: lc_hier      TYPE rshienm    VALUE 'PARENTH1',

                 lc_act       TYPE rsobjvers  VALUE 'A',

                 lc_ZSUB  TYPE rsiobjnm   VALUE 'ZSUB_TEXT',

                 lc_ZH       TYPE c LENGTH 1 VALUE '1'.

      " Data Declaration

      DATA: lv_prnt_id    TYPE rshienodid,

            lv_max_nodeid TYPE rshienodid,

            lv_PARENTID TYPE rshienodid.

      " 定义宏 +1 用于之后的编码

      DEFINE increment.

        &1 = &1 + 1.

      END-OF-DEFINITION.

      break-point.

      " 查出层级对应的唯一技术标识 rshiedir是记录层级信息的标准表 有所有层级

      SELECT SINGLE hieid

        FROM rshiedir

        INTO @DATA(lv_hieid_hier_ZSUB_TEXT)

        WHERE hienm = @lc_hier AND IOBJNM = @lc_ZSUB.

      " 获取层级表最大的nodeid 后语基于这个多nodeid顺序编码

      SELECT SINGLE MAX( nodeid )

        FROM /BIC/HZSUB_TEXT

        WHERE HIEID = @lv_hieid_hier_ZSUB_TEXT

        INTO @lv_max_nodeid.

      " 查出需要固定为父节点的NODEID

 " 查询目前的层级结构H表字段,用于之后赋值

      SELECT *

        FROM /BIC/HZSUB_TEXT

        INTO TABLE @DATA(lt_existing_parents)

        WHERE hieid = @lv_hieid_hier_ZSUB_TEXT

        AND   objvers = @lc_act.

SORT lt_existing_parents BY NODEID.

 " 把层级H表赋值给结构包

        LOOP AT lt_existing_parents INTO DATA(LS_H).

           RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3 (

           OBJECTID = lv_hieid_hier_ZSUB_TEXT

            H_NODEID = LS_H-NODEID

            H_IOBJNM = LS_H-IOBJNM

            H_PARENTID = ls_h-PARENTID

    "        H_CHILDID = ls_h-CHILDID

     "       H_NEXTID = ls_h-NODEID

            H_TLEVEL = ls_h-TLEVEL

            H_LINK = ls_h-LINK

            H_HIERNODE = ls_h-NODENAME

            /BIC/ZSUB_TEXT = ls_h-NODENAME

            )  ).

        ENDLOOP.

  SORT lt_existing_parents BY hieid nodename.

" 对数据来源进行处理  本项目需求 不通用

      LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.

        IF <source_fields>-pspid = ''.

           <source_fields>-pspid = <source_fields>-aufnr.

           <source_fields>-POST1<source_fields>-KTEXT.

         ENDIF.

      ENDLOOP.

      SORT SOURCE_PACKAGE BY PSPID .

"固定父节点

IF RESULT_PACKAGE_3[] IS INITIAL."只有初始化时赋值

RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3

          ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000001

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'SALL'

            h_parentid = 00000000 " S02nodeid

            h_tlevel = 01 "固定第1层级

            h_hiernode = 'SALL')

          ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000002

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'S02'

            h_parentid = 00000001 "

            h_tlevel = 02 "固定第2层级

            h_hiernode = 'S02')

         ( objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = 00000003

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = 'S03'

            h_parentid = 00000001 "

            h_tlevel = 02 "固定第2层级

            h_hiernode = 'S03')

            ).

      " 当前行赋值  作为之后编码使用 之前已固定赋值三行 所以从3开始编码

      DATA(lv_index) = 00000003. "初始化时从3开始编码 有三个固定值

    ELSE.

       lv_index = 00000000."非初始化从000开始

ENDIF.

" 开始循环赋值

      LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.

        IF <source_fields>-PSPID <> ''.

          " Fill result_package_1 with the technical name

          " for the hierarchy.

" RESULT_PACKAGE_1 层级标题赋值 其实主要是h_hienm object_ID无所谓

          RESULT_PACKAGE_1 = VALUE #( BASE RESULT_PACKAGE_1 (

          objectid = lv_hieid_hier_ZSUB_TEXT

          h_hienm = lc_hier

          )  ).

          " 通过宏进行对当前行加1

          increment lv_index.

  " 读取H表的内表,判断数据来源中是否已有此数据,没有才进行插入赋值

          READ TABLE lt_existing_parents ASSIGNING

          FIELD-SYMBOL(<ep_sub_text>)

          WITH KEY hieid = lv_hieid_hier_ZSUB_TEXT

                   nodename = <source_fields>-pspid

          BINARY SEARCH.

          IF sy-subrc <> 0.

            " result_package_3.最关键 是关键的层级信息 nodeid 父节点等赋值

            RESULT_PACKAGE_3 = VALUE #( BASE RESULT_PACKAGE_3 (

            objectid = lv_hieid_hier_ZSUB_TEXT

            h_nodeid = lv_max_nodeid + lv_index

            h_iobjnm = 'ZSUB_TEXT'

            /BIC/ZSUB_TEXT = <source_fields>-pspid

            h_parentid = 00000002 " S02nodeid

            h_tlevel = 03 "固定第三层级

            h_hiernode = <source_fields>-pspid

             "Always 02

            )  ).

          ENDIF.

   " RESULT_PACKAGE_4 生成层级文本的 但是没生效 后通过TEXT转换数据源赋值

          RESULT_PACKAGE_4 = VALUE #( BASE RESULT_PACKAGE_4 (

          objectid = lv_hieid_hier_ZSUB_TEXT

          langu = lc_ZH

          h_hiernode = <source_fields>-pspid

          txtlg = <source_fields>-post1

          txtmd = <source_fields>-post1

          txtsh = <source_fields>-post1

          )  ).

        ENDIF.

      ENDLOOP.

ENDIF.

实现之后RSH1中检查是否完成

H表数据如下

注意

1.这里层次结构文本不好用,必须的链接TEXT文本数据源的转换才行。

2.,层级中的特征值都需要在主数据P表中存在,如果需要展示文本需要在信息对象T表中存在,所以除了维护层级的转换之外,还要处理主数据和文本的转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AUTOSAR OS任务调度的底层逻辑

先参考 FreeRTOS的任务触发底层逻辑 简述RTOS任务调度底层逻辑 AUTOSAR-OS的调度机制-调度表&#xff08;没理解透&#xff0c;继续更新&#xff09; OSEK与FreeRTOS在任务调度上最大的区别在于&#xff0c;FreeRTOS是基于全抢占任务调度和时间片轮转调度机制&#xff0c;具有…

设计师必看!揭秘顶级外卖平台APP背后的设计原则

在数字化和移动互联网盛行的今天&#xff0c;外卖平台APP已经成为我们生活中的重要组成部分。作为设计师&#xff0c;你是否也曾思考过如何通过设计优化用户体验&#xff0c;提升品牌形象&#xff0c;甚至直接推动业务增长&#xff1f;今天&#xff0c;我们将向你揭示顶级外卖平…

使用opencv实现图片相似度检测

1.为什么学这个,我对图像处理非常感兴趣,我联想到海尔的指纹识别门锁是如何进行检测的,我在想不应该呀,单片机性能这么差,应该是使用了训练后的数据去检测图片的,如果我要实现草莓检测,知道它是不是草莓,我觉得单纯使用图片处理是不够的,我考虑过使用指纹模块来接触草莓从而实现…

AI - Crowd Simulation(集群模拟)

类似鱼群&#xff0c;鸟群这种群体运动模拟。 是Microscopic Models 微观模型&#xff0c;定义每一个个体的行为&#xff0c;然后合在一起。 主要是根据一定范围内族群其他对象的运动状态决定自己的运动状态 Cohesion 保证个体不会脱离群体 求物体一定半径范围内的其他临近物…

【计算机组成原理】指令系统

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理计算机组成原理中 指令系统的知识点和值得注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

vue 提交表单重复点击,重复提交防抖问题

问题&#xff1a;用户点击保存时&#xff0c;可能会多次点击。导致生成重复数据。 目标&#xff1a;多次点击时&#xff0c;1s内只允许提交一次数据。 解决方案&#xff1a; 1.在utils文件夹创建文件preventReClick.js export default {install (Vue) {// 防止按钮重复点击V…

10个顶级Linux开源反向代理服务器 - 解析与导航

反向代理服务器是一种部署在客户端和后端/源服务器之间的代理服务器&#xff0c;例如 NGINX、Apache 等 HTTP 服务器或用 Nodejs、Python、Java、Ruby 编写的应用程序服务器、PHP 和许多其他编程语言。 它是一个网关或中间服务器&#xff0c;它接受客户端请求&#xff0c;将其传…

2023.11.27 使用anoconda搭建tensorflow环境

2023.11.27 使用anoconda搭建tensorflow环境 提供一个简便安装tensorflow的方法 1. 首先安装anoconda&#xff0c;安装过程略&#xff0c;注意安装的时候勾选安装anoconda prompt 2. 进入anoconda prompt 3. 建立python版本 conda create -n tensorflow1 python3.84. 激活t…

勒索解密后oracle无法启动故障处理----惜分飞

客户linux平台被勒索病毒加密,其中有oracle数据库.客户联系黑客进行解密【勒索解密oracle失败】,但是数据库无法正常启动,dbv检查数据库文件报错 [oraclehisdb ~]$ dbv filesystem01.dbf DBVERIFY: Release 11.2.0.1.0 - Production on 星期一 11月 27 21:49:17 2023 Copyrig…

如何在服务器上运行python文件

目录 前置准备 详细步骤 一&#xff0c;在服务器安装Anaconda 下载安装包 上传文件到服务器 安装环境 二&#xff0c;创建虚拟环境 创建环境 三&#xff0c;测试执行python文件 执行python文件 查看进程状态 总结 前置准备 如何在个人服务器上运行python文件&#x…

Mysql索引案例分析

这篇文章写个案例&#xff0c;测试一下MySQL索引机制 测试表结构 CREATE TABLE t_qrcode_op (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,op_mobile varchar(16) NOT NULL,pr_code char(10) NOT NULL,PRIMARY KEY (id),UNIQUE KEY om_pc (op_mobile,pr_code) USING BTR…

会员管理系统的意义何在?

在当今的商业环境中&#xff0c;会员管理系统已经成为企业运营的重要组成部分。会员管理系统的意义在于不仅能够帮助企业提高效率&#xff0c;提升用户体验&#xff0c;进行数据分析&#xff0c;营销推广&#xff0c;还能够帮助企业增加收入。下面&#xff0c;我们将详细探讨会…

微调Fine tune

网络架构 一个神经网络一般可以分为两块 特征抽取将原始像素变成容易线性分割的特征线性分类器来做分类 微调&#xff1a;使用之前已经训练好的特征抽取模块来直接使用到现有模型上&#xff0c;而对于线性分类器由于标号可能发生改变而不能直接使用 训练 是一个目标数据集上…

Linux驱动开发——网络设备驱动(实战篇)

目录 四、 网络设备驱动实例 五、DM9000 网络设备驱动代码分析 六、NAPI 七、习题 书接上回&#xff1a; Linux驱动开发——网络设备驱动&#xff08;理论篇&#xff09;-CSDN博客 &#xff08;没看过上面博客的同学&#xff0c;skb是linux对于网络套接字缓冲区的一个虚拟…

Leetcode 136. 只出现一次的数字

class Solution {//任何数与0异或结果都是原来的数//任何数和自身异或结果都是0//异或满足交换律和结合律//a ^ b ^ a (a ^ a) ^ b 0 ^ b bpublic int singleNumber(int[] nums) {int res nums[0];for(int i 1; i < nums.length; i){res ^ nums[i];}return res;} }

OpenCvSharp从入门到实践-(04)色彩空间

目录 1、GRAY色彩空间 2、从BGR色彩空间转换到GRAY色彩空间 2.1色彩空间转换码 2.2实例 BGR色彩空间转换到GRAY色彩空间 3、HSV色彩空间 4、从BGR色彩空间转换到HSV色彩空间 4.1色彩空间转换码 4.2实例 BGR色彩空间转换到HSV色彩空间 1、GRAY色彩空间 GRAY色彩空间通常…

Spring简单的存储和读取

前言 前面讲了spring的创建&#xff0c;现在说说关于Bean和五大类注解 一、Bean是什么&#xff1f; 在 Java 语⾔中对象也叫做 Bean&#xff0c;所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

使用Jmeter进行http接口性能测试

在进行网页或应用程序后台接口开发时&#xff0c;一般要及时测试开发的接口能否正确接收和返回数据&#xff0c;对于单次测试&#xff0c;Postman插件是个不错的Http请求模拟工具。 但是Postman只能模拟单客户端的单次请求&#xff0c;而对于模拟多用户并发等性能测试&#xf…

[Verilog语法]:===和!==运算符使用注意事项

[Verilog语法]&#xff1a;和!运算符使用注意事项 1&#xff0c; 和 !运算符使用注意事项2&#xff0c;3&#xff0c; 1&#xff0c; 和 !运算符使用注意事项 参考文献&#xff1a; 1&#xff0c;[SystemVerilog语法拾遗] 和!运算符使用注意事项 2&#xff0c; 3&#xff0c;

机器学习入门(第五天)——决策树(每次选一边)

Decision tree 知识树 Knowledge tree 一个小故事 A story 挑苹果&#xff1a; 根据这些特征&#xff0c;如颜色是否是红色、硬度是否是硬、香味是否是香&#xff0c;如果全部满足绝对是好苹果&#xff0c;或者红色硬但是无味也是好苹果&#xff0c;从上图可以看出来&#…