speichern von Umsatzstatistik, wie?

  • VB.NET
  • .NET 4.5

Es gibt 79 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    speichern von Umsatzstatistik, wie?

    Hallo ihr lieben.
    In meinem Excelprogramm speichere ich eine Umsatzstatistik, wo ich jeden Tag meine Tageseinnahme nach Warengruppen einragen kann.
    Das ganze sieht folgendermaßen aus:

    DatumWG1WG2WG3WG4WG5WG6WG7WG8gesamtKundenpro kopf= Monatsumsatz / Tage
    01.01.19









    Kundenschnitt=Kundenzahl / Tage
    02.01.19











    03.01.19









    Jahresumsatz=Umsatz bis heute
    04.01.19










    JahresU in %
    05.01.19









    Jahreskunden=Kunden bis heute
    usw.










    JahresK in %
    31.01.19












    =WG1 gesamtWG2 gesamtusw.




    GesamtumsatzGesamtunden






    undhierdanndernächsteMonat


    Dabei wird die leere Tabelle - also Datumsangaben, Überschriften, usw. automatisch per Makro für ein Jahr eingefügt.
    Also wenn das Programm zum ersten mal in einem Jahr gestartet wird, werden im Tabellenblatt links Spalten hinzugefügt, und entsprechend beschriftet.
    So habe ich also für jedes Jahr, die gleiche Tabelle.

    Zusätzlich gibt es noch eine Monatsstatistik - welche per Formel auf die oben gezeigte Tabelle ihre Daten erhält - hier ist nur für jedes Jahr, der Umsatz der Warengruppen, sowie deren Summe dargestellt.

    Wie kann ich diese Daten am besten in einem VB.Net Programm speichern?

    Edit:
    Also ich möchte jeden Tag die Tageseinnahme pro Warengruppe eingeben.
    Diese soll entsprechend Tages -bzw. Monatsweise angezeigt werden können (pro Warengruppe) und auch mit dem vorjahresmonatz verglichen werden - also Juli 2019 wird verglichen mit Juli2018

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    Hallo

    Das kommt immer darauf an. Sollen mehrere Clients auf die Daten zugreifen können, wieviele Daten werden es. (Denke da gerne auch schon mal 10 Jahre vor)
    Soll auch Online darauf zugegriffen werden könen oder nicht, usw.
    Ausserdem musst du für dich entscheiden was du dir selbst zutraust.

    Ich persönlich würde zu einer Datenbank greifen. Egel ob ein relationelles Datenbanksystem oder auch ein NoSQL Datenbanksystem wie z.b. CosmosDB.
    Aber ok, ich liebe Datenbanken, ich greife fast immer lieber zu einer Datenbank, das liegt aber vieleicht auch daran das ich schon mal sooo auf die Nase geflogen bin mit XML da ich es nicht mehr verwenden möchte.

    Bitte beschreibe mal genauer was für Infrastruktur du zur verfügung hast und welchen aufwand du treiben möchtest.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo hallo
    Die Daten sollen nur lokal zur Verfügung stehen, ein Zugriff von außerhalb findet nicht statt.

    Bisher habe ich alles was ich sonst noch so in meinem Programm speichere (Bestellungen, Artikel, usw.)in einem DataSet untergebracht.
    Meine Sorge ist jetzt bereits, dass dies Performancetechnisch nicht lange gut geht.
    Es handelt sich um ca. 20.000 - 25.000 Artikel und ca. (geschätzt) 1.500 bis 2.000 Bestellungen pro Jahr.

    Dies in Kombination mit der Statistik im DataSet, was ja dann nochmal ca. 300 Einträge pro Jahr sind, wird glaube ich
    (allerdings habe ich da keine Ahnung), irgendwann recht viel.
    Man sagte mir aber in einem anderen Thread, dass ich mir bei Datenstzen bis 100.000, oder 150.000 im DataSet keine Sorgen machen muss.

    Also 25.000 Artikel - 5.000 Sonstige Daten (Adressen, usw.) - bleiben noch 70.000
    Wenn ich nun mit - sagen wir mal 3.000 Bestellungen pro Jahr (lieber zu viel, als zu wenig) und 300 Statistikeinträgen pro Jahr rechne, und 2011 eröffnet habe ( also 9 Jahre), habe ich einen Zuwachs von 4.000 - nehme ich dann meine 70.000 Rest, habe ich ca. 18 Jahre Ruhe, bis ich mir Sorgen machen muss, abzgl. 9 Jahre die bereits gespeichert sind, also 9 Jahre.

    Ich hoffe meine Denkweise haut so hin?
    Allerdings habe ich auch keine Ahnung, was eine Datenbank anders, bzw. besser macht als ein DataSet. (Fragezeichen)

    Generell scheue ich den Aufwand nicht. Denn mein bisheriges Excel Programm, speichert einfach sämtliche Daten in der, bzw. in den xlsx Dateien - das ist aber bereits ein Krampf, denn die Haupt xls hat mittlerweile über 20MB. Ich denke das wird in nem halben bis 1 Jahre - performancetechnisch - kein Spaß mehr machen.
    So etwas sollte natürlich nicht mehr passieren.
    Bevor Du Dir an zuviel Spekulatiusessen den Magen verdirbst: Mach Tests. Erstelle 10 Dummy-Jahre mit voller Statistik und Pseudozufallsdaten und dann lass das Programm laufen. Wirst schon sehen, wie stark die Performance einbricht. Ein tDS ist voll im RAM -> super schnell. Aber es kann auch mit der Luft dünne werden, wenn nicht genug RAM da ist. Nur glaube ich nicht, dass Du mit Deinen Daten auch nur in die Nähe komst. Aber hey: testen und schauen. Und in 10 Jahren gibt's neue, schnellere PCs mit noch mehr RAM und bestimt besserer Technik. Da ist dann der Performanceverlust durch zuviele Daten längst eingeholt - falls Du da überhaupt noch mit tDS etc. arbeitest.

    Bzgl. Daten im tDS o.ä. Geschichte: Packe Daten, die sich wiederhole in eine DataTable, z.B. die eines Tages. Und dann leg für jeden Tag eine neue Datenzeile (Du weißt schon: Tds.TagesTabelle.AddTagesTabelleRow(...)) an. Die Auswertung erfolgt dann später durch selektieren/filtern der Daten - so der gaaanz grobe Ablauf.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    ich empfehle dir, ganz unbekümmert weiterzumachen mit DatasetOnly.
    Wenn sich tatsächlich Probleme zeigen, ist es immer noch früh genug, eine Datenbank zu hinterlegen.
    Am Dataset ist dabei dann garnix zu ändern - nur die Befüllung erfolgt dann aus der Datenbank.

    Diese neue Befüllung eröffnet dir dann neue Möglichkeiten: Du kannst entscheiden, welche Tabellen du nur auszugsweise laden willst, und damit ist das Problem des Super-fetten Datasets im Speicher gelöst.
    Das klingt alles ganz einfach, und ist es auch - wenn mans richtig macht.
    Aber dieses Problem hast du so oder so.
    Und je später du es angehst, desto mehr Erfahrung hast du gesammelt.
    Und kann ich auch bei helfen, zb habich eine Anwendung gebastelt, die liest ein typisiertes Dataset ein, und generiert daraus die dazu passende Datenbank.

    Aber wie gesagt: Du kannst getrost abwarten, ob es überhaupt irgendwie schlimm wird.
    Ich hab einmal mit einem Dataset gearbeitet, dass ergab 400MB, wenn mans auf Platte schrieb.
    Ok, das Laden dauerte glaub 15s, aber dann lief die Anwendung flüssig.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ok.
    Dann mache ich erst einmal was @VaporiZed mir empfohlen hat und schmeiße eine utopische Menge TestDaten in mein DataSet und schau mal was so passiert. Wahrscheinlich ja eben nix anderes als mit meinen so gut wie leeren DataSets jetzt auch.
    Und das obwohl die Hardware in meinem Surface 4 hier echt nicht die beste - also das zwei langsamste, was man kaufen kann, ist.
    Und meine Unruhe, falls es bei 300.000 Datensätzen langsam wird hat mir @ErfinderDesRades dann auch genommen.
    Ihr seid die Besten :)

    Nun aber bitte nochmal zum anlegen der DataTable(s)
    Diese werde ich mein verschlüsseltes DataSet integrieren, aber ich bin mir nicht sicher, ob ein DataTable ausreicht, oder ob ich mir nicht einen Gefallen (später bei der Auswertung) tue, wenn ich mehrere DataTable erzeuge.

    Wenn ich einfach alles in ein DataTable haue muss ich, wenn ich zwei Monate vergleiche (z.B. Juli2019 und Juli2018) das gesamte DataTable nach Datumswerten >=01.07.2018 AndAlso <=31.07.2019 durchforsten, für jede Warengruppe die Monatssumme errechnen und das gleiche mit Juli 2018 erledigen, damit ich dann die Summen (also die Monatseinnahme einer Warengruppe) vergleichen kann.
    Das bekomme ich Codetechnisch hin, aber ich habe im Gefühl, dass es irgendwie einfach geht, wenn ich z.B. nur Daten ohne Jahreszahlen speichere, und mir diese aus einer anderen DataTable pule.

    Ich glaube ich mache mir heute Abend mal die Mühe meine bisherige Excel Statistik zu "anonymisieren" und lade das Sheet hier hoch.
    Denn ich habe schon gelernt, dass man sich vorher Gedanken machen sollte, wie das DataSet, bzw. deren DataTable aussehen sollte.
    Das hinterher zu ändern ist Mist...

    DerSmurf schrieb:

    Also ich möchte jeden Tag die Tageseinnahme pro Warengruppe eingeben.
    Diese soll entsprechend Tages -bzw. Monatsweise angezeigt werden können (pro Warengruppe) und auch mit dem vorjahresmonatz verglichen werden - also Juli 2019 wird verglichen mit Juli2018
    Dafür benötigst du eine Tabelle "WarenGruppe" (wenn du die nicht schon hast) und eben "TagesUmsatz"
    Ob du die nun Tages oder Monatsweise anzeigst, ist irrelevant, bzw. ist eine Frage von Filterung.
    Ins Dataset muss nur eine sehr einfache Tabelle mit 4 Spalten (PK, FK auf "WarenGruppe", Datum, Umsatz).
    Tät ich sagn.
    :thumbup:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hmm.
    Meine Mutter hat vor 40 Jahren mal angefangen die Tageseinnahmen in ein Buch zu schreiben.
    Daraus wurden irgendwann Tageseinnahmen nach Warengruppen.
    Irgendwann wurde Handschrift dann durch einen PC ersetzt.
    Dann wurde das ganze in eine aufwendig erstellte Excel Tabelle, mit 100erten (nicht so guten) Formeln gehämmert.
    Mittlerweile hat "die Jugend" eine VBA gestützte Eingabemaske erstellt und eine "sich selbst schreibende" Tabelle zur Auswertung der Daten erstellt.
    Dies will ich nun in VB.Net nachbauen - also Tageseinnahme pro Warengruppe in meinem Programm eingeben und dann statistisch auswerten (Vergleich mit gleichem Monat des Vorjahres, z.B.)
    Bei uns heißt dieses Buch, bzw. diese Exceltabelle einfach kurz Statistik.
    Also korrekterweise müsste es heißen: Ich möchte meine Tageseinnahmen speichern, um diese vom Programm statistisch auswerten zu lassen.
    Warum nicht einfach ein Programm zum Erfassen und zum Auswerten dann was geläufiges? Z.B. PowerBI o.ä. bzw. für statistische Zwecke R-Studio o.ä...oder halt alles selbst.
    So. Ich kram den Thread hier noch einmal aus, denn ich habe nach einer kleinen Pause nun hiermit angefangen.
    Jedoch scheitere ich gerade bereits am Datenmodell.
    Irgendwie habe ich gerade einen Knoten im Kopf.

    Also ziel ist es Tageseinnahmen für verschiedene Warengruppen zu speichern, um diese später auszuwerten.
    also Datum "12.10.19" - WG1 "100€" - WG2 "200€"
    13.10.19 - WG"110€" - WG2 "210€"
    usw.
    Mein Datenmodell habe ich als Bild angehängt.
    Auf der Form habe ich dann, um dies zu testen, erstmal 2 DGVs aus dem DataSet aufs Form gezogen.
    Und zwar "Warengruppe" und die darin geschachtelte "Tagesumsatz".
    Nun kann ich den Warengruppen ein Datum zuordnen - aber müsste das nicht andersrum sein?
    Ich müsste doch meinem Datum die Warengruppen zuordnen?
    Wenn ich aber (um dies zu realisieren), die Beziehung meiner beiden DataTables umdrehe - also in "Warenguppe" einen Fremdschlüssel nach Tagesumsatz erstelle, bekomme ich die beiden DGVs nicht in Beziehung zueinander auf die Form.

    Könnt ihr mir kurz verraten, wo hier mein Denkfehler liegt?

    Ich habe die Projektmappe auch mal angehängt. Hier habe ich noch nichts gemacht, als das DataSet designed - oder es versucht xD.
    Und es sind alle Spalten in den DataTables noch als string.

    Edit:
    Ah - ich glaub ich hab nur die Beziehung im DataSet falsch zusammengeklickt. Scheinbar öfters.
    Habe jetzt mal ein neues Bild angehängt "DataSetKorrekt".
    Jetzt ist das Verhalten so wie ich eigentlich will. Ich ziehe mit das DGV Tagesumsatz auf die Form und anschließend das darin geschachtelte Warengruppen.
    Nun geb ich ein Datum ein und kann für dieses Datum Einnahmen nach Warengruppen eingeben.

    Aber das ist anders als der Lösungssvorschlag vom @ErfinderDesRades aus Post8. Dort rät er die Bezieung andersrum zu gestalten.
    Deswegen Frage ich mal doof nach, ob das korrekt ist, was ich hier so tue
    Bilder
    • DataSet.jpg

      220,79 kB, 1.600×900, 65 mal angesehen
    • Form.jpg

      267,42 kB, 1.600×900, 53 mal angesehen
    • DataSetKorrekt.jpg

      220,67 kB, 1.600×900, 58 mal angesehen
    Dateien
    • Umsatz.zip

      (77,63 kB, 23 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    Und warum nicht so rum: Tabelle1: Warengruppe (bzw: gibt es nur 4? Wenn es x Warengruppen gäbe, müsste die Tabelle umgestaltet werden), Tabelle2: Tagesumsatz, Tabelle3: Zwischentabelle, die sowohl auf einen Tagesumsatz als auch auf eine Warengruppe verweist.
    Aber Moment: Was ist der Tagesumsatz? Wenn es die Summe einzelner Warengruppenumsätze ist, sollte dies nicht gespeichert, sondern errechnet werden. Dafür eine Tabelle anzulegen, wäre Nonsens.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Es sind 8 Warengruppen. Ich habe aus Faulheitsgründen nur die 3 in mein Demoprojekt eingefügt.
    x fände icb auch reizvoll - um dem User nicht einfach 8 Warengruppen vor die Nase zu setzen, obs nun passt oder nicht.
    Allerdings stelle ich mir x deutlich schwerer in der Umsetzung vor. Ich kann den Mehraufwand aber z.B. bei der Eingabe der Daten (über Textboxen) nicht wirklich abschätzen.
    Alao ich habe 8, aber möchte x. Wenn du mir rätst (du kennst mich und meinen Wissenstand ja ein wenig) bei 8 zu bleiben tu ich das.

    Ja, der Tagesumsatz ist der Umsatz aller Warengruppen an einem Tag.
    Diesen würde ich bsi der Eingabe der WG Einnahmen errechnen lassen.
    Bei der Eingabe schweben mir Textboxen für die Einzutragenden Werte vor. Hier wird alles eingetragen und der Tagesumsatz errechnet sich.
    So hab ichs bishrer - in Excel - auch. Hab mal ein Bild meiner jetzigen Eingabemaske angehängt.

    würdest du die Datumswerte dann in der Zwischentabelle speichern?
    Wo wäre hier der Vorteil deines 3 Tabelligen Datenmodells, gegenüber dem 2 tabelligen?
    Also wo ist der Unterschied, wenn ich Datum, TageseinnahmeGesamt und Kunden in einer, oder eben in 2 Tabellen speichere?



    Bilder
    • SharedScreenshot.jpg

      361,84 kB, 2.736×1.824, 55 mal angesehen
    Bevor ich Dir in Deinem Datenmodell rumpfusche:
    Was ist »Warengruppe«? Was speicherst Du ganz konkret in der Tabelle Warengruppe in Spalte WG1, WG2, WG3? Umsätze? Artikelstückzahlen? Namen? Denn Du kannst ja nur einen Wert in z.B: WG1 speichern. Aber: Warengruppe ist eine Tabelle:
    ID
    WG1
    WG2
    WG3
    -1
    ?
    ?
    ?
    -2
    ?
    ?
    ?
    -3
    ?
    ?
    ?

    Was steht bei Dir bei den ganzen Fragezeichen?
    In welcher Tabelle speicherst Du z.B. die ganzen Warenvorgänge? Welche Spalten hat diese Tabelle? Gibt es die überhaupt?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Das ist alles ganz einfach gehalten bei mir.
    Ich speichere nur einnahmen (und die Anzahl der Kunden)
    Also in meiner Tabelle stehen anstelle der ? die Tageseinnahmen der Warengruppen.
    Aber natürlich nur eine Einnahme pro Warengruppe pro Tag.
    Ich hab mal ein Excelsheet rangehängt. Alles was ein Komma hat ist dort ein Umsatz.
    Dateien
    • Mappe1.xlsx

      (11,9 kB, 34 mal heruntergeladen, zuletzt: )
    Damit ergibt sich erstmal nur eine Tabelle, bestehend aus
    • ID
    • Datum
    • Kundenzahl
    • WarenumsatzInEuroWG1
    • WarenumsatzInEuroWG2
    • WarenumsatzInEuroWG3
    • ...
    • Tagesumsatz (als Summe)
    Welchen Vorteil versprichst Du Dir da von 2 Tabellen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hmm. Da fällt mir keine Antwort drauf ein.
    Ich möchte später WGUmsätze vergleichen.
    Also UmsatzWG1 Januar 2019 mit UmsatzWG1 Januar 2018.
    Das gleiche mit Gesamtumsatz und Kunden.
    Außerdem soll der Umsatz auch Monatsweise angezeigt werden.
    Also z.B. für das gesamte Jahr 2018 die Umsätze der einzelnen WG pro Monat.

    Aber das alles sollte ja auch problemlos mit einer Tabelle im Dataset funktionieren...