Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: jonas84 am Juni 09, 2014, 23:31:37

Titel: Hilfe zu Datenbankstruktur
Beitrag von: jonas84 am Juni 09, 2014, 23:31:37
Hallo zusammen,

ich habe mich jetzt mit Datenbanktheorie - v.a. in Hinblick auf das Datenmodell - beschäftigt, aber finde nichts Hilfreiches für mein Problem. Ich bin mir nicht mal sicher, wie gut es in einer Datenbank abgebildet werden kann. Deshalb die Frage an jemanden mit Erfahrung.

Ich möchte zunächst verschiedene Kennzahlen verschiedener Unternehmen über mehrere Jahre in einer (oder mehrerer?) Tabellen ablegen.
Anzahl Unternehmen: 30
Anzahl Kennzahlen: knapp 300
Anzahl Jahre: 10
(--> 30*300*10=90000 - Maximale Anzahl an Objekten: 32.768, ist damit so in einer einzigen Tabelle gar nicht möglich, oder?)

Anschließend möchte ich
1) mir die Daten nach bestimmten Kriterien anzeigen lassen
- Alle Kennzahlen für ein Unternehmen über alle Jahre
- Eine Kennzahl über alle Unternehmen über alle Jahre
- Alle Kennzahlen aller Unternehmen für ein Jahr
Dieser Punkt ist in meinem jetzigen Design unproblematisch.

2) aus diesen Daten wiederum neue Daten (KPIs) berechnen und sowohl textuell als auch grafisch anzeigen:
- Verrechnung verschiedener Kennzahlen eines Jahres, angezeigt im Vergleich über alle Unternehmen (für ein Jahr)
- Verrechnung von Kennzahlen über mehrere Jahre für ein Unternehmen (z.B. Durchschnitt)
Das schaffe ich (dank Hilfe in meinem letzten Thread) nun für ein Unternehmen, aber noch nicht für mehrere Unternehmen im Vergleich.

Nachfolgend (beispielhaft) mein aktuelles Design















UnternehmenKennzahlJahrWert
ALDIUmsatz2012100
ALDIUmsatz2013110
ALDIAusgaben201280
ALDIAusgaben201375
ALDIFilialen20121150
ALDIFilialen20131200
LIDLUmsatz2012150
LIDLUmsatz2013140
LIDLAusgaben2012125
LIDLAusgaben2013120
LIDLFilialen201280
LIDLFilialen201390

Die folgenden KPIs sind zwar fiktiv, aber verdeutlichen hoffentlich mein Vorhaben:

Pro Unternehmen und Jahr zu berechnen:
KPI1: Gewinn = Umsatz-Ausgaben
(hier z.B. für ALDI in 2012: 100-80)
KPI2: Durchschn. Umsatz pro Filiale = Umsatz/Filialen
(hier z.B. für LIDL in 2013: 140/90)

Pro Unternehmen zu berechnen:
KPI3: Durchschn. Anzahl Filialen über Periode = Summe(Filialen)/(Anzahl Jahre)
(hier z.B. für LIDL: (80+90)/2)

Pro Jahr zu berechnen:
KPI4: Industrie-Durchschnitt Umsatz = Summe(Umsatz über alle Unternehmen)/(Anzahl Unternehmen)
(hier z.B. für 2012: (100+150)/2)

Die Berechnung würde, wie bereits in meinem anderen Thread vorgeschlagen, sehr viel einfacher werden, wenn ich für jede Kennzahl ein Datenfeld anlegen würde. Jetzt habe ich aber gelesen, dass Access nur 255 Datenfelder pro Tabelle erlaubt und dass ich mein Design überdenken sollte, wenn ich so viele Datenfelder hätte.

Jetzt frage ich mich, ob ich mit meinem aktuellen Design weitermachen kann/soll oder ob eine andere Lösung vielleicht deutlich besser wäre (Aufteilung in mehrere Tabellen, nach Unternehmen oder Jahren?).

Ich weiß, das war ziemlich viel und hoffe, es ist halbwegs klar, wo ich hin möchte. Würde mich über einen Tipp oder Hinweis sehr freuen.

Danke und viele Grüße
Jonas
Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: ebs17 am Juni 10, 2014, 09:38:34
ZitatJetzt frage ich mich, ob ich mit meinem aktuellen Design weitermachen kann/soll ...
Ja. Wer 300 Kennzahlen hat, hat dann auch schnell mal 750. Funktionierende Anwendungen neigen besonders zu Wachstum, weil viele Anwender erst dann im Betrieb Wirkungen einer Datenbank verstehen und eigene zusätzliche Wünsche und Anforderungen anmelden. Daher wäre der Wechsel auf ein anderes DBMS, das ein paar mehr Spalten zuließe, keine wirkliche Lösung (an diesem Punkt).

Bezüglich Datensatzanzahl und einer damit verbundenen Begrenzung musst Du Dir keine Gedanken machen. In Access (Jet) darf eine Tabelle so viele Datensätze aufnehmen, wie es die maximale Größe der Datenbankdatei von 2 GB zulässt. Bei dem schmalen Tabellendesign sind da also locker mehrere Millionen Datensätze sowie weitere Tabellen möglich.
SELECT
    T1.Unternehmen,
    T1.Jahr,
    T1.Wert - T2.Wert AS KPI1
FROM
    (
        SELECT
            Unternehmen,
            Jahr,
            Wert
        FROM
            TabelleX
        WHERE
            Kennzahl = "Umsatz"
    ) AS T1
        INNER JOIN
            (
                SELECT
                    Unternehmen,
                    Jahr,
                    Wert
                FROM
                    TabelleX
                WHERE
                    Kennzahl = "Ausgaben"
            ) AS T2
            ON T1.Unternehmen = T2.Unternehmen
                AND
            T1.Jahr = T2.Jahr

SELECT
    T1.Unternehmen,
    T1.Jahr,
    T1.Wert / T2.Wert AS KPI2
FROM
    (
        SELECT
            Unternehmen,
            Jahr,
            Wert
        FROM
            TabelleX
        WHERE
            Kennzahl = "Umsatz"
    ) AS T1
        INNER JOIN
            (
                SELECT
                    Unternehmen,
                    Jahr,
                    Wert
                FROM
                    TabelleX
                WHERE
                    Kennzahl = "Filialen"
            ) AS T2
            ON
                T1.Jahr = T2.Jahr
                    AND
                T1.Unternehmen = T2.Unternehmen

SELECT
    Unternehmen,
    Sum(Wert) / Count(Wert) AS KPI3
FROM
    TabelleX
WHERE
    Kennzahl = "Filialen"
GROUP BY
    Unternehmen,
    Kennzahl

SELECT
    Jahr,
    Sum(Wert) / Count(Unternehmen) AS KPI4
FROM
    TabelleX
WHERE
    Kennzahl = "Umsatz"
GROUP BY
    Jahr


Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: jonas84 am Juni 10, 2014, 14:29:33
Ah okay, dann bezieht sich die "Anzahl von Objekten in einer Datenbank" von 32768 was anderes (http://office.microsoft.com/de-de/access-help/access-2010-spezifikationen-HA010341462.aspx).

Dann mache ich mit dem jetzigen Design weiter. Vielen vielen Dank für die Antwort und die Abfragen!

Gruß
Jonas
Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: database am Juni 11, 2014, 12:53:58
Unter Datenbank-Objekte sind Tabellen, Formulare, Abfragen, Berichte, ... zu verstehen
Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: jonas84 am Juni 19, 2014, 10:51:29
Zitat von: ebs17 am Juni 10, 2014, 09:38:34

SELECT
    T1.Unternehmen,
    T1.Jahr,
    T1.Wert - T2.Wert AS KPI1
FROM
    (
        SELECT
            Unternehmen,
            Jahr,
            Wert
        FROM
            TabelleX
        WHERE
            Kennzahl = "Umsatz"
    ) AS T1
        INNER JOIN
            (
                SELECT
                    Unternehmen,
                    Jahr,
                    Wert
                FROM
                    TabelleX
                WHERE
                    Kennzahl = "Ausgaben"
            ) AS T2
            ON T1.Unternehmen = T2.Unternehmen
                AND
            T1.Jahr = T2.Jahr


Jetzt probiere ich das gerade aus.
Ich verstehe allerdings nicht, wieso mich Access beim Ausführen der Abfrage jedes mal nach dem Wert für T1.Jahr und T2.Jahr fragt. Sollte es das nicht über alle Jahre machen?

Und selbst wenn ich Folgendes mache, kommt das Popup mit der Frage nach den Werten für T1.Jahr und T2.Jahr:

SELECT
    T1.UnternehmensID,
    T1.Jahr,
    T1.Wert - T2.Wert AS KPI1
FROM
    (
        SELECT
            UnternehmensID,
            Jahr,
            Wert
        FROM
            TabelleX
        WHERE
            Kennzahl = "Umsatz"
            Jahr = 2012
            UnternehmensID = 1
    ) AS T1
        INNER JOIN
            (
                SELECT
                    UnternehmensID,
                    Jahr,
                    Wert
                FROM
                    TabelleX
                WHERE
                    Kennzahl = "Ausgaben"
                    Jahr = 2012
                    UnternehmensID = 1
            ) AS T2
            ON T1.UnternehmensID = T2.UnternehmensID
                AND
            T1.Jahr = T2.Jahr


Wenn ich dann nochmal jeweils 2012 für T1.Jahr und T2.Jahr eingegeben habe, kommt der richtige Wert raus. Aber ich will das Jahr eigentlich per Parameter in VBA übergeben und das scheint so noch nicht zu funktionieren.

Was mache ich falsch?

Danke und noch einen schönen Feiertag,
Jonas
Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: MaggieMay am Juni 19, 2014, 22:51:09
Hi,

vielleicht sollte man Bezeichnungen wie "Jahr" und "Wert" einfach grundsätzlich vermeiden, weil das reservierte Worte aus dem Access-Sprachumfang sind.
Titel: Re: Hilfe zu Datenbankstruktur
Beitrag von: database am Juni 21, 2014, 18:20:58
Hallo,

möchtest oder kannst du die Feldbezeichungen nicht ändern, dass stze sie in eckige Klammern.

SELECT
    T1.Unternehmen,
    T1.[Jahr],
    T1.[Wert] - T2.[Wert] AS KPI1



ABER:
Kriterien in der WHERE-Klausel sind grundsätzlich logisch zu verbinden - in deinem Fall mit AND wenn alle drei Kriterien erfüllt sein müssen!


WHERE
            Kennzahl = "Umsatz" AND
            [Jahr] = 2012 AND
            UnternehmensID = 1