Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Tabelle verschiedener "Generationen" miteinander vergleichen

Begonnen von Ralf26, August 15, 2012, 12:21:02

⏪ vorheriges - nächstes ⏩

Ralf26

Hallo,

ich möchte eine neue Datenbank anlegen, bei der es grob gesagt um Fahrzeuge und deren Standort geht.
Die Daten hierzu stammen aus einer Anwendung, die die Möglichkeit bietet, diese in eine Excel-Tabelle zu exportieren.

Der Export in Excel findet einmal am Tag statt.

Nach dem Export habe ich also eine Excel-Tabelle mit Datenfeldern wie z.B. Datum, Kennzeichen, Standort, Land etc.
Das Problem das jetzt habe - und das ist auch der Grund für dieses Posting - ist, dass ich Tabellen
verschiedener Tage miteinander vergleichen möchte.

Wenn ich beispielsweise wissen möchte, welche Fahrzeuge seit mehr als drei Tagen ihren Standort nicht verändert haben,
muss ich die Daten von drei Tagen miteinander vergleichen.
Die exportierten Daten immer unter der gleichen Tabelle zu speichern, auf die ich dann per Access zugreife, bringt nichts, da ich
ja dann die vorherigen Daten, die ich zum vergleichen brauche, überschreiben würde.

Ich brauche also mindestens drei oder vier "Generationen" die permanent - rollierend - überschrieben werden, damit der Datenberg nicht
ins unermessliche wächst.

Im Moment stehe ich komplett auch dem Schlauch wie ich so etwas anfangen soll.

Falls jemand eine Tip hat, der mich zumindest in die richtige Richtung bringt, wäre ich dankbar.

Vorab schon mal vielen Dank.

Gruß,

Ralf26

compinaut

#1
Hallo,
die Werte der "Generationen" müssen m.E. sogar alle in eine Tabelle. Die Daten müssen an die Tabelle angehängt und nicht überschrieben werden. Dann können die Datensätze in einer Abfrage nach Datum und Kennzeichen sortiert werden. So kann in der Datenblattansicht kontrolliert werden, ob ein Fahrzeug seinen Standort geändert hat. Wie man das aber automatisieren kann, weiß ich auch nicht.

Mit einer Löschabfrage können dann die Datensätze eines bestimmten Datumsbereichs später aus der Tabelle gelöscht werden, wenn der Datenbestand reduziert werden soll.

Gruß
compinaut

P.S. Mit einem Bericht und zwei Gruppierungen für KFZ-Kennzeichen und Standort kann man sehr schnell und übersichtlich erkennen, wie lange ein Fahrzeug an einem Standort war.

Ralf26

Hallo Compinaut,

danke für die rasche Antwort, aber bei einer kontinuierlichen Erweiterung der Tabelle hätte ich das nächste Problem, dass die Datumsfelder dann immer umbenannt werden müssen, um sie miteinander zu vergleichen.
Eine mögliche Lösung, die mir in der Zwischenzeit eingefallen ist (die Access-Götter mögen mir diese Konstruktion mangels detaillierterem Fachwissen verzeihen), ist das speichern der in Excel exportierten Daten unter dem Namen des jeweiligen Wochentages.
Somit habe ich dann zwar mehrere Tabellen (Montag.xls, Dienstag.xls ......) aber dann kann ich über eine Abfrage den aktuellen Wochentag auslesen und dann mit den entsprechenden Daten der Tabelle von vor drei Tagen vergleichen. Bsp. Wenn Wochentag gleich Freitag, dann vergleiche die Daten von Freitag.xls mit denen von Dienstag.xls

Dass die Daten dann wöchentlich wieder neu überschrieben werden, erspart mir darüber hinaus noch eine Löschabfrage und weiter als drei bis vier Tage muss ich eh nicht in die Vergangenheit gehen.
Ich werde das auf jeden Fall mal so probieren. Falls jemand noch eine gute Idee hat, bin ich selbstverständlich dafür dankbar.
Nochmals Danke für die schnelle Antwort.

Gruß,

MzKlMu

Hallo,
das sollte wie vorgeschlagen alles in eine Tabelle. Diese Tabelle lässt sich dann mit einer Abfrage auf einen Zeitraum filtern. Dann eine 2. Abfrage mit einem anderen Zeitraum. Diese beiden Abfragen kannst Du dann gegenüberstellen, wie 2 Tabellen.

Das ganze Vorhaben ist aber ohnehin fragwürdig.
Bei einem korrekten Aufbau der DB sollten solche Dinge überflüssig sein.
Wenn der Standortwechsel mit Datum erfasst ist so lässt sich mit einem entsprechenden Kriterium im Datumsfeld und einer Gruppierung über die Fahrzeuge sehr leicht ermitteln welche Fahrzeuge innerhalb eine Zeitraums nicht gewechelt haben. Mit einer Kalendertabelle lassen sich auch automatisch die Feiertage und Wochenenden berücksichtigen. Den Export nach Excel halte ich für überflüssig.
Gruß Klaus

compinaut

Hallo,
wie das mit dem Vergleich stattfinden soll kann ich nicht nachvollziehen. Die Datensätze aus Excel werden bei meiner Lösung einfach immer an die Tabelle angefügt. Das Datum kommt immer in das Datumsfeld. Da gibt es nichts umzubenennen.

Der Bericht könnte dann wie folgt aussehen:

Fahrzeug
B - DM  123
                            Standort
                            Lager
                                                  Datum
                                                  12.08.2012
                                                  14.08.2012
                                                  15.08.2012
                            Geschäft
                                                  Datum
                                                  13.08.2012

B - DM 234   
                           Standort
                           Lager
                                                  Datum
                                                  13.08.2012
                           Geschäft
                                                  Datum
                                                  14.08.2012
                                                  15.08.2012
usw. für jedes Fahrzeug.

Dann sehe ich doch sofort, dass das Fahrzeug drei Tag am Lager stand und an einem Tag am Geschäft bzw. 1 Tag am Lager und zwei Tage am Geschäft.

Die Löschabfrage ist in ein paar Minuten erstellt und kann täglich ausgeführt werden, um z.B. alle Datensätze mit Datum von vier Tagen vor heute zu löschen ("=Datum() - 4" als Bedingung in der Abfrage).

Gruß
compinaut 

69bruno

Hmmm,

und wenn das Modell aussieht wie

12.08.2012      Lager       B DM 123
                       
                        Geschäft  B DM 234

13.08.2012      Lager       OB BO 0815

???

Wie sieht's denn aus ???

If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

database

Hi,

Zitat...und wenn das Modell aussieht wie ...
Kann es sein, dass es deiner geschätzten Aufmerksamkeit entgangen ist, dass es sich in der Antwort von compinaut um einen Bericht handelt,
der eigentlich so ziemlich jede Darstellung/Gruppierung der abgefragten Daten ermöglicht?  ;)

@Ralf26

"...erspart mir darüber hinaus noch eine Löschabfrage ..."
Ich denke, dass die Ersparnis beim Verzicht auf die 'Wochentags-Exceldateien' erheblich höher sein wird!
Die Löschabfrage erstellst einmal und startest sie mit 2 Mausklicks ...  ::)
Was stört dich denn an dem Vorschlag, dass die Daten an den Bestand angehängt werden sollen?
Ein normalisiertes Tabellenmodell kriegst mit den exportierten Daten kaum geregelt, da müsstest du kräftig Hand anlegen.
Aber so hast du wenigstens die Möglichkeit, die Daten vernünftig abzufragen und darzustellen.



Ralf26

Hallo,

erst mal danke für die zahlreichen Antworten.
Zunächst mal eine grundlegende Info an alle, die den Export nach Excel als fragwürdig oder überflüssig erachten.
Bei den Fahrzeugen handelt es sich um Container, die an verschiedenen Standorten stehen können.
Die einzig vernünftige Informationsquelle ist die Anwendung, die einmal täglich die GPS-Daten sammelt. Diese Informationen können dann in Excel exportiert werden. Es gibt also KEINE andere Datenquelle, die zuverlässig in der Lage ist, den Standort der Container zu bestimmen. Die Excel-Tabelle zu verwenden ist also nicht fragwürdig oder überflüssig, sondern unumgänglich.
Die Idee, für jeden Wochentag eine separate Tabelle anzulegen, habe ich mittlerweile verworfen. Für verschiedene Abfragen (einen Tag, zwei Tage, drei Tage usw.) bräuchte ich jeweils eine separate Abfrage.
Eine neue Idee - von der ich allerdings auch noch nicht weiß wie ich diese umsetzen soll - ist, die Daten von heute, mit den Daten von gestern zu vergleichen. Ist der Standort der gleiche, wird eine Kennzahl für dieses Kennzeichen (Containernummer) von 0 auf 1 erhöht.
Bei der Abfrage am nächsten Tag, wird wieder überprüft, ob der Standort der gleiche wie am Vortag ist. Falls ja, wird die Kennzahl wieder um 1 erhöht, beträgt also jetzt 2, falls nein, wird sie auf 0 gesetzt.
Es müßten also die Daten von "nur" 2 Tabellen (aktuelle Tabelle mit der Tabelle des Vortags) miteinander abgeglichen werden. Die Abfrage wieviele Tage ein Container am selben Lagerort steht, kann dann auf die Tabelle / Abfrage erfolgen in der die Kennzahl steht.
Sorry - falls meine ursprüngliche Anfrage vielleicht etwas mißverständlich war - aber um die in Excel exportierten Daten komme ich nicht herum, da nur über diese Anwendung der Standort über GPS ausgelesen werden kann.
Ich habe bisher noch nie mit Tabellenerstellungabfragen gearbeitet oder Datensätze an eine bereits existierende Tabelle angehängt, um diese miteinander zu vergleichen, von daher muss ich jetzt erst mal selber "Hausaufgaben" machen.
Einstweilen danke an alle, die mich vom Irrweg der Wochentagstabellen weggeführt haben.

Viele Grüße,

Ralf26


DF6GL

Hallo,

Deine "neue Idee" ist überflüssig...   ;)


Hänge  mit einer Anfügeabfrage die Daten aus den jeweils zu verknüpfenden Excel-Tabellen an EINE Access-Tabelle an, wobei lediglich auf das Vorhandensein eines passenden Datums geachtet werden muss. Wenn das in den Excel-Sheets schon vorhanden ist, ok, wenn nicht, dann bei Import/Anfügen das akt. Datum mit übergeben.

Durch geeignete Abfragen (Gruppierung, Sortierung , Aggregat-Funktionen) können alle Deine "Auswertungen" dann realisiert werden.



Ralf26

Hallo Franz vom Bodensee,

ich verstehe zwar den Inhalt Deiner Antwort, bin mir aber nicht sicher ob das so umsetzbar ist.
Selbstverständlich werde ich die Datenbank mit mehreren Tabellen aufbauen und diese auch mit (hoffentlich)
sinnvollen Beziehungen miteinander verknüpfen, aber wenn wir das mal außer acht lassen, geht es hier tatsächlich
nur um eine einzige Excel-Tabelle die von der Struktur so aussieht

Container-ID   Datum       Uhrzeit-GPS-Signal   PLZ   Ort
4711                  14.08.2012   11:00                   10115   Berlin - Musterplatz 1
0815                  14.08.2012   11:00                   22299   Hamburg - Beispielstrasse 10
3333                  14.08.2012   11:00                   80805   München - Hauptstrasse 20
[/table]

Ralf26

Sorry - Beitrag von 08:22 wurde irgendwie zu frü versendet.
Bitte ignorieren - kommt nochmal vollständig

Ralf26

Hallo Franz vom Bodensee,

ich verstehe zwar den Inhalt Deiner Antwort, bin mir aber nicht sicher ob das so umsetzbar ist.
Selbstverständlich werde ich die Datenbank mit mehreren Tabellen aufbauen und diese auch mit (hoffentlich)
sinnvollen Beziehungen miteinander verknüpfen, aber wenn wir das mal außer acht lassen, geht es hier tatsächlich
nur um eine einzige Excel-Tabelle die von der Struktur so aussieht :

Container-ID   Datum            Uhrzeit-GPS-Signal             PLZ                         Ort
4711               14.08.2012                   11:00                 10115            Berlin - Musterplatz 1
0815               14.08.2012                   11:00                 22299            Hamburg - Beispielstrasse 10
3333               14.08.2012                   11:00                 80805            München - Hauptstrasse 20

Wo ich jetzt ein Verständnisproblem habe ist, dass ich aus der Anwendung heraus diese Daten in Excel exportiere - sagen
wir mal am 14.08.2012
Alle Datensätze haben jetzt das Datum 14.08.2012 (siehe oben)
Die Tabelle wird unter Container.xls gespeichert
Container.xls ist mit der Access.mdb verknüpft.
Am nächsten Tag wird aus der GPS-Anwendug heraus wieder ein Export nach Excel gemacht.
Alle Datensätze haben jetzt das Datum 15.08.2012
Diese Daten sollen wieder unter Container.xls gespeichert werden.

Und genau dazwischen muss ja etwas passieren, denn sonst würde ich die Daten ja nur überschreiben.
Nur was da passieren muss, ist mir noch schleierhaft.
Wenn ich die Tabelle vom 14.08. in eine Access-Tabelle mittels einer Anfügeabfrage übertrage und mache das gleiche am nächsten
Tag, habe ich die Doppelte Anzahl von Zeilen. Die Tabelle sieht jetzt - vorausgesetzt das die Container nicht bewegt wurden -
so aus:

Container-ID   Datum            Uhrzeit-GPS-Signal              PLZ         Ort
4711               14.08.2012                   11:00                  10115   Berlin - Musterplatz 1
0815               14.08.2012                   11:00                  22299   Hamburg - Beispielstrasse 10
3333               14.08.2012                   11:00                  80805   München - Hauptstrasse 20
4711               15.08.2012                   11:00                  10115   Berlin - Musterplatz 1
0815               15.08.2012                   11:00                  22299   Hamburg - Beispielstrasse 10
3333               15.08.2012                   11:00                  80805   München - Hauptstrasse 20

Wie ich zeilenweise Datumsdifferenzen herausrechnen soll, weiß ich nicht.
Außerdem wird die Tabelle mit jedem Tag länger und länger.
Da ich in VBA leider nicht sehr fit bin, habe ich bisher versucht, mit den Standards auszukommen, aber wie das ganze mit
der von Dir beschriebenen Anfügeabfrage funktionieren soll, ist mir noch ein Rätsel.

Viele Grüße,

Ralf26

DF6GL

#12
Hallo,


"Und genau dazwischen muss ja etwas passieren, denn sonst würde ich die Daten ja nur überschreiben.
Nur was da passieren muss, ist mir noch schleierhaft."


Nein, es muss (hier) nichts passieren...    ;)

"Wenn ich die Tabelle vom 14.08. in eine Access-Tabelle mittels einer Anfügeabfrage übertrage und mache das gleiche am nächsten
Tag, habe ich die Doppelte Anzahl von Zeilen."

Je nachdem, was später für Auswertungen erforderlich sind, kann das so bleiben...  Sollen keine mehrfachen Einträge notwendig sein, bzw. nicht gewünscht werden, dann kann ein zusammengesetzter Index über die Felder

Container-ID  

Datum
           
(Uhrzeit-GPS-Signal )   hier bin ich mir nicht sicher, ob dieses Feld überhaupt von Belang ist. Wenn am selben Tag mehrere Uhrzeiten "erfasst" werden und dabei eine  Verschiebung stattfinden kann, dann muss dieses Feld bei der Indizierung eingeschlossen werden.  Andererseits ist jedoch eine Zusammenfassung von Datum und dieser Uhrzeit zu einem Feld (wert)  vom Datentyp "Datum/Uhrzeit" zu empfehlen.
       
Ort

in der Access-Tabelle erstellt werden.


Wenn die Anfügeabfrage regelmäßig ausgeführt wird ( jedesmal nach dem Export der neuen Daten aus der "Anwendung"  in die Exceltabelle) , werden nur DS mit unterschiedlichen Werten in den o. g. Feldern angefügt.


"Wie ich zeilenweise Datumsdifferenzen herausrechnen soll, weiß ich nicht."

naja, das kommt schon noch ...   ;)



"Außerdem wird die Tabelle mit jedem Tag länger und länger."


Wen stört das?  Solange die DB-Dateigröße sich nicht dramatisch der 2 GB-Grenze nähert, können wir das mal außen vorlassen...   8)
Außerdem wurde ja schon erwähnt, dass man alte, bzw. nicht mehr nötige Datensätze per Löschabfrage entfernen kann.



Bei der Access-Tabelle sollte zudem auf vernünftige Benamsung geachtet werden (Keine Sonder- und Leerzeichen in Feldnamen, keine reservierten Wörter)


"..Anfügeabfrage funktionieren soll.."

Prinzipiell (als SQL-Statement):

Insert into tblAccessTabelle Select * from tblVerknüpfterExcelSheet


Hierbei können auch die oben erwähnten Feld-Unterschiede z. B. durch Verwendung von Aliasnamen berücksichtigt und/oder auch Berechnungen (z. B. Zusammenfassen von Datum und Uhrzeit in ein Feld) erledigt werden .

compinaut

Hallo,
da ich nun die Daten gesehen habe, würde ich es noch ganz anders machen.

Warum nicht einfach alle Daten in Excel belassen.
Einfach eine neue Tabelle erstellen mit den Feldern der exportierten Datei.
Dann die Daten einfach in die neue Tabelle hinein kopieren.
Daten vom nächsten Tag einfach am Ende einfügen (dazu aber nur die erste Zelle des neuen Bereichs markieren - Excel fügt dann die Felder automatisch an die richtige Stelle ein)
Nun die Daten Sortieren nach gewünschten Kriterien (ob nun Datum oder Container oder beides usw.) und voila - man kann sehen wann welcher Container wo stand und ob er bewegt wurde.
Nun die Sortierung aufs Datum setzen und alle Datensätze eines bestimmten Datums löschen (dazu mit der linken Maustaste auf die Zeilennummern klicken, die gelöscht werden sollen).
Fertig!
Und ohne viel Importieren in Access.
Gruß
compinaut