Summe funktioniert nicht
Guten Morgen alle zusammen.
Ich möchte gerne die Summe aller Leistungsstunden für einen Tag ermitteln. Die Anzahl der einzelnen Stunden werden mit dem Text 'Stunden oder Stunde' in der Tabelle gespeichert.
let currentDate := this.Datum;
let a := sum((select Zeiterfassung)[Datum = currentDate].number(substr(text(Leistungsstunden), 0, index(text(Leistungsstunden), " "))));
Wenn ich die Funktion ohne 'sum' benutzen werden mir die Stunden durch ein Komma getrennt aufgelistet. Wenn ich aber die Funktion mit 'sum' benutze, bekomme ich das Ergebnis '0'.
Ich danke euch schon mal.
VG
Yves
10 Antworten
-
Sorry, das 'number' muss weg. Hatte ich noch vom testen drin. Jetzt stimmt meine Aussage.
VG Yves
-
Hallo Yves, ich denke mal, dass die Erfassung der Stunden in einem Textfeld stattfindet, welches du durch substr auf die Zahl reduzieren willst und dein Code in einer anderen Tabelle läuft. Dann könnte es mit
let currentDate:=this.Datum;
sum((select Zeiterfassung)[Datum=currentDate].number(substr(Leistungsstunden, 0, 2)))
funktionieren, da ich annehme, dass niemand mehr als 24h am Tag arbeitet, reicht die substr auf 2.
Mirko
-
Hallo Monk.
Erstmal danke, aber so einfach mach ich es nicht. :)
Ja, niemand arbeitet mehr als 24 Stundne.
Die Leistungsstunden werden in einem Funktionsfeld in der Tabelle Zeiterfassung berechnet und gerundet.
let performanceHour := round(number(Arbeitsende - Arbeitsbeginn - Pause) / 1000 / 60 / 60 * 4, 0) / 4;
if performanceHour = 1 then
performanceHour + " Stunde"
else
performanceHour + " Stunden"
end
Es gibt für die Mitarbeiter mehrere Arbeitsaufträge am Tag zu unterschiedlichen Projekten. Damit die Mitarbeiter einen Überblick bekommen, wieviele Stunden Sie am Tag schon gemacht haben, möchte ich die Leistungsstunden für den Tag summieren.
Wenn ich jetzt deine Lösung nutze, bekomme ich ein Ergebnis. Es werden aber bei der Berechnung die Nachkommastellen nicht mit berechnet.
Hast du vllt. noch einen Lösungsansatz für mich.
Danke und VG
Yves
-
Eine pragmatische Lösung wäre.
1. lege ein weiteres Funktionsfeld an, nenne es XY (oder so) und berechne
performanceHour := round(number(Arbeitsende - Arbeitsbeginn - Pause) / 1000 / 60 / 60 * 4, 0) / 4
2. verstecke es durch einen Eintrag bei "Feld nur anzeigen, wenn:"
false
3. benutze dieses Feld für die Berechnung, weil damit die Tilgung deiner "Einheiten" Stunde und Stunden entfällt.
let currentDate:=this.Datum;
sum((select Zeiterfassung)[Datum=currentDate].XY)
4. Du könntest auch das originale Funktionsfeld belassen, nennst es um in "Zeit in h" und tilgst die Einheit, die du durch den if-code vergibst.
5. in ruhiger Minute denke ich nochmal über eine Variante mit substr. nach
Mirko
-
Hallo,
ich hätte keine konkrete Lösung - denke aber, dass hier vielleicht das "Rechnen mit Text" die Sache unnötig verkompliziert. Wie wäre es denn, wenn man für die Leistungsstunden zwei Funktionsfelder benutzt? Eines könnte der Kalkulation an sich dienen und versteckt sein (z.B. 'LeistungsStundeKalk') mit folgendem Code:
let performanceHour := round(number(Arbeitsende - Arbeitsbeginn - Pause) / 1000 / 60 / 60 * 4, 0) / 4
Das zweite, angezeigte Feld 'Leistungsstunden' könnte dann mit
LeistungStundeKalk + if LeistungsStundeKalk = 1 then
" Stunde"
else
" Stunden"
end
wunschgemäß anwenderfreundlich angezeigt werden - und mit 'LeistungsStundeKalk' könnte man nach wie vor rechnen...
lg, Torsten
-
Örgs Mirko,
zwei ... ein Gedanke :-)
lg ,Torsten
-
Guten Morgen alle zusammen.
Die Idee, mit dem Berechnungsfeld, hatte ich auch schon. Bekomme ich da aber nicht ,bei einer umfangreichen Anwendung, Performance Probleme?
Hab es jetzt erstmal so umgesetzt.
Vielen Dank für eure Hilfe.
-
Hallo Yves,
kann ich mir kaum vorstellen - Du berechnest so ja nicht mehr, sondern teilst den Code nur auf zwei Berechnungsfelder. Im Gegenzug sparst Du Code auf der Auswertungsseite.
lg, Torsten
-
Falls noch Interesse besteht, dann müßte es so gehen:
let currentDate:=this.Datum;
let Q := sum((select Zeiterfassung).round(number(Arbeitsende - Arbeitsbeginn - Pause) / 1000 / 60 / 60 * 4 / 4));
if = "1" then Q + " Stunde" else Q + " Stunden" end
Mirko
-
let currentDate:=this.Datum;
let Q := sum((select Zeiterfassung)[Datum=currentDate].round(number(Arbeitsende - Arbeitsbeginn - Pause) / 1000 / 60 / 60 * 4 / 4));
if = "1" then Q + " Stunde" else Q + " Stunden" endDatum fehlte.
Content aside
- vor 4 JahrenZuletzt aktiv
- 10Antworten
- 1296Ansichten