Zusammenfassen von Zeiträumen Thema ist als GELÖST markiert

Getting started ... Alles für einen gelungenen Start.
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

Zusammenfassen von Zeiträumen

Beitrag von MS-K (ForumUser / 6 / 0 / 0 ) » 26.02.2020 11:18
Hallo zusammen,
ich habe folgendes Problem.

Ich habe eine Tabelle mit einem Schlüssel und zum gleichen Schlüssel verschiedene Zeiträume, die sich auch überschneiden können. Jetzt wollte ich diese Zeiträume zusammenfassen habe aber irgendwie keine zündende Idee.
Vielleicht hat hier ja jemand eine Idee.

Hier ein Beispiel:

XYZ 01.07.2000 31.12.2015
XYZ 01.07.2008 31.12.9999
XYZ 07.07.2016 31.12.9999 (offen)
Das Ergebnis sollte so aussehen:

XYZ 01.07.2000 31.12.9999

Alternativ ginge auch (falls einfacher)
XYZ 01.07.2000 30.08.2008
XYZ 01.07.2008 30.06.2016
XYZ 01.07.2016 31.12.9999

hat jemand eine Idee?
Danke im Voraus.
Gruß
MSK


Re: Zusammenfassen von Zeiträumen

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) » 26.02.2020 11:48
XYZ 01.07.2000 31.12.2000
XYZ 01.01.2001 30.11.2001
XYZ 01.01.2002 31.12.9999

Und was für ein Ergebnis würdest du hier erwarten? Was willst du haben, wenn es Lücken gibt?

Geht es hier um Personaldaten aus Infotypen?
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: Zusammenfassen von Zeiträumen

Beitrag von MS-K (ForumUser / 6 / 0 / 0 ) » 26.02.2020 11:58
Legxis hat geschrieben:
26.02.2020 11:48
XYZ 01.07.2000 31.12.2000
XYZ 01.01.2001 30.11.2001
XYZ 01.01.2002 31.12.9999

Und was für ein Ergebnis würdest du hier erwarten?

Ergebnis entweder es bleibt alles unverändert oder die ersten beiden Zeiträume werden zusammengefasst und der dritte bleibt unverändert.


Was willst du haben, wenn es Lücken gibt?

Sollte es Lücken geben dann soll der Zeitraum unverändert bleiben.

Geht es hier um Personaldaten aus Infotypen?
Nein

Re: Zusammenfassen von Zeiträumen

Beitrag von DeathAndPain (Top Expert / 1456 / 159 / 331 ) » 26.02.2020 12:22
Dafür gibt es einen wunderbaren, wenngleich undokumentierten SAP-Funktionsbaustein: RHXPROVIDE_PERIODS

Die Benutzung ist relativ einfach: Übergib ihm eine Tabelle mit Zeiträumen, und Du bekommst sie in überschneidungsfreien Häppchen wie von Dir gewünscht zurück.

Zu erwähnen ist noch, dass ich das Coding des Bausteins aus Interesse mal analysiert habe. Er enthält einen kleinen Programmierfehler, der nicht zu falschen Ergebnissen führt, aber die Laufzeit auf ca. das Fünffache erhöht. Deshalb habe ich mir mal eine statische Klasse gebaut, in die ich praktisch das gleiche Coding reingepackt habe, aber ohne den Fehler.

Du kannst den Baustein aber problemlos auch so nutzen, wie er ist. Das ist ganz altes Coding, und das bedeutet performantes Coding, da die damaligen Maschinen noch nicht so schnell gewesen sind, dass man ihnen die Ineffizienz heutiger Codings zumuten könnte.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
a-dead-trousers


Re: Zusammenfassen von Zeiträumen

Beitrag von a-dead-trousers (Top Expert / 3558 / 118 / 926 ) » 26.02.2020 13:08
DeathAndPain hat geschrieben:
26.02.2020 12:22
Zu erwähnen ist noch, dass ich das Coding des Bausteins aus Interesse mal analysiert habe. Er enthält einen kleinen Programmierfehler, der nicht zu falschen Ergebnissen führt, aber die Laufzeit auf ca. das Fünffache erhöht. Deshalb habe ich mir mal eine statische Klasse gebaut, in die ich praktisch das gleiche Coding reingepackt habe, aber ohne den Fehler.
Lass mich raten: Die BINARY SEARCH-Anweisungen.
Wenn die Ausgangstabelle nicht sortiert ist, kommts dadurch zu unnötigen Datenmüll.

Trotzdem kommt bei meinem Testlauf da nicht wirklich das raus, was ich erwartet hätte. Nämlich, dass die "Überschneidungen" aufgelöst werden.

Aus
01.01.2020 bis 10.01.2020
11.01.2020 bis 20.01.2020
Hätte ich das erwartet
01.01.2020 bis 20.01.2020
Zurück kommen aber die ursprünglichen Eingabewerte.

Denoch eine interessante Funktion die ich bislang nicht kannte und vielleicht mal nützlich sein wird (wenn auch etwas modifiziert)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Zusammenfassen von Zeiträumen

Beitrag von a-dead-trousers (Top Expert / 3558 / 118 / 926 ) » 26.02.2020 13:23
a-dead-trousers hat geschrieben:
26.02.2020 13:08
Lass mich raten: Die BINARY SEARCH-Anweisungen.
Wenn die Ausgangstabelle nicht sortiert ist, kommts dadurch zu unnötigen Datenmüll.
Das wars dann doch nicht 😉

a-dead-trousers hat geschrieben:
26.02.2020 13:08
Trotzdem kommt bei meinem Testlauf da nicht wirklich das raus, was ich erwartet hätte. Nämlich, dass die "Überschneidungen" aufgelöst werden.
Zumindest beim Eingangsbeispiel von MS-K kommt das zweite "alternative" Ergebnis raus. Man müsste halt noch selbst irgendwie die "unnötigen" Zeiträume dazwischen rausfiltern. Von daher aber trotzdem TOP.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Zusammenfassen von Zeiträumen

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) » 26.02.2020 13:41
a-dead-trousers hat geschrieben:
26.02.2020 13:23
Zumindest beim Eingangsbeispiel von MS-K kommt das zweite "alternative" Ergebnis raus. Man müsste halt noch selbst irgendwie die "unnötigen" Zeiträume dazwischen rausfiltern. Von daher aber trotzdem TOP.
Nicht ganz. Es wird anders aufgeteilt und ein vierter Datensatz hinzugefügt. Aber vielleicht erfüllt es trotzdem seine Anforderungen.

Vorher:
01.07.2000 - 31.12.2015
01.07.2008 - 31.12.9999
07.07.2016 - 31.12.9999

Nachher-Alternative laut OP:
01.07.2000 - 30.06.2008
01.07.2008 - 30.06.2016
01.07.2016 - 31.12.9999

Nachher nach FuBa:
01.07.2000 - 30.06.2008
01.07.2008 - 31.12.2015
01.01.2016 - 06.07.2016
07.07.2016 - 31.12.9999
( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: Zusammenfassen von Zeiträumen

Beitrag von MS-K (ForumUser / 6 / 0 / 0 ) » 26.02.2020 13:53
Hallo zusammen,

wenn das Ergebnis, so wie am Ende gezeigt, hinhaut, dann ist es genau das was ich brauche. Wenn dann später noch gewünscht kann man ja mit einer "Hilfskrücke" die Zeiträume zusammenfassen.

Ich schaue es mir mal an. Vorab schonmal vielen Dank für die Unterstützung.

Gruß
MSK

Re: Zusammenfassen von Zeiträumen

Beitrag von black_adept (Top Expert / 3434 / 67 / 671 ) » 26.02.2020 13:55
Fehlposting
Zuletzt geändert von black_adept am 26.02.2020 13:56, insgesamt 2-mal geändert.

Re: Zusammenfassen von Zeiträumen

Beitrag von DeathAndPain (Top Expert / 1456 / 159 / 331 ) » 26.02.2020 13:55
Gegenstand dieses FB ist es nicht, Zeiträume zusammenzufassen, sondern sie in überschneidungsfreie Häppchen aufzuteilen, innerhalb derer sich nichts geändert hat (also keiner der Zeiträume geendet ist oder begonnen hat). Wenn Du z.B.

18.12.2018-01.05.2019
01.01.2019-31.12.2019
15.07.2019-01.03.2020

hast, dann wirst Du

18.12.2019-31.12.2018
01.01.2019-01.05.2019
02.05.2019-14.07.2019
15.07.2019-01.03.2020

erhalten. Das ist nützlich, wenn ein Objekt verschiedene Attribute hat und Du beispielsweise einen Report schreiben möchtest, der sie alle tabellarisch ausgibt und immer dann eine neue Zeile erzeugt, wenn sich irgendeines dieser Attribute verändert hat. Bei einer Mitarbeiterliste hast Du z.B. Namen, Kostenstelle, Planstelle, Organisationseinheit (und viele weitere Werte). Jetzt willst Du eine Mitarbeiterliste für das gesamte Jahr 2020 mit all diesen Werten. Dann kann diese inhaltlich nur dann richtig werden, wenn Du für jedes einzelne dieser Felder Änderungen innerhalb des Jahres berücksichtigst und eine weitere Ausgabezeile für den Mitarbeiter und entsprechenden Teilzeitraum erzeugst. Wenn Du mit diesem FB die benötigten Zeiträume vorher klärst, indem Du einfach die Gültigkeitszeiträume aller Teilattribute des Mitarbeiters reinschiebst, sinkt die Komplexität Deiner Programmieraufgabe gewaltig, denn anschließend kannst Du einfach für das Beginndatum jeden Teilzeitraums den Wert aller Teilattribute lesen und brauchst keine Angst zu haben, dass Deine Liste falsch wird, weil am Endedatum vielleicht für irgend eines davon ein anderer Wert gilt.

Das Gleiche könnte man aber sicherlich auch für Materialien oder was auch immer brauchen.
Lass mich raten: Die BINARY SEARCH-Anweisungen.
Wenn die Ausgangstabelle nicht sortiert ist, kommts dadurch zu unnötigen Datenmüll.
Falsch. 😜 Bei der Sortierung hat der Programmierer dieses sicherlich sehr alten Codes eigentlich recht gut mitgedacht und auch ansonsten - im Rahmen dessen, was das damalige ABAP hergegeben hat - recht pfiffig programmiert, was ansonsten zu beeindruckend guter Performance führt. Der Fehler steckt in der FORM xprovide. Der dortige loop at tab kann nämlich aus logischen Gründen nur maximal eine Fundstelle finden (das erschließt sich erst, wenn man sich tief in die Programmlogik reindenkt, was ich vor ca. einem Jahr mal gemacht habe). Deswegen wäre es richtig, ein LOOP - EXIT - ENDLOOP -Konstrukt draus zu machen und den restlichen Code, der sich derzeit im LOOP befindet, dahinter in einen IF SY-SUBRC = 0-Block zu packen.

So, wie es jetzt ist, rast der LOOP jedesmal durch die gesamte Tabelle tab und scheitert bei allen anderen Tabellenzeilen vorhersehbar am darauffolgenden READ TABLE, der nichts finden kann. Da es sich um den inneren von zwei geschachtelten LOOPs handelt, kostet das richtig Rechenzeit! Klassen sind wegen ihres technischen Overheads langsamer als Funktionsbausteine, aber dennoch bringt meine statische Klasse, wie gesagt, nach 20% der Rechenzeit dasselbe Ergebnis.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag (Insgesamt 2):
Legxisa-dead-trousers


Re: Zusammenfassen von Zeiträumen

Beitrag von black_adept (Top Expert / 3434 / 67 / 671 ) » 26.02.2020 14:01
DeathAndPain hat geschrieben:
26.02.2020 13:55
Klassen sind wegen ihres technischen Overheads langsamer als Funktionsbausteine, aber dennoch bringt meine statische Klasse, wie gesagt, nach 20% der Rechenzeit dasselbe Ergebnis.
*Sigh*
Quantifiziere doch bitte mal warum und/oder um wie viel langsamer Klassen sind wenn du schon mit solchen Aussagen um dich wirfst. Oder sollte das etwa das selbe sein wie "ASSIGN ist schneller als INTO" was zwar technisch korrekt aber eigentlich nie spürbar ist.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Zusammenfassen von Zeiträumen

Beitrag von DeathAndPain (Top Expert / 1456 / 159 / 331 ) » 26.02.2020 14:06
Ich habe damals den Baustein so, wie er war, in eine Klasse übernommen und dabei auch ansonsten das Coding modernisiert (LINE_EXISTS anstelle von READ TABLE TRANSPORTING NO FIELDS usw.). Allein davon hatte ich mir schon einen Performancegewinn versprochen. Tatsächlich war das neue Coding aber langsamer als der olle Baustein! Nicht viel und nicht so, dass es groß was ausgemacht hätte, aber halt eine Änderung in die falsche Richtung, denn wenn Du Coding durch effizienteres Coding ersetzt, willst Du kein langsameres Ergebnis haben.

Aber dadurch, dass ich das Coding modernisiert habe, habe ich mich halt reingedacht und bin über den Programmierfehler gestolpert, dessen Behebung dann in meinen Messungen doch dazu geführt hat, dass meine Klasse 5x schneller war, so dass das Theater sich am Ende gelohnt hat.

Und ja, ich habe das damals gemessen, weil ich ja wissen wollte, was es gebracht hat. Die genauen Ergebnisse habe ich jetzt natürlich nicht mehr.

Re: Zusammenfassen von Zeiträumen

Beitrag von a-dead-trousers (Top Expert / 3558 / 118 / 926 ) » 26.02.2020 14:20
DeathAndPain hat geschrieben:
26.02.2020 14:06
Ich habe damals den Baustein so, wie er war, in eine Klasse übernommen und dabei auch ansonsten das Coding modernisiert (LINE_EXISTS anstelle von READ TABLE TRANSPORTING NO FIELDS usw.). Allein davon hatte ich mir schon einen Performancegewinn versprochen.
Hast du bei dem LINE_EXISTS zufällig auch daran gedacht eine sortierte Tabelle zu verwenden? Sonst ist das Teil mit Sicherheit bedeutend langsamer als ein READ TABLE ... BINARY SEARCH.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40

Re: Zusammenfassen von Zeiträumen

Beitrag von DeathAndPain (Top Expert / 1456 / 159 / 331 ) » 26.02.2020 14:21
Bitte halte mich nicht für einen Anfänger!

Re: Zusammenfassen von Zeiträumen

Beitrag von a-dead-trousers (Top Expert / 3558 / 118 / 926 ) » 26.02.2020 14:51
DeathAndPain hat geschrieben:
26.02.2020 14:21
Bitte halte mich nicht für einen Anfänger!
Nein, das auf keinen Fall. Ich seh nur halt LINE_EXISTS nicht als den heiligen, mordernen Gral an, als der er oft dargestellt wird. Vorallem weil man hier so höllisch darauf aufpassen muss, was man als Parameter übergibt (sortierte Tabellen, Komponenten-Namen, Referenzen usw.)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.07
Basis: 7.40


Aktuelle Forenbeiträge

Last erzeugen im SAPGui?
vor 42 Minuten von ewx 18 / 160
IDoc-Segmente löschen
Gestern von littleJohn 2 / 74

Vergleichbare Themen

2 Spalten zusammenfassen
von L0w-RiDer » 21.02.2020 09:06
Loops Zusammenfassen
von BMWi801 » 15.05.2018 13:23
3 BEx Arbeitsmappen zusammenfassen
von kaim77 » 22.05.2012 12:13
Spoolaufträge zusammenfassen
von hezi » 23.01.2006 17:15