Autor Thema: Summe von zwei sich überschneidenden Zeitspannen  (Gelesen 1817 mal)

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Hallo allerseits,

ich möchte die Summe von zwei Zeitspannen in einer Spalte in einer Ansicht anzeigen.

Bisher habe ich im Dokument 4 Datumfelder: Datum1von, Datum1bis, Datum2von, Datum2bis. Die Summe wird bisher im Dokument nicht berechnet, das wollte ich nur in der Spalte tun. Solange die Zeitspannen sich nicht überschneiden ist das ja ganz einfach.

Aber jetzt kann es vorkommen, dass sich die Zeitspannen überschneiden.

Also 01.01.2023-15.01.2023 und 10.01.2023-20.01.2023

Muss ich wirklich mit einer For-Schleife durch die erste Zeitspanne gehen und prüfen, welche Werte in der zweiten Spanne sind oder gibt es vielleicht noch eine elegantere Lösung?
Oder wäre es generell besser, die Summe schon im Dokument beim Speichern zu berechnen und in der Ansicht nur anzuzeigen?

Vielen Dank schonmal.
Sebastian
« Letzte Änderung: 06.02.23 - 21:20:47 von theBastian »
Domino, Notes, Sametime

pantelis.botsas

  • Gast
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #1 am: 02.02.23 - 09:18:46 »
Hallo Sebastian,

der einfachste Weg wäre, die Zeitspannen als Date Range zu behandeln und daraus Textlisten zu erstellen. Diese setzt man dann als Gesamtliste zusammen und wendet dann ein @Unique darauf an. Das Ergebnis ist eine Liste aller eindeutigen Datumswerte, welche man mit @Elements dann durchzählen lassen kann.

Code
_dateRange1 := @TextToTime("[" + @Text(Datum1von) + " - " + @Text(Datum1bis)+ "]");
_dateRange2 := @TextToTime("[" + @Text(Datum2von) + " - " + @Text(Datum2bis)+ "]");
_result := @Elements(@Unique(@Explode(_dateRange1 : _dateRange2)));

Dokumentation hierzu gibt es hier: https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_EXPLODE.html

Alternativ gibt es noch diese @Formula:
https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_BUSINESSDAYS_FUNCTION.html

Grundsätzlich ist es immer besser, solche aufwändigen Berechungen im Dokument durchzuführen. Dann läuft der Aufbau der Ansicht auch schneller, weil lediglich ein Feldinhalt angezeigt werden muss.
« Letzte Änderung: 03.02.23 - 15:08:04 von pantelis.botsas »

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #2 am: 03.02.23 - 08:21:53 »
Hallo Sebastian,

wie willst Du die "Summe" denn in der Ansichts-Spalte darstellen.
Also im Fall einer Überschneidung sowie im Fall einer Nicht-Überschneidung.
Und wie soll es aussehen, wenn die eine Zeitspanne komplett in die andere Zeitspanne fällt?

-Werner

Offline aoibhneach

  • Aktives Mitglied
  • ***
  • Beiträge: 141
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #3 am: 03.02.23 - 11:18:38 »
Hallo Sebastian,

ist es so gemeint?:

A1|-----------------|E1
            |A2---------------|E2


A1|-------------|E1 .... A2|---------|E2


A1|-------------------|E1
         A2|------|E2


Dann würde ich diese Optionen mit @If nachbilden und die jeweiligen Differenzen bilden.

A2 < E1 --> (A2-A1) + (E1-A1) + (E2-E1)  --> Überlappen
E1 < A2 --> (E1-A1) + (E2-A1)                  --> keinerlei Überlappung
A2 < E1 und E2 > E1 --> (E1-A1)               --> eine Zeitspanne komplett innerhalb der anderen

und dasselbe für den Fall, dass die zweite Zeitspanne früher beginnt(***) etc. (Man kann ja vorher die von beiden jeweils früher beginnende Zeitspanne dem Index "1" zuordnen, u.s.w.)

Entschuldigung, falls ich hier triviales bringe. Ich würde es so machen und eventuell versuchen, mit etwas Überlegen alles noch eleganter zu komprimieren. Die beiden Fälle der Überschneidung kann man evtl. geschickt zusammenfassen.

Oder?

Viele Grüße
Nils

« Letzte Änderung: 03.02.23 - 11:32:24 von aoibhneach »
"Der verlorenste aller Tage ist der, an dem man nicht gelacht hat."

Sébastien-Roch Nicolas de Chamfort

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #4 am: 06.02.23 - 08:15:39 »
Hallo Sebastian,

der einfachste Weg wäre, die Zeitspannen als Date Range zu behandeln und daraus Textlisten zu erstellen. Diese setzt man dann als Gesamtliste zusammen und wendet dann ein @Unique darauf an. Das Ergebnis ist eine Liste aller eindeutigen Datumswerte, welche man mit @Elements dann durchzählen lassen kann.

Code
_dateRange1 := @TextToTime("[" + @Text(Datum1von) + " - " + @Text(Datum1bis)+ "]");
_dateRange2 := @TextToTime("[" + @Text(Datum2von) + " - " + @Text(Datum2bis)+ "]");
_result := @Elements(@Unique(@Explode(_dateRange1 : _dateRange2)));

Dokumentation hierzu gibt es hier: https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_EXPLODE.html

Alternativ gibt es noch diese @Formula:
https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_BUSINESSDAYS_FUNCTION.html

Grundsätzlich ist es immer besser, solche aufwändigen Berechungen im Dokument durchzuführen. Dann läuft der Aufbau der Ansicht auch schneller, weil lediglich ein Feldinhalt angezeigt werden muss.

Das sieht mir doch sehr elegant aus und scheint mein Problem zu lösen.
« Letzte Änderung: 06.02.23 - 12:39:10 von theBastian »
Domino, Notes, Sametime

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #5 am: 06.02.23 - 08:16:57 »
Hallo Sebastian,

wie willst Du die "Summe" denn in der Ansichts-Spalte darstellen.
Also im Fall einer Überschneidung sowie im Fall einer Nicht-Überschneidung.
Und wie soll es aussehen, wenn die eine Zeitspanne komplett in die andere Zeitspanne fällt?

-Werner

In der Spalte soll nur die Summe stehen. Wenn es die Spannen überschneiden, dann brauche ich die Gesamtanzahl.
Domino, Notes, Sametime

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #6 am: 06.02.23 - 08:20:34 »
Hallo Sebastian,

ist es so gemeint?:

A1|-----------------|E1
            |A2---------------|E2


A1|-------------|E1 .... A2|---------|E2


A1|-------------------|E1
         A2|------|E2


Dann würde ich diese Optionen mit @If nachbilden und die jeweiligen Differenzen bilden.

A2 < E1 --> (A2-A1) + (E1-A1) + (E2-E1)  --> Überlappen
E1 < A2 --> (E1-A1) + (E2-A1)                  --> keinerlei Überlappung
A2 < E1 und E2 > E1 --> (E1-A1)               --> eine Zeitspanne komplett innerhalb der anderen

und dasselbe für den Fall, dass die zweite Zeitspanne früher beginnt(***) etc. (Man kann ja vorher die von beiden jeweils früher beginnende Zeitspanne dem Index "1" zuordnen, u.s.w.)

Entschuldigung, falls ich hier triviales bringe. Ich würde es so machen und eventuell versuchen, mit etwas Überlegen alles noch eleganter zu komprimieren. Die beiden Fälle der Überschneidung kann man evtl. geschickt zusammenfassen.

Oder?

Viele Grüße
Nils

Danke Dir Nils, umfangreiche Antwort und bildet glaube so ziemlich alle Möglichkeiten ab. Aber ist die erste Antwort von pantelis.botsas da nicht eleganter?
Domino, Notes, Sametime

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #7 am: 06.02.23 - 08:54:29 »
Zitat
In der Spalte soll nur die Summe stehen. Wenn es die Spannen überschneiden, dann brauche ich die Gesamtanzahl.

Dann sollte das doch einfach sein?

Dann geht der Zeitraum
- vom Minimum von Datum1von und Datum2von:
Code
@Min(Datum1von; Datum2von)
- bis zum Maximum von Datum1bis und Datum2bis: 
Code
@Max(Datum1bis; Datum2bis)

-Werner

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #8 am: 06.02.23 - 08:58:38 »
Genau.
Domino, Notes, Sametime

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #9 am: 06.02.23 - 10:41:21 »
Zitat
In der Spalte soll nur die Summe stehen. Wenn es die Spannen überschneiden, dann brauche ich die Gesamtanzahl.

Dann sollte das doch einfach sein?

Dann geht der Zeitraum
- vom Minimum von Datum1von und Datum2von:
Code
@Min(Datum1von; Datum2von)
- bis zum Maximum von Datum1bis und Datum2bis: 
Code
@Max(Datum1bis; Datum2bis)

-Werner

Das wäre aber ein Problem, wenn die Zeitspannen hintereinander liegen würden und dazwischen noch ein oder zwei Tage frei wären.
Domino, Notes, Sametime

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #10 am: 06.02.23 - 13:26:46 »
So würde ich das jetzt umsetzen und noch @Businessdays verwenden.

Code
_dateRange1 := @TextToTime("[" + @Text(Datum1von) + " - " + @Text(Datum1bis)+ "]");
_dateRange2 := @TextToTime("[" + @Text(Datum2von) + " - " + @Text(Datum2bis)+ "]");
_result := @Unique(@Explode(_dateRange1 : _dateRange2));
_result :=@Sort(_result);
_resultbd := @Transform(_result ;"var";@BusinessDays(@TextToTime(var) ; @TextToTime(var) ; 1:7) );
@Text(@Sum(_resultbd))

Eventuell baue ich dann noch Feiertage mit ein.
« Letzte Änderung: 06.02.23 - 14:48:06 von theBastian »
Domino, Notes, Sametime

pantelis.botsas

  • Gast
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #11 am: 06.02.23 - 20:29:21 »
Hallo Sebastian,

das sieht sehr aufgeräumt und klar verständlich aus.  :D

Ich denke, dass Du das Sortieren auch weglassen kannst. wenn Datum1von immer vor Datum2von liegt.

Damit wirst Du sicher problemlos die Feiertage auch noch mit berücksichtigen können.  ;D

Viel Erfolg
Pantelis

Offline theBastian

  • Senior Mitglied
  • ****
  • Beiträge: 484
  • Geschlecht: Männlich
Antw:Summe von zwei sich überschneidenden Zeitspannen
« Antwort #12 am: 06.02.23 - 21:20:21 »
Ich denke, dass Du das Sortieren auch weglassen kannst. wenn Datum1von immer vor Datum2von liegt.

Das kann ich aber leider nicht sicherstellen. Sollte nicht so sein aber das arbeiten ja User dran. 😉

Feiertage habe ich mit einer zentralen Einstellung gelöst.

Danke für Deine Hilfe. Passt jetzt alles wie gewünscht.

Wer den Code auch nutzt, dran denken, wenn nicht sichergestellt werden kann, dass alle Datumsfelder gefüllt sind, Errorhandling. Sonst ist eine Date Range schnell mal 1899. 😉

Sebastian
Domino, Notes, Sametime

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz