0

Datensätze importieren Tipps vom Profi gefragt

Guten Morgen 

Bekomme Monatlich eine Tabelle mit aktuellen Mitgliedern. Wie würdet ihr den Import machen?

Ich würde gerne die aktuelle Liste immer als Aktives Mitglied sehen und die vorhergehigen Listen (zumindestens den Unterschied (Personen die ausgetreten sind behalten)) Wie würdet ihr da vorgehen. Ich bin bin neu hier und bin beim grübeln wie so etwas am besten gemacht wird. Verschiedene Datensätze Monat für Monat oder ein Datensatz wo immer das Monat mit reingeschrieben wird und alle Daten zusammen immer als integriert wird?

Dann kommt es vor das ich auch ab und zu Händisch eine Person noch Eintragen kann. Die Steuernummer ist der Primär Schlüssel.

Gibt es ein Beispiel irgendwo um sich das anzusehen. Bin gespannt auf Vorschläge und vielen Dank für die Hilfe.

grüsse Claus

9 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Claus, die Frage ist recht allgemein gehalten. Grundsätzlich würde ich wahrscheinlich so vorgehen, eine Import-Tabelle zu erstellen und dort einen Button zu platzieren, der nach dem Import die Datensätze mit der Mitglieder-Tabelle abgleicht und diese ggf. aktualisiert. Wenn jedes Mitglied ein bleibendes, eindeutiges Identifikationskriterium hat (Steuernummer?), dann sollte das kein Problem sein.

    Eine entscheidende Frage dabei wäre, welche Daten die Mitglieder-Liste enthält, die du monatlich bekommst. Stehen da nur aktive Mitglieder drauf oder auch noch zwischenzeitlich ausgetretene Mitglieder, z. B. gekennzeichnet als "inaktiv" oder versehen mit einem Austrittsdatum?

    Eine weitere Frage wäre, in welcher Form du die ehemaligen Mitglieder behalten willst. Sollen alle Mitglieder, aktive und ehemalige, in einer Tabelle gehalten und über eine Kennzeichnung (inaktiv/Austrittsdatum) unterschieden werden? Oder sollen die ausgetretenen Mitglieder in einer eigenen Tabelle namens "Ehemalige" oder so gespeichert (und aus der Mitglieder-Tabelle entfernt) werden? Beide Varianten wären möglich. Welche sinnvoller ist, hängt entscheidend davon ab, was man mit den Daten vorhat. 

    Das sind halt so strukturelle Vorüberlegungen, die man im Grunde nur anstellen kann, wenn man die Ziele und die zugrunde liegenden Daten kennt. Das hilft dir vielleicht noch nicht wirklich weiter, aber konkretere Hilfestellungen kann man nur geben, wenn auch das Problem und die Anforderungen klarer sind.

    Generell lässt sich aber sagen, dass mit Ninox fast alles machbar ist. Zumeist mit überschaubarem Aufwand. Und m. W. gibt es diverse User, die Ninox zur Vereinsorganisation und Mitgliederverwaltung nutzen. Aber DIE Musterlösung gibt es natürlich nicht, weil es ja immer individuelle Parameter gibt wie z. B. bei dir die zu importierenden Mitgliederlisten.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Claus,

    es gibt verschiedene Ansätze dafür. Das erste, was man wissen muss - was für Tabelle bekommst du - excel, csv, txt.....
    Die zweite Frage: von welcher Quelle bekommst du die Informationen - Email, Web-Server, API-Schnitstelle.......
    Von diesen Fragen ist es abhängig ob man die Datenaustausch irgendwie automatieseren kann.
    Gehen wir aber von den einfachsten Fall aus: du hast eine Tabelle in Ninox mit Importfunktionen übertragen und in einem  Monat hast du noch eine Tabelle mit der gleichen Struktur bekommen und diese in Ninox in eine zweite Tabelle übertragen. Nennen wir die beiden Tabellen TAB1 und TAB2. In der Tabelle TAB1 würde ich noch ein Auswahlfeld Status hinzufügen mit Optionen (1:neu,2:ausgetretten,3:aktuell) und ein Datumsfeld namens seit:. In diesem Feld werden wir den Zeitpunkt der Änderungen festlegen. Nehemn wir an die erste Tabelle hast du im September 2019 bekommen. Dann kann man über Massendatenänderung in der TAB1 das Feld Status auf aktuell setzen und das Feld seit: auf 01.09.2019.

    Jetzt kann man mit dem Vergleich anfangen:

    zuerst prüfen wir ob Mitglieder ausgetretten sind. Dafür muss ich für jeden Datensatz der Tabelle TAB1 mit dem Status ungleich 2 prüfen ob eine Datensatz mit der gleichen Steuernummer in der Tabelle TAB2 existiert. Wenn Ja - der Mitglied ist aktuell, wenn Nein - ausgetretten. Das erreichen wir mit einer Schleife:
    ...

    for i in select TAB1 where Status!=2 do
    if cnt(select TAB2 where Steuernummer=i.Steuernummer)=0 then
    i.Status=2
    end
    end

    ...

    Jetzt noch prüfen ob jemand von ausgetrettenenen wieder aufgenommen wurde:

    ...

    for i in select TAB1 where Status=2 do
    if cnt(select TAB2 where Steuernummer=i.Steuernummer)!=0 then
    i.Status=1;
    i.'seit:':=today()
    end
    end

    ...

    Jetzt prüfen wir noch welche Mitglieder dazugekommen sind. Dazu prüfen wir jeden Datensatz in der Tabelle TAB1 und fallse keine übereinstimmung in der TAB2 gibt, fügen wir den Datensatz neu:

    ...

    for i in select TAB2 do
    if cnt(select TAB1 where Steuernummer=i.Steuernummer and Status!=1)!=0 then
    let new:=create TAB1;
    new.Steuernummer:=i.Steuernummer;
    new.Status=1;
    new.'seit:':=today()
    else
    first(select TAB1 where Steuernummer=i.Steuernummer).(Status:=3)
    end
    end

    ...

    Damit das ganze schneller läuft, paken wir die Formel zusammengefasst in einen Button und fügen do as server Befehl hinzu. 

    ...

    do as server

    for i in select TAB1 where Status=2 do
    if cnt(select TAB2 where Steuernummer=i.Steuernummer)!=0 then
    i.Status=1;
    i.'seit:':=today()
    end
    end;
    for i in select TAB1 where Status=2 do
    if cnt(select TAB2 where Steuernummer=i.Steuernummer)!=0 then
    i.Status=1;
    i.'seit:':=today()
    end
    end;
    for i in select TAB2 do
    if cnt(select TAB1 where Steuernummer=i.Steuernummer and Status!=1)!=0 then
    let new:=create TAB1;
    new.Steuernummer:=i.Steuernummer;
    new.Status=1;
    new.'seit:':=today()
    else
    first(select TAB1 where Steuernummer=i.Steuernummer).(Status:=3)
    end
    end

    end

    ...

    Die Formel ist natürlich nicht vollständig und bezieht sich nur an zwei Felder in der Tabelle. Und es gibt bestimmt auch bessere Wege. Aber der Prinzip wird bei Tabellenvergleich ähnlich sein.

     

    Leo

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und wierder war der Copitexter schneller.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    😁

    Schnelligkeit ist nicht alles. Immer wieder erstaunlich, was dir in kurzer Zeit an Lösungsmöglichkeiten einfällt.

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Erstmals vielen Dank für Eure Vorschläge ihr seid auf Zack. Werde es mal versuchen umzusetzen und Probieren.

    (Leonid) Das würde bedeuten das ich für Jeden Monat eine eigene Tabelle habe? Hätte eher an eine Datenstruktur gedacht wo alle Daten stehen würden und nur aktiv oder inaktiv steht und immer die Neuen hinzufügen funktioniert ja auch so?

    (Copytexter) Hätte eher gedacht die Ausgetreten auch zu behalten da ich immer nur Aktuelle Personenliste bekomme (immer Aktive Personen), die Ausgetreten sind scheinen nicht mehr auf. Daher wäre es vielleicht sinnvoller diese zu behalten da ich ab und zu auch Händisch jemand hinzufüge und dann die Daten schon hätte und nur mehr auf aktiv mit aktuellen Datum setzen könnte. 

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Claus,

     

    ich weiss nicht sicher, ob Leo das so gemeint hat - aber ich(!) würde die CSV in eine Tabelle importieren, die so importieren "Rohdaten" gemäß Leos Vorschlag verarbeiten und die Import-Tabelle dann leeren.

     

    lg, Torsten

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Guten Abend habe nun versucht den Tabellen miteinander zu vergleichen.

    Habe Tab1 mit 3 Feldern erstellt (Status (mit Wert aktuell), seit:(01.09.2019), Steuernummer(Steuernnummer)) und Tab2 mit 1x Feld (Steuernummer(Nummer)) habe das obige Skript ausgeführt und es kopiert mir immer alles doppelt mit neuem Datum es scheint als würde er nur die Tab1 kopieren und ein neues Datum hinzufügen. Der Status bleibt auch leer. Wo soll ich den Button mit dem Script ausführen hinterlegen in TAB1 oder TAB2.

    Sorry für die blöden Fragen hier.

     

    Ist im Script vielleicht ein Fehler? 

    Am Anfang steht hier folgendes 

    for i in select TAB1 where Status!=2 do
    if cnt(select TAB2 where Steuernummer=i.Steuernummer)=0 then
    i.Status=2  (in der Script Zusammenfassung am Ende der Antwort steht ein i.Status=1)
    end
    end

    und auch ein paar andere punkte (Klammern zb) sind nicht identisch in der Zusammenfassung.

    Vielen Dank für Eure Mühe.

    mfg Claus

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Claus,

    Asche auf mein Haupt - ich dachte, ich bin so cool, dass ich die Formeln, ohne in Ninox zu prüfen, aus dem Kopf heraus schreiben kann. Pustekuchen. Hier ist ein Beispiel, wo alles funktionieren sollte.

     

    https://www.dropbox.com/s/0jnlgdvf90rnirr/Claus.ninox?dl=0

     

    Leo

    • Claus.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Dank Herr Leo habe es nur mir angesehen und es funktioniert sehr gut.

    Werde damit nun experimentieren Vielen Dank.  

    Kann man Befehle ausklammern im Skript? welches Zeichen kann ich davor stellen? zb "

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 9Antworten
  • 2228Ansichten