Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Berechnung mit SQL, Vorgehensweise (https://www.delphipraxis.net/145644-berechnung-mit-sql-vorgehensweise.html)

haentschman 5. Jan 2010 18:58

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:

sx2008 5. Jan 2010 19:07

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:
SELECT datum, SUM(stunden) AS WorkingHours, SUM(Monteure) AS WorkersCount FROM ...
GROUP BY datum
ORDER BY datum
Die Auslastung würde ich clientseitig mit einem Calculated Field berechnen.

haentschman 5. Jan 2010 19:19

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ß ?

sx2008 5. Jan 2010 19:31

Re: Berechnung mit SQL, Vorgehensweise
 
Zitat:

Zitat von haentschman
... habe ich einfach Angst, daß bei der Berechnung die Performance in den Keller geht.

Die Daten werden doch über die GROUP BY Klausel verdichtet - pro Tag nur ein Datensatz.
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 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz