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
Unternehmen | Kennzahl | Jahr | Wert |
ALDI | Umsatz | 2012 | 100 |
ALDI | Umsatz | 2013 | 110 |
ALDI | Ausgaben | 2012 | 80 |
ALDI | Ausgaben | 2013 | 75 |
ALDI | Filialen | 2012 | 1150 |
ALDI | Filialen | 2013 | 1200 |
LIDL | Umsatz | 2012 | 150 |
LIDL | Umsatz | 2013 | 140 |
LIDL | Ausgaben | 2012 | 125 |
LIDL | Ausgaben | 2013 | 120 |
LIDL | Filialen | 2012 | 80 |
LIDL | Filialen | 2013 | 90 |
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
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.JahrSELECT
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
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
Unter Datenbank-Objekte sind Tabellen, Formulare, Abfragen, Berichte, ... zu verstehen
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
Hi,
vielleicht sollte man Bezeichnungen wie "Jahr" und "Wert" einfach grundsätzlich vermeiden, weil das reservierte Worte aus dem Access-Sprachumfang sind.
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