![]() |
Datenbank: firebird • Version: 2.0 • Zugriff über: Zeos
Berechnung mit SQL, Vorgehensweise
Hallo an alle... :hi:
ich hätte da gern mal wieder ein Problem. :zwinker: Gegebenheiten: - Tabelle mit Terminen Felder: START, ENDE, DATUM und diverse Statusfelder. Diese Termine werden im TMS Planer visualisiert. - Tabelle mit den Monteuren Felder: NAME und diverse "unwichtige" Aufgabe: - Visualisierung der Prozentualen Auslastung der Tage Was ich brauche: - eine Ergebnismenge (Query) mit dem Datum und der Auslastung in % Auslastung in % := (Summe der Stunden der Termine pro Tag / (Anzahl Monteure * 8 Stunden) ) * 100 Wie würdet ihr vorgehen ? Kann man so etwas direkt im SQL berechnen lassen ? Oder eher SP ? Oder die Daten Clientseitig berechnen lassen und eine Query füllen. PS: ich erwarte keine fertige Lösung, ich will ja noch was lernen. Nur könnt ihr mir ein paar Wattebällchen dazwischen schieben bevor ich gegen die Wand laufe :zwinker: Danke für Info´s :hi: |
Re: Berechnung mit SQL, Vorgehensweise
Ich würde die Query so schreiben, dass sie die "Summe der Stunden der Termine pro Tag" und die "Anzahl Monteure" in zwei getrennten Feldern liefert.
Die Query sieht ganz grob so aus:
SQL-Code:
Die Auslastung würde ich clientseitig mit einem Calculated Field berechnen.
SELECT datum, SUM(stunden) AS WorkingHours, SUM(Monteure) AS WorkersCount FROM ...
GROUP BY datum ORDER BY datum |
Re: Berechnung mit SQL, Vorgehensweise
Danke für deine schnelle Antwort.
was das clientseitige betrifft, habe ich einfach Angst, daß bei der Berechnung die Performance in den Keller geht. Stell dir mal vor, 10 Monteure, jeder 5 Termine am Tag * 1 Monat bzw. bei der Jahresübersicht 365 Tage. Ansonsten machbar. Geht eigentlich eine View, welche über eine SP bei Änderung der Tabelle Termine bzw. Monteure neu berechnet wird, so daß ich nur die View auslesen muß ? |
Re: Berechnung mit SQL, Vorgehensweise
Zitat:
Das Grid zeigt davon vielleicht 30 Datensätze auf dem Bildschirm an; also wird bei jedem Scrollen 30 Mal das Event OnCalcFields aufgerufen. Selbst leistungsschwache Rechner haben mit der einfachen Prozentberechnung kein Problem.
Delphi-Quellcode:
// ungetestet
procedure TForm1.QuerySummeCalcFields(Dataset:TDataset); const WORKING_HOURS_PER_DAY = 8.0; begin Dataset['Auslastung'] := Dataset.FieldByName('WorkingHours').AsFloat / (Dataset.FieldByName('WorkersCount').AsFloat * WORKING_HOURS_PER_DAY) * 100.0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz