CDS视图中的层次结构级别列

2020-08-27 08:24发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我创建了一些CDS视图以定义成本...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我创建了一些CDS视图以定义成本中心组层次结构。

所以像这样的树...

-根组
 -A组
 --A.1组
 --A.2组
 ----A.2.10组
 ----A.2.20组
 -B组
 --B.1组
 ----B.1.10组
 --B.2组
 -C组
 -C.1组
 

...变成这样的表

孩子| 姓名| 父母
 A |  A组| 根
 A.1 |  A.1组| 一个
 A.2 |  A.2组| 一个
 A.2.10 |  A.2.10组|  A2
 A.2.20 |  A.2.20组|  A2
 B |  B组| 根
 B.1 |  B.1组| 乙
 B.1.10 |  B.1.10组|  B.1
 B.2 |  B.2组| 乙
 C |  C组| 根
 C.1 |  C.1组|  C
 

请注意:

  • 根组没有显示为子节点(但是我可以做一个UNION来添加它)
  • 层次结构只有一个根节点,并且级别数未定义。

我的问题:

我想添加一个层次结构级别列,如下所示:

孩子| 姓名| 父| 水平
 A |  A组| 根|  1个
 A.1 |  A.1组|  A |  2
 A.2 |  A.2组|  A |  2
 A.2.10 |  A.2.10组|  A.2 |  3
 A.2.20 |  A.2.20组|  A.2 |  3
 B |  B组| 根|  1个
 B.1 |  B.1组|  B |  2
 B.1.10 |  B.1.10组|  B.1 |  3
 B.2 |  B.2组|  B |  2
 C |  C组| 根|  1个
 C.1 |  C.1组|  C |  2
 

-----

CDS视图

维度表

 @ AbapCatalog.sqlViewName:'YA'
 @ AbapCatalog.compiler.compareFilter:是
 @Analytics:{dataCategory:#DIMENSION}
 @ VDM.viewType:#BASIC
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:"成本中心组"
 定义视图YA_CDS
   带参数
   @消费: {
       defaultValue:" XXX"
   }
   控制区域:kokrs
  
 从setheader中选择为cost_center_group


 左外连接setheadert作为文本在
       cost_center_group.setclass = text.setclass
   和cost_center_group.subclass = text.subclass
   和cost_center_group.setname = text.setname
   和text.langu = $ session.system_language
        
 将[1 .. *]与setnode关联为_Hierarchy
   上
       $ projection.Class = _Hierarchy.setclass
       和$ projection.ControllingArea = _Hierarchy.subclass
       和$ projection.id = _Hierarchy.subsetname
 {
  
   键cost_center_group.setname作为ID,
   text.descript作为名称,
   cost_center_group.setclass作为Class,
   cost_center_group.subclass作为ControlingArea,
  
   count(与_Hierarchy.setname不同)作为HasParent,//尝试在其他视图中求和
   _阶层
  
 }
 哪里
         cost_center_group.setclass ='0101'//成本中心组
     和cost_center_group.subclass = $ parameters.controlling_area
    
 通过...分组
     cost_center_group.setname,
     text.descript,
     cost_center_group.setclass,
     cost_center_group.subclass
  
 

层次结构视图

 @ AbapCatalog.sqlViewName:'YB'
 @ AbapCatalog.compiler.compareFilter:是
 @ AccessControl.authorizationCheck:#检查
 @ObjectModel:{
     dataCategory:#HIERARCHY
 }
 @ VDM.viewType:#BASIC
 @ ObjectModel.representativeKey:'儿童'
 @ Hierarchy.parentChild:
 {
     递归:
         {
             父母:"父母",
             孩子:"孩子"
         },
     兄弟姐妹订单:
         {
             创建人:"儿童",
             方向:" ASC"
         },
     目录:" _ CostCenterGroup"
   }
 @ EndUserText.label:"成本中心组层次结构节点"
 定义视图YB_CDS


 从setnode中选择作为CostCenterGroup


 关联[1..1]到I_ControllingArea作为_ControllingArea
   在$ projection.ControllingArea = _ControllingArea.ControllingArea


 将YA_CDS关联[1..1]作为_CostCenterGroup
     在$ projection.Child = _CostCenterGroup.id上
    
 与YA_CDS关联的[1..1]作为_CostCenterParentGroup
     在$ projection.Parent = _CostCenterParentGroup.id上
 {
     将CostCenterGroup.subsetname键设置为Child,
     _CostCenterGroup(control_area:'XXX').name作为Name,
    
     CostCenterGroup.setname作为父级,
     _CostCenterParentGroup(control_area:'XXX').name作为ParentName,
    
     CostCenterGroup.subclass作为ControlingArea,

     _ControllingArea,
     _CostCenterGroup,
     _CostCenterParentGroup
    
 }


 哪里
     CostCenterGroup.setclass ='0101'
 和CostCenterGroup.subclass ='XXX'
 和CostCenterGroup.subsetscls ='XXX'
 

这两个视图解决了层次结构问题。 为了尝试解决Level列,我尝试在第一个视图中添加一个称为HasParent的列。

我的目标是对它进行某种递归聚合,但是它没有用。 为此,我创建了第三个视图。

 @ AbapCatalog.sqlViewName:'YC'
 @ AbapCatalog.compiler.compareFilter:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:"级别总和"
 将视图YC_CDS定义为从YB_CDS中选择{
     
     儿童,
     名称,
     父母
     父母名字,
    
    //每个非根节点始终= 2-有意义,但不是我所需要的
     lvl + parent_lvl作为node_level,
     
     _CostCenterGroup
 }
 

系统版本:

SAP_ABA 750 SP5

谢谢!