ich habe (mal wieder) eine Nuss zu knacken und weiß nicht so recht, ob das was ich mir überlege, Sinn macht bzw. umsetzbar ist.
Ich möchte Ausprägungen in einem Hierarchie-Merkmale ( wie z.B. OrgEinheit ) auszählen und wenn eine gewisse Anzahl unterschritten wird, sollen diese auf einen Sibling-Node umgeschrieben werden.
Kleines Beispiel:
- DSO mit 10 Datensätzen
- 8 Datensätze haben als OrgUnit 0000001
- 2 Datensätze haben als OrgUnit 0000002
- Programm erkennt, dass OrgUnit 0000002 nur 2 mal besetzt ist und schlüsselt die zugehörigen Datensätze auf OrgUnit 0000001 um
Sicherlich ist das machbar. Aber Du hast zu wenig über die Begleitumstände geschrieben. Von was für Orgeinheiten reden wir hier? Welche im HCM, also Tabelle HRP1000? Und stehen die umzuschlüsselnden Sätze auf der Datenbank, oder bezieht sich Deine Frage rein auf interne Tabellen?
Wahrscheinlich. Aber ich habe mit der Art und Weise, wie Daten in einem DSO abgelegt sind und vor allem, wie man darauf zugreifen kann, leider keine Erfahrung, da ich keine Ahnung von SAP BW habe. Du sitzt ja mit Deinem Programm im BW, also nicht im HCM-System, aus dem die Daten stammen, richtig?
Aber welchen Sinn macht es dann umzuschlüsseln? Das HCM-System ist ja für die Daten das führende System; BW dient üblicherweise nur zur Datenauswertung. Wenn Du in BW Daten woandershin umschlüsselst, dann deckt sich Deine Auswertung nicht mehr mit der (durch das HCM-System vorgegebenen) Realität. Korrekturen der Daten (bzw. der Zuordnungen in der HRP1001) können sinnvollerweise nur im führenden System erfolgen.
Ah okay. Naja das umschlüsseln soll im Sinne Aggregatbildung erfolgen,da ich mich momentan mit Methoden zur Anonymisierung beschäftige. Diese Klassifizierung wäre sozusagen ein Teil von Vielen.
Es soll also sichergestellt werden,dass unter einem bestimmten Hierarchieblatt soundsoviel Personen zu finden sind. Falls dem nicht so ist, werden sie mit einem sibling zusammengefasst.
Mit "Sibling" meinst Du eine gleichrangige Orgeinheit, die dieselbe übergeordnete Orgeinheit hat wie die lächerlich kleine? Aber welche willst Du da nehmen? Die bevölkerungsreichste?
Im HCM würde ich Dir helfen können. Da holst Du Dir die Daten aus der HRP1001 und fasst sie dann nach Deinen Vorstellungen zusammen. Wenn Du freilich im BW-System sitzt, dann weiß ich nicht, in welcher Form Dir die Daten serviert werden.
Letztlich wirst Du vermutlich einen ganzen Baum runter wollen und dort alles bearbeiten und ggf. zusammenfassen wollen. Das ist einer der ganz wenigen Fälle, bei denen sich bei mir rekursive Programmierung bewährt hat. Du musst also eine Unterroutine schreiben, die sich für jeden Unterbaum selber aufruft und die Ergebnisse dann hochreicht. So bekommst Du eine Tabelle aller Orgeinheiten, die unter der von Dir gewählten Wurzel liegen, zusammen. Darin kannst Du auch Spalten für die Ebene oder die nächsthöhere Orgeinheit der jeweils betrachteten Orgeinheit vorsehen. Über die könntest Du dann LOOPen und bei jeder Orgeinheit darin schauen, welche anderen Orgeinheiten dieselbe nächsthöhere Orgeinheit haben. So schaust Du dann, welche Tabelleneinträge Du verschmelzen musst.
Die Verschmelzung musst Du dann wahrscheinlich von unten nach oben vornehmen, denn es kann ja sein, dass die Siblings auch alle lächerlich klein sind und auch wenn Du sie fusionierst, immer noch eine lächerlich kleine Orgeinheit übrigbleibt. Nach Deiner Logik müsste die dann vermutlich mit einer anderen Orgeinheit der nächsthöheren Stufe verschmolzen werden.
Ist eine reizvolle Aufgabe! Erst rekursiv inder HRP1001 den Baum runter in eine interne Tabelle, dann die interne Tabelle über die Spalte mit der Stufe (angefagen von der tiefsten Stufe, die in Deinem Baum vorkommt) wieder hoch und Zeilen verschmelzen. So würde ich da rangehen.
danke erstmal für deine ausführliche antwort und sorry, dass meine replies manchmal etwas dauern. bin nur werkstudent und nur ein paar tage die woche vor ort.
so eine rekursive logik, wie du sie beschreibst, hatte ich auch im sinn. genau, mit sibling meinte ich die gleichrangige orgeinheit im selben level. und wenn der wert dann immer noch nicht ausreicht eine weitere verschmelzung zur nächsten orgeinheit im selben level usw. und im zweifelsfall müssen die zeilen dann zum nächsthöheren knoten gepusht werden. Die auszählung der einzelnen stufen könnte ja dann über sql geschehen, denke ich.
dann bleibt nun nur noch die handarbeit *seufz* und ich werde mich nun mal ransetzen, ein bisschen pseudocode zu entwerfen und das problem anzugehen. ich halte auf jeden fall auf dem laufenden und nerve vielleicht das ein oder andere mal auch noch mit anfänger-fragen :)
Schau dir mal die Funktionsgruppe RSAB an, mit den BAPIs kannst du bestimmt die Daten von der DSO lesen und ändern.
Also erst deine CSV in interne Tabelle einlesen, dann manuell verarbeiten und dann mit BAPI auf DSO speichern. Oder erst von der DSO in interne Tabelle lesen, dann mit der CSV vergleichen und abändern und auf der DSO updaten.
Ich habe auch noch nie mit DSO gearbeitet, kann also auch nicht mehr tun.
Wieso traust du dich nicht, bei deiner Arbeit nach mehr Hilfe zu fragen? Das kann doch nicht sein, dass dir eine Aufgabe gestellt wird ohne dass du eine Ahnung von irgendwas hast. Die rekursive Logik ist hier doch das kleinste Problem.
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )
ich tue mich manchmal echt etwas schwer, nach hilfe auf arbeit zu fragen, das ist wahr.
hab manchmal das gefühl, dass Sachen vorausgesetzt werden, was wahrscheinlich gar nicht der fall ist. Da muss ich wohl noch etwas an mir arbeiten und über meinen Schatten springen.