doppelte Datensätze vermeiden

A

alwin

Neues Mitglied
Thread Starter
Dabei seit
12.02.2006
Beiträge
19
Reaktionspunkte
0
Hallo,
ich habe wieder mal eine einfache Frage. Könnt Ihr mir sagen wie ich beim Importieren großer Datenmengen nach FM8 doppelte Datensätze vermeiden bzw. gleich entfernen kann?
alwin
 
Hallo alwin,

beim Datenimport gibt es eine Importvariante, die gleiche Datensätze aktualisiert und nur neue Datensätze hinzufügt.
Beim FM 6 heißt die "Passende Datensätze ersetzen" (wird beim FM8 ähnlich heißen).
Grundvoraussetzung ist ein Schlüsselfeld, das in den zu importierenden und den bereits bestehenden Daten identisch ist....

MfG

ThoRo
 
ThoRo schrieb:
Hallo alwin,

beim Datenimport gibt es eine Importvariante, die gleiche Datensätze aktualisiert und nur neue Datensätze hinzufügt.
Beim FM 6 heißt die "Passende Datensätze ersetzen" (wird beim FM8 ähnlich heißen).
Grundvoraussetzung ist ein Schlüsselfeld, das in den zu importierenden und den bereits bestehenden Daten identisch ist....

MfG

ThoRo

Dieses Problem ist genau anders herum. Ich möchte keine Datensätze aktualisieren und sondern das importieren doppelter Datensätze (welche in der zu importierenden Datei doppelt sind) verhindern.

alwin
 
Hallo alwin,

das hatte ich anders verstanden.

Wenn die doppleten Datensätze bereits im Ausgangsmaterial vorliegen, dann gibt es zwei Möglichkeiten:

1. das Ausgangsmaterial vor dem Import in FileMaker aufbereiten
oder
2. in FileMaker nach dem Import anhand einer Funktion die doppelten Datensätze suchen und löschen.

Beim Import selbst kann leider nicht gefiltert werden....

Grundsätzlich ist es besser erst gar keine doppelten Datensätze zu importieren, das nachträgliche Suchen und Löschen ist aufwendig und fehleranfällig.

MfG

ThoRo
 
ThoRo schrieb:
Hallo alwin,

das hatte ich anders verstanden.

Wenn die doppleten Datensätze bereits im Ausgangsmaterial vorliegen, dann gibt es zwei Möglichkeiten:

1. das Ausgangsmaterial vor dem Import in FileMaker aufbereiten
oder
2. in FileMaker nach dem Import anhand einer Funktion die doppelten Datensätze suchen und löschen.

Beim Import selbst kann leider nicht gefiltert werden....

Grundsätzlich ist es besser erst gar keine doppelten Datensätze zu importieren, das nachträgliche Suchen und Löschen ist aufwendig und fehleranfällig.

MfG

ThoRo

Hallo ThoRo,

mein Problem ist, das der Ausgangsdatensatz sehr viele retundante Daten hat, weswegen ich sie in mehrere Tabellen normalisieren möchte und dafür aber andere Parameter der Datensätze mit retundanten Parametern für weitere Tabellen brauche. Somit kann ich die Datensätze mit retundanten Parametern in der Ausgangsdatei nicht löschen. Und um doppelte zu suchen und dannn von Hans so zu löschen, dass im einer übrig bleibt, habe ich einfach zu viele Datensätze.

alwin
 
Hallo alwin,

Und um doppelte zu suchen und dannn von Hans so zu löschen, dass im einer übrig bleibt, habe ich einfach zu viele Datensätze.

das Suchen und Löschen muß ja nicht von Hand geschehen, FileMaker kennt ja bei der Suche einen Platzhalter für doppelte Werte: "!" (sofern man nicht zu Schleifenkonstruktionen mit Markierungsfeldern greifen möchte).

Was ich bislang noch nicht so ganz verstehe, ist, was da an Datenmaterial ankommt...
Wenn es sich um Datensätze mit teilweise redundanten Angaben handelt, die nach dem Import in einer oder mehreren Tabellen "aufbereitet" werden sollen ("Normalisierung"), dann müssen doch erst alle Daten eingelesen werden, da ansonsten die Aufbereitung ja nicht stattfinden kann. Erst danach kann nach Doppelungen gesucht werden...

MfG

ThoRo
 
Die Menge der Datensätze wird es doch wohl nicht sein.
Angenommen, Du hast eben 10.000 Datensätze importiert, darunter 1.000 Doubletten. Die suchst Du mit der Suche nach Doubletten. Die Sucher ergibt 1.001 Datensätze, weil einer dieser Datensätze schon in der Datei enthalten war. Den schließt Du aus und löscht die verbleibenden 1.000 Datensätze. Das geht mit Script und dauert vielleicht einige Sekunden.
 
ThoRo schrieb:
Hallo alwin,



>das Suchen und Löschen muß ja nicht von Hand geschehen, FileMaker >kennt ja bei der Suche einen Platzhalter für doppelte Werte: "!" (sofern >man nicht zu Schleifenkonstruktionen mit Markierungsfeldern greifen >möchte).

Wenn ich mit "!" suche und die gefundenen Datensätze lösche, dann bleibt von den doppeltenn keiner zurück, sondern es werden beide gelöscht. Also muss ich doch von Hand so löschen, dass immer einer stehen bleibt.



>Wenn es sich um Datensätze mit teilweise redundanten Angaben handelt, >die nach dem Import in einer oder mehreren Tabellen "aufbereitet" >werden sollen ("Normalisierung"), dann müssen doch erst alle Daten >eingelesen werden, da ansonsten die Aufbereitung ja nicht stattfinden >kann. Erst danach kann nach Doppelungen gesucht werden...

Ich dachte es wäre besser von vornherein einzelne Tabellen anzulegen und dann direkt in die einzelnen Tabellen zu importieren (aus einer Excel-Datei).

MfG
alwin
 
joachim14 schrieb:
Die Menge der Datensätze wird es doch wohl nicht sein.
Angenommen, Du hast eben 10.000 Datensätze importiert, darunter 1.000 Doubletten. Die suchst Du mit der Suche nach Doubletten. Die Sucher ergibt 1.001 Datensätze, weil einer dieser Datensätze schon in der Datei enthalten war. Den schließt Du aus und löscht die verbleibenden 1.000 Datensätze. Das geht mit Script und dauert vielleicht einige Sekunden.

Es ist aber leider nicht uter 10000 Datensätzen einer, der 1000 ma vorkommt, sondern es sind unter den 100000 Datensätzen 1000 die zweimal und 1000 Datensätze die 3 mal vorkommen. (zumindest vom Prinzip)
MfG
alwin
 
Genau für solche Fälle, die Du jetzt beschreibst, ist eine Datenbank auch da.

Warum soll folgendes nicht funktionieren: Du markierst alle Datensätze in Deiner Datei (zB mit "ok", "ja" oder so ähnlich).
Dann importierst Du.
Dann suchst Du alle Doubletten (die bei Dir zweimal vorkommen), und schließt in der Abfrage Deine markierten Datensätze aus. Die Ergebnismenge wird gelöscht.
Dto. mit weiteren Doubletten (die bei Dir dreimal vorkommen).
Das ist doch wohl alles in einem Script unterzubringen.

So jedenfalls nach den Beschreibungen, die Du bislang zu dem Problem gegeben hast.
 
joachim14 schrieb:
Genau für solche Fälle, die Du jetzt beschreibst, ist eine Datenbank auch da.

Warum soll folgendes nicht funktionieren: Du markierst alle Datensätze in Deiner Datei (zB mit "ok", "ja" oder so ähnlich).
Dann importierst Du.
Dann suchst Du alle Doubletten (die bei Dir zweimal vorkommen), und schließt in der Abfrage Deine markierten Datensätze aus. Die Ergebnismenge wird gelöscht.
Dto. mit weiteren Doubletten (die bei Dir dreimal vorkommen).
Das ist doch wohl alles in einem Script unterzubringen.

So jedenfalls nach den Beschreibungen, die Du bislang zu dem Problem gegeben hast.

Sorry, ich kann leider nicht folgen.
Ich habe eine große Excel-Liste, deren einzenlne Spalten ich in verschiedene Tabellen imporiteren will um retundante Daten zu eliminieren. Meine FM Datei ist noch leer, oder enthält nachdem ich die 10000 Datensätze importiert habe diese 10000 Datensätze mit viiiielen Doubletten. Ich habe also keinen Datensatz ohne Doubletten, den ich vorher markieren kann.
Ich bin ja auch sicher, dass man ein hübsches Script dafür machen kann. Aber ich weiss als Anfänger leider gar nicht wie.
alwin
 
Hallo alwin,

jetzt kommen wir der Sache näher...

Ein Lösungsansatz wäre folgender:

1. Schritt: Daten aus der ersten Excel Spalte in FileMaker importieren.
2. Schritt: Dubletten suchen mit "!" (doppelte Datensätze werden sortiert ausgegeben)
3. Schritt: scriptgesteuert nur die überzähligen Datensätze löschen.

Das Script zum 3. Schritt sieht - sinngemäß - folgendermaßen aus (Achtung: alles noch in FM 6 Namensgebung - ich ignoriere den 8er zur Zeit noch konsequent):

Gehe zu ersten Datensatz
Feldwert in Variablenfeld schreiben (für späteren Abgleich)
Gehe zu nächstem Datensatz
Schleife
Wenn "Aktueller Feldwert" gleich Variablenfeld
-> Markierungsfeld auf Löschen setzen
Sonst
-> Feldwert in Variablenfeld schreiben
Ende-Wenn
Gehe zu nächstem Datensatz (nach letztem beenden)
Schleife-Beenden

Danach Suchen in Markierungsfeld nach "Löschen" und alle gefunden Datensätze löschen.

Wie gesagt, die Funktionsnamen sind in FileMaker 8 etwas anders und der Schleifenablauf ist sinngemäß zu verstehen....

Hoffentlich hilfts weiter...

MfG

ThoRo
 
ThoRo schrieb:
Hallo alwin,

jetzt kommen wir der Sache näher...

Ein Lösungsansatz wäre folgender:

1. Schritt: Daten aus der ersten Excel Spalte in FileMaker importieren.
2. Schritt: Dubletten suchen mit "!" (doppelte Datensätze werden sortiert ausgegeben)
3. Schritt: scriptgesteuert nur die überzähligen Datensätze löschen.

Das Script zum 3. Schritt sieht - sinngemäß - folgendermaßen aus (Achtung: alles noch in FM 6 Namensgebung - ich ignoriere den 8er zur Zeit noch konsequent):

Gehe zu ersten Datensatz
Feldwert in Variablenfeld schreiben (für späteren Abgleich)
Gehe zu nächstem Datensatz
Schleife
Wenn "Aktueller Feldwert" gleich Variablenfeld
-> Markierungsfeld auf Löschen setzen
Sonst
-> Feldwert in Variablenfeld schreiben
Ende-Wenn
Gehe zu nächstem Datensatz (nach letztem beenden)
Schleife-Beenden

Danach Suchen in Markierungsfeld nach "Löschen" und alle gefunden Datensätze löschen.

Wie gesagt, die Funktionsnamen sind in FileMaker 8 etwas anders und der Schleifenablauf ist sinngemäß zu verstehen....

Hoffentlich hilfts weiter...

MfG

ThoRo

Hallo ThoRo,
super - das klingt ganz doll nach meinem Problem.
Ich habe das auch mal probiert, leider funktioniert es nicht. Darf ich so unverschämt sein und Dich noch nach meinem Fehler fragen? Hier ist mein Script:

Gehe zu Datens./Abfrage/Seite [ Letzte(r) ]
Variable setzen [ $$v_Hilf; Wert:parameter::parameter ]
Aktuellen Datens. ausschließen
Schleife (Anfang)
Wenn [ $$v_Hilf = Parameter::parameter ]
Datensatz/Abfrage löschen
Sonst
Aktuellen Datens. ausschließen
Ende (wenn)
Verlasse Schleife wenn [ Hole ( DatensatzOffenStatus ) = 0 ]
Schleife (Ende)

Danke
Mfg
alwin
 
Ich rate mal, dass Du unterschiedliche Doubletten hast, zB 10 Datensätze mit dem Textfeld "Alpha", 25 Datensätze mit dem Textfeld "Bravo" und 57 Datensätze mit dem Textfeld "Charly" usw.

Dann wäre es so:
1. Du importierst alle Datensätze (nicht nur ein Feld) in FileMaker.
2. Du läßt mit "!" alle doppelten suchen.
Es werden alle Datensätze angezeigt, die Alpha, Bravo und Charly in einem Textfeld haben.
3. Du kopierst den ersten Wert aus dem Textfeld (Inhalt ist jetzt mal "Alpha") aktivierst Suchen, setzt Alpha ein und lässt nach "Alpha" suchen. Davon schließt Du einen Datensatz aus und löscht den Rest.

Für Bravo und Charly wiederholst Du Schritt 2 und 3.

Vor allem zu Wiederholung von Schritt 2 und 3 ist Schleife im Script sinnvoll.
 
alwin schrieb:
Gehe zu Datens./Abfrage/Seite [ Letzte(r) ]
Variable setzen [ $$v_Hilf; Wert:parameter::parameter ]
Aktuellen Datens. ausschließen
Schleife (Anfang)
Wenn [ $$v_Hilf = Parameter::parameter ]
Datensatz/Abfrage löschen
Sonst
Aktuellen Datens. ausschließen
Ende (wenn)
Verlasse Schleife wenn [ Hole ( DatensatzOffenStatus ) = 0 ]
Schleife (Ende)

Hallo alwin,

da versuchst Du etwas zu viel auf einmal...

anstelle von "Aktuellen Datens. ausschließen" bitte nur zum nächsten Datensatz wechseln.
Auch nicht sofort löschen, sondern nur markieren und später dann die markierten Datensätze löschen.
Durch das Ausschließen und Löschen wird die Position in der Auswahlmenge verändert und man kann nicht sicher sein, auf welchen Datensatz man gerade zugreift. Daher ist es besser nur zu markieren...

Das Schleife-Ende nicht auf die Bedingung "Keine Datensätze" stellen, sonst kommt man aus der Schleife nicht mehr raus... Es reicht einfach zum nächsten Datensatz zu wechseln (mit Option "nach letztem beenden").

Ansonsten sollte es dann eigentlich funktionieren...

Wenn es gar nicht klappt muß ich doch noch den 8er anwerfen und das Script mal eintippen...

MfG

ThoRo
 
Hallo ThoRo,
ich hatte das Script bereits noch einmal von vorn exakt nach Deinem Stickmuster geschrieben und jetzt rechnet er seit 15-20 Minuten. Immerhin sind es 53000 Datensätze. Es scheint aber zu klappen, zumindest reduziert sich die Anzahl der Datensätze kontinuierlich.
Das war eine großartige Hilfe, hilft nicht nur mein Problem zu lösen, sondern auch das Programm kennen zu lernen!
Danke!!
alwin
 
ThoRo schrieb:
Hallo alwin,

da versuchst Du etwas zu viel auf einmal...

anstelle von "Aktuellen Datens. ausschließen" bitte nur zum nächsten Datensatz wechseln.
Auch nicht sofort löschen, sondern nur markieren und später dann die markierten Datensätze löschen.
Durch das Ausschließen und Löschen wird die Position in der Auswahlmenge verändert und man kann nicht sicher sein, auf welchen Datensatz man gerade zugreift. Daher ist es besser nur zu markieren...

Das Schleife-Ende nicht auf die Bedingung "Keine Datensätze" stellen, sonst kommt man aus der Schleife nicht mehr raus... Es reicht einfach zum nächsten Datensatz zu wechseln (mit Option "nach letztem beenden").

Ansonsten sollte es dann eigentlich funktionieren...

Wenn es gar nicht klappt muß ich doch noch den 8er anwerfen und das Script mal eintippen...

MfG

ThoRo

Ich verstehe es immer noch nicht. Ich dachte ich hab es jetzt:

Sortieren [ Angegebene Sortierfolge: Parameter::parameter; Aufsteigend ]
[ Wiederherstellen; Ohne Dialogfeld ]
Gehe zu Datens./Abfrage/Seite [ Erste(r) ]
Variable setzen [ $v_Hilf; Wert:parameter::parameter ]
Gehe zu Datens./Abfrage/Seite [ Nächste(r) ]
Schleife (Anfang)
Wenn [ $v_Hilf = Parameter::parameter ]
Aktuellen Datens. ausschließen
Sonst Variable setzen [ $v_Hilf; Wert:parameter::parameter ]
Ende (wenn)
Gehe zu Datens./Abfrage/Seite [ Nächste(r); Nach letztem beenden ]
Schleife (Ende)

Er rechnet und rechnet und schließt auch einige Datensätze aus, aber läßt immer noch einige Tausend doubletten drinnen.
Wo habe ich etwas übersehen?
alwin
 
Tja,

vielleicht ist ein Script, das nacheinander alle Datensätze abklappert nicht so geeignet, wie die integrierte "!" Funktion.
 
Hallo alwin,

da fehlt ganz am Anfang die Suche nach den doppelten Datensätzen...

alwin schrieb:
Sortieren [ Angegebene Sortierfolge: Parameter::parameter; Aufsteigend ]
[ Wiederherstellen; Ohne Dialogfeld ]
anstelle von Sortieren... beginnst Du besser mit:

Ergebnismenge suchen [Wiederherstellen] (Suchabfrage: Feldwert [!])
Gehe zu Datens./Abfrage/Seite [ Erste(r) ]
Variable setzen [ $v_Hilf; Wert:parameter::parameter ]

alwin schrieb:
Wenn [ $v_Hilf = Parameter::parameter ]
Aktuellen Datens. ausschließen
Sonst Variable setzen [ $v_Hilf; Wert:parameter::parameter ]
Ende (wenn)

Nicht den Datensatz ausschließen, sondern nur in einem zusätzlichen Textfeld eine Markierung setzen (z.B. den Text "Löschen"). Wenn Du den Datensatz ausschließt, geht FileMaker automatsich zum nächsten Datensatz weiter und die Schleife schaltet dann gleich noch einen Datensatz weiter - es bleibt also ein Datensatz komplett ungeprüft.....

alwin schrieb:
Er rechnet und rechnet und schließt auch einige Datensätze aus, aber läßt immer noch einige Tausend doubletten drinnen.
Wo habe ich etwas übersehen?
alwin

Beim Ausschließen. Nach der Schliefe kannst Du dann nach dem Begriff "Löschen" im Textfeld suchen und alle gefundenen Datensätze löschen.

Hoffentlich klappt es jetzt so wie es soll...

MfG

ThoRo
 
Hurra ich habs!!

leider hat es mit
Ergebnismenge suchen [Wiederherstellen] (Suchabfrage: Feldwert [!])
auch nicht funktioniert. Ich habe dann diese Zeile auch noch weg gelassen, den Datensatz vor Starten des Scripts sortiert, und dannn lief es. Mich äergert noch etwas, dass ich nicht verstehe warum. Doch die Freude überwiegt. Daher habe ich den Vorschlag von Joachim14 noch nicht versucht, interessehalber werde ich das aber irgendwann mal noch tun!
Danke allen Beteiligen!
alwin
 
Zurück
Oben Unten