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

news2024/11/15 11:38:28

作者 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.coloradmin.cn/o/1273347.html

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

相关文章

CCF CSP认证 历年题目自练Day50

题目 试题编号&#xff1a; 201809-3 试题名称&#xff1a; 元素选择器 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 题目分析&#xff08;个人理解&#xff09; 还是先理解题意&#xff0c;关于html的部分&#xff0c;可以按照样例画出…

2000-2021年各省人口密度数据

2000-2021年各省人口密度数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;地区、年份、年末常住总人口(万人&#xff09;、面积&#xff08;平方千米&#xff09;、人口密度&#xff08;人/平方千米&#xff09; 3、来源&#xff1a;各省年鉴、统计年鉴、各省统计局…

Redis面试题-缓存穿透,缓存击穿和缓存雪崩

目录 缓存穿透 面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 面试官&#xff1a;你能介绍一下布隆过滤器吗&#xff1f; 缓存击穿 面试官&#xff1a;什么是缓存击穿 ? 怎么解决 ? 缓存雪崩 面试官&#xff1a;什么是缓存雪崩 ? 怎么解决 ? 缓存穿透 面试官&a…

笔记二十六、React中路由懒加载的扩展使用

26.1 在路由中配置懒加载 lazy routes/index.jsx 代码 import {Navigate} from "react-router-dom"; import Home from "../components/Home"; import About from "../components/About"; // import Classify from "../components/Home/c…

Vue3 刷新后,pinia存储的数据丢失怎么解决

这个问题有两种解决办法&#xff1a; 一是使用pinia的持久化存储一是使用vue的依赖注入 刷新后&#xff0c;通过pinia存储的vue store数据丢失&#xff0c;实际上是因为Vue原组件卸载、新组件重新挂载导致的&#xff0c;vue store是挂载在组件上的&#xff0c;当刷新导致组件…

处理机调度与作业调度

处理机调度 一个批处理型作业&#xff0c;从进入系统并驻留在外存的后备队列上开始&#xff0c;直至作业运行完毕&#xff0c;可能要经历如下的三级调度 高级调度 也称为作业调度、长程调度、接纳调度。调度对象是作业 主要功能&#xff1a; 挑选若干作业进入内存 为作业创建…

使用RobotFramework编写BDD代码

背景 行为驱动开发&#xff08;Behavior Driven Development&#xff09;即BDD&#xff0c;是一种敏捷开发方法&#xff0c;通常应用在自动化测试中&#xff0c;或者也可称为行为驱动测试。通过使用自然描述语言确定自动化脚本&#xff0c;通过这种方式&#xff0c;能够大大促…

微调Fine tune

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

RS232串口_笔记

这里写目录标题 1、RS232串口理论起始位数据位校验位LSB & MSB示波器查看数据信号对应连接方式 1、RS232串口理论 UART(通用异步收发传输) 是一种通信协议&#xff0c;而 RS232 (串行通信接口)是种物理接口标准。UART 是一种用于在计算机和外部设备之间传输数据的协议&…

Mac电脑版程序创建工具 VMware InstallBuilder Enterprise mac最新

VMware InstallBuilder Enterprise 是一款功能强大、操作简单、跨平台支持的软件安装和部署工具&#xff0c;可以让开发者更加高效地创建和部署软件&#xff0c;并提供了丰富的功能和工具&#xff0c;适用于不同的用户需求和场景。 内置调试器 轻松排除应用程序安装过程中的故…

C语言--每日选择题--Day31

第一题 1. 下面程序 i 的值为&#xff08;&#xff09; int main() {int i 10;int j 0;if (j 0)i; elsei--; return 0; } A&#xff1a;11 B&#xff1a;9 答案及解析 B if语句中的条件判断为赋值语句的时候&#xff0c;因为赋值语句的返回值是右操作数&#xff1b; …

NIFI源码编译部署在服务器CentOS环境中

一、下载Apache NiFi源码&#xff1a; Apache NiFi官网地址&#xff0c;文档 Apache NiFi源码GitHub地址 二、部署nifi 2.1进入opt目录&#xff0c;并创建software、module [rootlocalhost /]# cd /opt/ [rootlocalhost opt]# ls containerd [rootlocalhost opt]# mkdir s…

vscode-使用vscode编译和代码修改 keil工程

Visual Studio Code必要拓展&#xff08;插件&#xff09;安装 1. Keil Assistant 在拓展搜索栏中输入Keil&#xff0c;找到 Keil Assistant 点击安装下载

小航助学题库蓝桥杯题库python选拔赛(21年3月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

智能遥测终端机RTU的注意事项

智能遥测终端机RTU是一种用于实时监测和控制现场数据的设备&#xff0c;可以广泛应用于水利、水文、电力、煤炭等各个领域。但是在使用智能遥测终端机RTU时&#xff0c;也需要注意一些事项&#xff0c;以确保终端的正常使用效果。 ◆注意安装位置   应安装在稳定、通风的室内…

C51--DHT11温湿度传感器

DHT11温湿度传感器 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。 特点&#xff1a; 相对温度和湿度测量全部校准&#xff0c;数字输出长期稳定性超长的信号输出距离&#xff1a;20米超低耗能&#xff1a;休眠4引脚安装&#xff1a;可以买封装好的…

Dynamsoft Barcode Reader教程:如何使用Dynamsoft Java条形码阅读器扫描多个条形码

目前有许多开源和商业条形码SDK&#xff0c;但只有少数可以通过扫描一次来识别多个条形码。当您在Google中搜索条形码SDK或Java条形码SDK时&#xff0c;您会发现Dynamsoft Barcode Reader SDK始终位于搜索结果的前5位。在本文中&#xff0c;我将分享如何使用Dynamsoft Java条码…

内模原理与控制

基于模型的控制方法&#xff1a; 把外部作用信号的动力学模型植入控制器来构成高精度反馈控制系统的设计原理。 内模原理&#xff08;IMP&#xff09;指的是&#xff0c;想要实现对R(s)的无差跟踪&#xff0c;系统的反馈回路中需要包含一个与外部输入R(s)相同的动力学模型。通…

如何使用Selenium进行Web自动化测试?一文6个步骤轻松玩转!

概述&#xff1a; Web自动化测试是现代软件开发过程中至关重要的一环。Selenium是一个强大的自动化测试工具&#xff0c;可以模拟用户在Web浏览器中的操作&#xff0c;实现自动化的测试流程。本文将介绍如何使用Selenium进行Web自动化测试&#xff0c;并附带代码示例&#xff…

TZOJ 1375 偶数求和

答案&#xff1a; #include <stdio.h> int main() {int n 0, m 0, j 0, s 0, count1 0,k0;int arr[101] { 0 }; //选择数组是用来控制打印格式while (scanf("%d%d", &n, &m) 2 && (n < 100 && n>0)) //多组数据输入…