Kostenstellenhierarchie, Kostenartenhierarchie, Profitcenterhierarchie aus SAP ERP im SQL Server auswerten

In diesem Blogbeitrag möchte ich am Beispiel der Kostenstellengruppen zeigen, wie es möglich ist, die Zusammenhänge von SAP-Datenstrukturen zu erkennen und auf Grundlage dieser Erkenntnisse die Daten so zusammen zu führen, um sie für die Aufbereitung eines Datawarehouse nutzen zu können.

Vorab exemplarisch die Struktur,  wie in SAP die Darstellung der Kostenstellgruppen aussieht:

image

Zunächst habe ich die betroffenen Tabellen (SETHEADER, SETHEADERT, SETNODE und SETLEAF) in eine SQL Server Datenbank importiert. SETHEADER enthält den Topknoten. Hier erhält man über den Wert in Settype die Information, ob der Oberknoten (parent) weitere Subknoten (childs) besitzt. Ist dies der Fall, signalisiert das der Buchstabe S. Wenn es keine Subknoten gibt, steht für settype ein B. Über den Wert in SETCLASS kann man die Suchergebnisse einschränken. Für die Kostenstellengruppe wählt man 0101, Kostenartengruppen = 0102 und Profit-Center-Gruppen = 0106.

SELECT DISTINCT

       [SAP_SETHEADER].[MANDT]

      ,[SAP_SETHEADER].[SETCLASS]

      ,[SAP_SETHEADER].[SUBCLASS]

      ,[SAP_SETHEADER].[SETNAME]

      ,[SETTYPE]

      ,[CREDATE]

      ,[CRETIME]

      ,[UPDUSER]

      ,[UPDDATE]

      ,[UPDTIME]

      ,[SAPRL]

      ,[TABNAME]

      ,[FIELDNAME]

      ,[ROLLNAME]

      ,[DESCRIPT]

  FROM [sap_demo_cgl].[dbo].[SAP_SETHEADER]

  INNER JOIN SAP_SETHEADERT ON SAP_SETHEADER.SETNAME = SAP_SETHEADERT.SETNAME

  where SAP_SETHEADER.SETNAME = ‚C1‘

  AND SAP_SETHEADER.SETCLASS = 0101

image

Anmerkung: Den join auf SETHEADERT führe ich durch, damit ich den genauen Namen der Kostenstellengruppe erhalte.

Möchte man nun mehr über die Subknoten erfahren, begibt man sich mit dem Wert aus Setname in die Tabelle SETNODE.

image

Das Ergebnis zeigt, dass es für diesen Knoten weitere Subknoten (SUBSETNAME) gibt. Man kann nun entweder in die Tabelle SETHEADER gehen und dort überprüfen ob es weitere Subknoten für den SUBSETNAME gibt, oder man ändert einfach den Wert aus der vorherigen Abfrage.

SELECT DISTINCT

       SAP_SETNODE.[MANDT]

      ,SAP_SETNODE.[SETCLASS]

      ,SAP_SETNODE.[SUBCLASS]

      ,SAP_SETNODE.[SETNAME]

      ,[LINEID]

      ,[SUBSETCLS]

      ,[SUBSETSCLS]

      ,[SUBSETNAME]

      ,[SEQNR]

      ,[DESCRIPT]

  FROM [sap_demo_cgl].[dbo].[SAP_SETNODE]

  INNER JOIN SAP_SETHEADERT ON SAP_SETNODE.SETNAME = SAP_SETHEADERT.SETNAME

  WHERE SAP_SETNODE.SETNAME = ‚C1200‘

  AND SAP_SETNODE.SETCLASS = 0101

image

Hat man die letzte Hierarchiestufe erreicht, kann man mit den Wert für SETNAME in der Tabelle SETLEAF alle SETS für die jeweilige Gruppe anzeigen lassen.

Für einen join auf die Tabelle der Kostenstellenstammsätze (CSKS) verwende ich folgendes Statement:

image

Die Kostenartenstammsätze befinden sich übrigens in der Tabelle CSKA und die Profit Center Stammdaten in der Tabelle CEPC.

Mit Hilfe eines Self-Joins kann man sich die Kostenstellenhierarchie auch übersichtlich mittels einer Abfrage anzeigen lassen.

image

SELECT DISTINCT

          Rootknoten.[SETCLASS] as Kostenstelle

         ,Rootknoten.[SETNAME] as KST_Key_Level1

         ,Level1Knoten.[DESCRIPT] as KST_Name_Level1

         ,Kind_1.[SETNAME] as KST_Key_Level2

         ,Level2Knoten.[DESCRIPT] as KST_Name_Level2

         ,Kind_2.[SETNAME] as KST_Key_Level3

         ,Level3Knoten.[DESCRIPT] as KST_Name_Level3

         ,Kind_2.[SUBSETNAME] as KST_Key_Level3

         ,Level4Knoten.[DESCRIPT] as KST_Name_Level4

         ,VALFROM

         ,VALTO

         ,SAP_CSKS.KOKRS

         ,SAP_CSKS.KOSTL

 

 

  FROM   [sap_demo_cgl].[dbo].[SAP_SETNODE] Rootknoten

  INNER JOIN dbo.SAP_SETNODE Kind_1 on Rootknoten.SUBSETNAME = Kind_1.SETNAME

  INNER JOIN dbo.SAP_SETNODE Kind_2 on Kind_1.SUBSETNAME = Kind_2.SETNAME

  INNER JOIN dbo.SAP_SETLEAF  on Kind_2.SUBSETNAME = dbo.SAP_SETLEAF.SETNAME

  INNER JOIN dbo.SAP_SETHEADERT Level1Knoten on Rootknoten.SETNAME = Level1Knoten.SETNAME

  INNER JOIN dbo.SAP_SETHEADERT Level2Knoten on Kind_1.SETNAME = Level2Knoten.SETNAME

  INNER JOIN dbo.SAP_SETHEADERT Level3Knoten on Kind_2.SETNAME = Level3Knoten.SETNAME

  INNER JOIN dbo.SAP_SETHEADERT Level4Knoten on Kind_2.SUBSETNAME = Level4Knoten.SETNAME

  INNER JOIN dbo.SAP_CSKS on SAP_CSKS.KOSTL between valfrom and valto

 

  WHERE

  Rootknoten.SETNAME = ‚C1‘

  AND Level1Knoten.LANGU = ‚Z‘

  AND Level2Knoten.LANGU = ‚Z‘

  AND Level3Knoten.LANGU = ‚Z‘

  AND Level4Knoten.LANGU = ‚Z‘

image

Hier kann man sehr schön sehen, dass die Kostenstellengruppe C1 (KST_KEY_Level1) die Gruppe C1000 (KST_Key_Level2) enthält, welche u.a. die Gruppen C1200, C1300 und C1400 (KST_Key_Level3) besitzt. 

Ich habe die Description Language eingeschränkt, damit mir die japanischen und russischen Erklärungen nicht angezeigt werden. Beachten Sie bitte, dass eine Kostenstellengruppe mit obiger Abfrage allerdings auch nicht angezeigt wird, wenn die gewählte Sprache für eine Kostenstellengruppe in der Tabelle SETHEADERT nicht vorhanden ist.

3 Antworten auf „Kostenstellenhierarchie, Kostenartenhierarchie, Profitcenterhierarchie aus SAP ERP im SQL Server auswerten“

  1. Echt 1 nice Anleitung, hat mir bei meinem Problem geholfen. War aber garnicht so leicht, dass in die ABAP Query zu übersetzen. Danke!

    1. Moin, könnte man das SAP Query evtl. veröffentlichen bzw. teilen? Ich finde das nämlich interessant, würde es aber nicht schaffen es nachzubauen.

Schreibe einen Kommentar