AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi wöchentliche Werte mit LocalSQL aus SQLLite holen
Thema durchsuchen
Ansicht
Themen-Optionen

wöchentliche Werte mit LocalSQL aus SQLLite holen

Ein Thema von jensw_2000 · begonnen am 10. Sep 2012 · letzter Beitrag vom 11. Sep 2012
 
jensw_2000
(Gast)

n/a Beiträge
 
#1

wöchentliche Werte mit LocalSQL aus SQLLite holen

  Alt 10. Sep 2012, 22:14
Datenbank: AnyDac LocalSQL (ähnlich SQLLite) • Version: 6.0 • Zugriff über: AnyDac
Ich habe ein Statistik Tool, in dem die Ist-Daten von etwa 100 Mitarbeitern für etwa 50 Kennzahlen ausgewertet werden.
Jetzt sollen wöchentliche Vorgabewerte pro Mitarbeiter und Kennzahl hinzukommen.
Die Vorgabewerte sollen nach dem Schema „ID_Mitarbeiter, ID_Kennzahl, [wöchentlicher Vorgabewert], GültigAb“ definiert werden. So brauchen die Vorgabewerte nicht wöchentlich eingegeben werden, sondern nur wenn sich was ändert. In Schnitt kommen dort nur 2000 - 2500 Datensätze pro Jahr zusammen.

Für die wöchentliche Gegenüberstellung von Ist- und Sollwerten muss ich die Vorgaben für alle Mitarbeiter und Kennzahlen aus den "lose definierten" Vorgaben aufbereiten.

Dabei stehe ich auf dem Schlauch und bekomme langsam einen Knoten im Kopf …

Mein erster Ansatz war:
Delphi-Quellcode:
procedure TVorgabenGenerator.setze_Vorgaben(const startDatum: TDate);
var
   D: TDate;
   const SQL:String =
           'SELECT ID_Mitarbeiter,ID_Kennzahl,Vorgabewert,max(VorgabeDatum) as VorgabeDatum FROM '+
           'Vorgaben WHERE VorgabeDatum <= :Stichtag GROUP BY ID_Mitarbeiter,ID_Kennzahl,Vorgabewert';
begin
   // vorhandene Vorgaben aus temoprärer Statikstik-Tabelle löschen

   // Kalenderwochen ab Startdatum durchlaufen
   D := StartOfTheWeek(startDatum);

   while not(D >= StartOfTheWeek(IncWeek(now,1))) do
   begin
          // Vorgabewerte aller Mitarbeiter und Kennzahlen am Wochenbeginn holen
          
          // Query Parameter :Stichtag auf das Datum D setzen
          // Query ausführen

          // Datensätze durchlaufen und wöchentliche Vorgabewerte pro Mitarbeiter und Kennzahl in die temporäre
          // Statistiktabelle inserten


          // zur nächsten KW
          D := IncWeek(D, 1);
   end;

end;
Dumm ist, dass ich pro Jahr 52 Abfragen gegen die "Datenbank" machen muss.
Zur Zeit sind Vorgabedaten für 5 Jahre vorhanden. Die 260 Abfragen dauern knapp 20 Sekunden.
So richtig flott ist ist das nicht und hochgerechnet wird die Lösung spätestens in 5 -10 Jahren so langsam sein, dass sie niemand mehr benutzen möchte.

Ich hatte auch schon versucht, die kompletten Vorgaben in ein Array einzulesen und die wöchentlichen Werte daraus zu generieren. Das habe ich nachher verworfen.
Dabei müsste ich pro Mitarbeiter und Kennzahl prüfen, ob zum Zeitpunkt "D" ein Vorgabewert existierte und dass Array weiter durchlaufen, falls neuere Vorgaben vorhanden sind. Hochgerechnet müsste das Array 260.000 mal pro "Daten-Jahr" durchsucht werden (100 Mitarbeiter x 50 Kennzahlen x 52 Wochen).
Dann kann unmöglich schneller sein.

Hat jemand von euch eine Idee, wie ich das Problem performant lösen kann?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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