CDS Hierarchien

Übersicht und Begriffe

  • Parent-Child Hierarchien
  • Merkmalshierarchien
  • Hierarchien mit mehreren

Beteiligte Objekte

  • Dimensions-View - Liefert Texte und Attribute, hier wird die Hierarchie später verwendet
  • Hierarchie-Basic-View - Liefert die benötigten Daten für die Hierarchie mit passenden Assoziationen
  • Hierarchie - Die eigentliche Hierarchie

Annotationen

Hierarchie-Basic-View

Der Hierarchie-Basic-View liefert alle Daten für die Hierarchie. Die Namen der Felder ist egal, wir verwenden generische Begriffe.

Felder

  • NodeID - Schlüssel des einzelnen Hierarchieknotens.
  • ParentID - Schlüssel des Elternknotens
  • NodeType - Feldname der Spalte für die Dimension jeweilige Ebene
  • DimensionX - Schlüsselwert für die Dimension, mit dem dann die Daten den Knoten zugeordnet werden. Es kann mehrere für unterschiedliche Ebenen geben. In dem Beispiel die Spalte Project

Assoziationen

  • _Parent - zu sich selber für die Parent-Child Hierarchie
  • _DimensionX - zu der Dimension mit dieser Annotation:

@ObjectModel.foreignKey.association: '_Project'

Beispiel

define view entity zi_97_ProjectsHierBasic
  as select from zi_97_Projects

  //Self-Association for Parent-Child Relation
  association [0..1] to zi_97_ProjectsHierBasic as _Parent 
           on $projection.ParentID = _Parent.NodeID
  association [0..1] to zi_97_Projects as _Project 
           on $projection.Project = _Project.ProjectGuid
{
  key ProjectGuid as NodeID,
      ParentGuid  as ParentID,
      ParentKey   ,
      'Project'    as NodeType,
      
      @ObjectModel.foreignKey.association: '_Project'
      ProjectGuid as Project,
      Name,
      _Parent,
      _Project
}

Hierarchie-View

Die eigentliche Hierarchiedefinition mit spezieller Syntax:

  • Source - Der Hierarchie-Basic-View
  • child to parent assocation - Die Parent-Assozation aus dem Basic-View
  • start where - Eine Bedingung, welche Knoten auf der obersten Ebene liegen
  • siblings order by - Sortierkriterium für Kind-Knoten
  • nodetype - Spaltenname, der den Spaltenname für den Dimension liefert

Felder

  • NodeID und ParentID - Optional
  • NodeType
  • DimensionX - Die Dimensionsfelder. Mit Annotation: @ObjectModel.foreignKey.association: '_Project'
  • $node.* - Optional, von der Hierarchie generierte Felder

Beispiel Hiearchie-View

@AccessControl.authorizationCheck: #NOT_REQUIRED
define hierarchy ZI_97_ProjectsHierarchy
  as parent child hierarchy (
    source zi_97_ProjectsHierBasic
    child to parent association _Parent
    start where ParentKey is initial
    siblings order by Name 
    nodetype NodeType
  )
 
{
    NodeID    ,
    ParentID,
    NodeType,
    @ObjectModel.foreignKey.association: '_Project'
    Project,
        
    _Project,
    $node.hierarchy_rank        as h_rank           ,
    $node.hierarchy_level       as h_level          ,
    $node.hierarchy_parent_rank as h_parent_rank 
}

Dimensions-View

Eine analytische Dimension mit Hierarchie-Assoziation zum Schlüsselfeld.

Annotationen am View

@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'ProjectGuid'

Annotationen an Feldern

  • Schlüsselspalte:
    @ObjectModel.hierarchy.association: '_ProjectHierarchy
    @ObjectModel.text.element: [ 'Name' ]
  • Textspalte:
    @Semantics.text: true
@Analytics.dataCategory: #DIMENSION
@ObjectModel.representativeKey: 'ProjectGuid'
define view entity zi_97_Projects as select from zbc_projects

association [0..1] to ZI_97_ProjectsHierarchy as _ProjectHierarchy 
         on $projection.ProjectGuid = _ProjectHierarchy.Project

{
    @ObjectModel.text.element: [ 'Name' ]
    @ObjectModel.hierarchy.association: '_ProjectHierarchy'
    key project_guid as ProjectGuid,
    
    project_key as ProjectKey,
    parent_guid as ParentGuid,
    parent_key as ParentKey,
    
    @Semantics.text: true
    name as Name,
    
    project_manager as ProjectManager,
    changed_by as ChangedBy,
    changed_at as ChangedAt,
    created_by as CreatedBy,
    created_at as CreatedAt,
    local_changed_at as LocalChangedAt,
    
    _ProjectHierarchy
}