[gelöst] Filter auf FlowField?

22. März 2007 10:10

Guten Morgen,

hab diesmal ein kleines, wahrscheinlich unkompliziertes Problem. :oops:

Ich steige bei den FlowFields und FlowFilter nicht ganz durch, schätze ich:

Ich habe meine selbsterstellte Tabelle um ein FlowField erweitert, welches Datensätze in der selben Tabelle zählt. (Um Doppelte Records zu finden!)

count(MeineTab where (Nr=Field(Nr),Tabelle=Field(Tabelle),Feld=Field(Feld)))

Auf der entsprechenden Form, die die Daten meiner Tabelle anzeigt kann ich nun auf dieses Feld filtern.

Das Problem ist jetzt nur, dass die Geschwindigkeit beim Filtern auf dieses FlowField sehr leidet, aber ich dieses Feld ja auch nicht in die Schlüssel bekomme!

Ich habe in ein paar Beiträgen hier gelesen, dass ich dafür ein FlowFilter benötige. Kann mir jemand sagen, wie genau das funktioniert und ob das meine Geschwindigkeitsproblem löst?

Danke im voraus.
Zuletzt geändert von Dune am 22. März 2007 16:46, insgesamt 1-mal geändert.

22. März 2007 10:18

Gegenfrage:
Wäre es nicht sinnvoller, die Prüfung auf doppelte Datensätze als Funktion auszulagern, die du auf der entspr. Form aufrufen kannst? Oder daraus einen Report zu basteln (besser für die Anzeige der doppelten Datensätze)

22. März 2007 12:08

Hallo Natalie,

der Benutzer sollte später darauf filtern können. Sorry, aber ein Report wird da nicht das richtige für die Anforderungen sein. Eine Funktion wäre vermutlich umständlicher, da ich dann auf sämtliche Möglichkeiten wie Löschen, Einfügen usw. reagieren muss.

Geht´s nicht mit meinem FlowField?

22. März 2007 12:17

Dann formuliere bitte deine Anforderung spezieller:
Was für eine Tabelle mit welchen Felder ist das, was will der Benutzer sehen?
Ich hatte deinen Count-Befehl leider nicht verstanden.

22. März 2007 12:36

Ich setzte gerade ein Änderungsprotokoll um.

Wenn bestimmte Felder geändert werden, wird dies in meiner neuen Tabelle festgehalten. Soweit auch kein Problem.

Jetzt geht´s um die Performance:

Doppelte Datensätze sollen auf der Form markiert werden, da sie auffällig sind. Gleichzeitig möchte ich die Möglichkeit haben, auf diese aufffälligen Datensätze meiner Tabelle zu filtern.

Das Suchen nach weiteren Records übernimmt das FlowField indem es über den Count-Befehl und die eingesetzten Filter Details wie Tabelle, Feld, Bezugsnummer vergleicht.

Es läuft auch alles relativ zufriedenstellend bis auf einige Kleinigkeiten (vgl. weitere Beiträge im Forum).

Das Filtern auf mein FlowField läuft sehr langsam und das ist auf die Dauer nicht praktikabel.

Das Problem einer Funktion wäre, dass ich auf alles "manuell" reagieren muss. D.H. beim Löschen oder Einfügen eines Datensatzes muss ich die records durchsuchen und anpassen.
Damit würde ich mich noch abfinden, obwohl ein FlowField natürlich eleganter wäre, aber ich muss ja in der Funktion jedesmal dieselbe Tabelle filtern und wirkt sich das auch nicht auf meine Form aus?

22. März 2007 12:44

Ich verstehs leider trotzdem nicht....

Dune hat geschrieben:Doppelte Datensätze sollen auf der Form markiert werden, da sie auffällig sind.
Welcher Form? Was zeigt sie auf welche Weise an (Karte? Liste)? Ab wann gelten Datensätze als doppelt (Beispiel!).

Ich stelle mir vor, dass die Datensätze bunt durcheinander gewürfelt sind. Sind sie markiert, sehe ich nicht auf den ersten Blick, wo sich der doppelte Datensatz befindet, richtig?

Gleichzeitig möchte ich die Möglichkeit haben, auf diese aufffälligen Datensätze meiner Tabelle zu filtern.
Das heißt, der Benutzer steht auf einem markierten Datensatz, und nach der Filterung sollen nur dieser und seine "Zwillinge" angezeigt werden?

22. März 2007 13:09

Sorry, ich versuch´s nochmal:

Meine neue Form zeigt in einer Liste die records meiner neuen Tabelle.

In die neue Tabelle werden bei Änderung z.B. des Feldes "VK-Preis" der Artikeltabelle Daten geschrieben. Daten wie z.B. die Tabelle und das Feld in der die Änderung erfolgte sowie die Bezugsnummer (Primärschlüssel) des records der geändert wurde und die Werte vor und nach der Änderung. Und noch ´n paar andere wie Datum und Zeit.

Doppelt, also auffällig ist ein record dieser Tabelle immer dann, wenn das gleiche Feld der gleichen Tabelle der gleichen Bezugsnummer mehrmals geändert wurde. Dann könnte es sein, dass jemand nur kurz einen Preis geändert hat, um diesen schnell berechnen zu lassen und danach wieder korrigiert hat! Und das ist auffällig!

Also, wieder zurück zu meinem Problem: Kann ich irgendwie auf FlowFields filtern (z.B. mit Hilfe von FlowFilter) ohne großen Geschwindigkeitsverlust?

Wenn nicht überleg ich mir was anderes, aber das wäre die beste Lösung.

22. März 2007 13:21

Dauert schon die alleinige Berechnung deines Counts so lange?
Falls nein, würde ich auf die Filterfunktion verzichten und stattdessen den Drilldown ausprogrammieren (sofern überhaupt notwendig).
Dann öffnet sich beim Klick auf dein Count-Feld ein neues Fenster, wo alle "gecounteten" Datensätze dieses Datensatzes angezeigt werden.

22. März 2007 13:28

Die Berechnung dauert nicht lange.

Nur das Filtern auf das FlowField dauert lange und man kann nur langsam von einem record in den nächsten skippen.

Das stört natürlich erheblich. Also meinst du, dass ich das nicht mit einem FlowField lösen kann?

22. März 2007 13:50

Was meinst du jetzt mit Filtern auf FlowField?

Was sieht der Benutzer, was tut er?

22. März 2007 14:15

Die Form zeigt jetzt alle Records der Tabelle.

Ich möchte mir aber jetzt nur alle auffälligen Datensätze anzeigen lassen:

Also Filter ">1" setzen auf mein FlowField (welches die Datensätze zählt).

Schon werden mir nur die angezeigt, die im FlowField >1 stehen haben.

Und genau das dauert länger als Filter auf "normalen" Feldern. Und wie schon gesagt, das Skippen dauert lange.

Kann ich vernüftig auf ein FlowField filtern oder werde ich immer mit Geschwindigkeitsverlust rechnen müssen, wenn ich meinen Filter auf ein FlowField setze?

22. März 2007 14:45

Hm, ich glaube, ich würde das mit einem NormalField lösen:
Bei jedem OnInsert/OnDelete in deiner neuen Tabelle eine Prüffunktion ausführen, die dein "Auffällig-Feld" in allen betroffenen Zeilen aktualisiert.
Dann kann man auch problemlos darauf filtern.

22. März 2007 16:23

@Dune:
Flowfilter beeinflussen die Auswahl der Datensätze, die von der Calcformula bearbeitet werden, hilft also nicht bei Deinem Problem.

Das Filtern auf ein bestimmtes Ergebnis (>1) dauert zwangsläufig länger, weil ja für jeden Datensatz das Flowfield berechnet werden muss, bevor du ein Ergebnis vergleichen kannst.
beschleunigen kannst du das nur mit der Methode, die Natalie zuletzt vorschlug, aber nicht beim Insert oder Delete, sondern als Funktion hinter einem Button, denn die Berechnung muss ja nur einmal erfolgen, wenn du die Überprüfung machen willst. Dann kannst du in Ruhe alles schnell ansehen, da dann die Filterung sehr schnell geht, und nach der Bearbeitung drückst du nochmal auf den Knopf um zu sehen, ob alles besser ist, wenn du Zeilen rausgeworfen hast.

22. März 2007 16:45

Hi Michael,

vielen Dank für deine Antwort. Ich denke, ich werde beides verwenden: das FlowField, um mir Datensätze farbig anzeigen zu lassen und dasselbe nochmal in einer Funktion hinter einem Button, um die Datenätze zu filtern.

Mir war nur wichtig ob ich auf FlowField auch schneller filtern kann.

Danke euch beiden.