Hallo Profis,
man soll ja keine Berechnungen in einer Tabelle direkt speichern, sondern immer als berechnetes Feld zur Laufzeit berechnen. Klar ist Fehlerunanfälliger.
So jetzt meine Frage, ich habe in meiner Datenbank mehrere unterschiedliche Abfragen, die aber als Gemeinsamkeit dieses berechnetes Feld haben (also jedes mal der Berechnungsausdruck). Das finde ich problematisch, da ich bei einer Änderung immer alle Abfragen ändern muss.
Gibt es da eine elegantere und trotzdem performante Lösung? Man müsste diese als Funktion oder so auslagern, aber dann müsste ich das ja über VBA berechnen, was bestimmt langsamer ist?
Man müsste sowas wie ne kleine Abfrage erstellen, die nur diese Berechnung anstellt und diese dann in die andere Abfrage einbauen, geht sowas?
Wie stellt ihr das an?
Danke im Vorraus.
Du kannst auf die Tabelle eine Abfrage aufbauen mit dem berechneten Feld (und ggf. weiteren Merkmalen) und diese Abfrage als Basis für weitere Abfragen hernehmen.
ZitatDas finde ich problematisch, da ich bei einer Änderung immer alle Abfragen ändern muss.
Ich auch. Welcher Art ist die Berechnung?
Wenn sich die Berechnung wegen Daten ändert, ist die Berechnung an sich problematisch und mit einem systematischen Fehler behaftet.
Hi,
mit "als Basis" meinst Du die Berechnung einmal erstellen und dann sozusagen kopieren?
Wäre bei Änderungen ja der gleiche Effekt wie bisher, jede Abfrage ändern.
Die Berechnung ansich ist etwas komplexer, mit verschachtelten Wenn () Funktionen. Hab sie gerade nicht zur Hand.
Die Berechnung würde sich eigentlich nicht ändern, höchstens mal im Laufe der Zeit erweitert werden und wenn ich dann nicht mehr alle Abfragen, wo diese Berechnung stattfindet im Kopf habe, wäre das dramatisch. ;p
Zitat von: Xoar am Dezember 15, 2016, 17:22:26Man müsste sowas wie ne kleine Abfrage erstellen, die nur diese Berechnung anstellt und diese dann in die andere Abfrage einbauen, geht sowas?
Ja, genau das ist der richtige Weg.
Du kannst anstelle einer Tabelle auch die "kleine" Abfrage in allen weiteren Abfragen verwenden.
Hallo,
verschachtelte Wenn Funktionen und Berechnungen die erweitert werden müssen, sind immer ein Hinweis auf ein falsches Datenmodell. Das meint auch Ebs mit seiner Anmerkung zum systematischen Fehler.
@PhilS
Ah cool, werd ich mal probieren.
@Klaus
Finde ich in meinem Fall nicht. Falls mal ein zusätzlicher Parameter eingeführt wird, der mit in die Berechnung fließen wird, muss diese ja erweitert werden.
Die verschachtelten Wenn () Funktionen kommen durch meine DateDiff () Funktionen zustande, Zeitsummen 07:30-07:30, evt erinnerst dich noch.
Ich danke euch, Problem sollte damit gelöst sein.
Hallo,
ZitatFalls mal ein zusätzlicher Parameter eingeführt wird, der mit in die Berechnung fließen wird, muss diese ja erweitert werden.
Da beginnt es schon. Zusätzlicher Parameter sollte ein zusätzlicher Datensatz in einer Tabelle sein und nicht zu Änderungen von Formeln führen.
Aber da müsste man wieder ganz von Vorne anfangen. Und wenn ich mich jetzt recht erinnere wurde das Datenmodell schon mal angezweifelt.
Aber lassen wir es dabei.
Hallo,
nur zur groben Erklärung:
du kannst Abfragen auf Tabellen beziehen, aber auch auf Abfragen, weil diese im Prinzip ja auch Tabellen sind.
Beispiel:
du erstellt eine Abfrage, die aus einer Adress-Tabelle (tblAdr) Datensätze selektiert, deren PLZ mit 4 beginnt. Diese Abfrage speicherst du unter dem Namen qryPLZ4.
Jetzt kannst du eine neue Abfrage erstellen, die sich auf qryPLZ4 bezieht.
In deinem Fall:
erstelle eine Abfrage, die die verschachtelten Bedingungen enthält. Dies wird dann deine Basis-Abfrage.
Nun kannst du neue Abfragen erstellen, die als Quelle deine Basis-Abfrage (und nicht die Original-Tabelle) enthalten und weitere Kriterien hinzufügen.
Ich hoffe, ich habe mich verständlich ausgedrückt.
lg
crystal
Jap ich denke schon. Danke