Hallo zusammen,
ist es möglich mit einer Abfrage in Access (bzw direkt in SQL) verschiedene (beliebig auszuwählende) Werte eine Spalte mit einander zu verrechnen? z.B. (A+B)/C
Die Werte für die Berechnungen sind über Filterkriterien oder IDs eindeutig identifizierbar.
Falls das nicht möglich ist, wie realisiere ich sowas am besten? VBA?
Danke und Gruß
Jonas
Hallo,
Verstehe nicht den Zusammenhang der Berechnung(en)
wenn es sich bei "A", "B" und "C" und Felder (Spalten) einer Tabelle handelt, so kann die Formel direkt in einer Abfragespalte eingesetzt werden wobei immer jeweils die Daten aus einem Datensatz berücksichtigt werden:
Select a, b, c , (a+b)/c as Ergebnis from tblTabelle
Müssen die Werte für EINE Berechnung aus verschiedenen Datensätzen und/oder Tabellen zusammengesammelt werden, dann könnte in der berechneten Abfragespalte die Dlookup-Funktion als "Lieferant" der einzelnen Werte benutzt werden. (Dies wiederum könnte alternativ in eine Public-Funktion ausgelagert werden, die wiederum als solche in der berechneten Abfragespalte aufgerufen wird.)
Danke für die schnelle Antwort!
Die Zahlen sollen aus verschiedenen Datensätzen kommen.
Beispielsweise:
Kennzahl | Wert |
Umsatz | 100 |
Ausgaben | 80 |
Jetzt möchte ich mit einer Abfrage den Gewinn berechnen (Umsatz-Ausgaben). In anderen Fällen kann es auch mal eine Multiplikation oder Division sein. Das ist dann ein Fall für Dlookup?
Die Dlookup Funktion schaue ich mir auf jeden Fall mal an.
Update: Man merkt, ich bin Anfänger :-[ Ich versuche vielleicht kurz die Datenbankstruktur bzw. das Ziel zu erklären. Vielleicht ist mein aktuelles Modell ja schon völliger Blödsinn.
Ich möchte Kennzahlen verschiedener Unternehmen über mehrere Jahre ablegen. Aktuell sieht es so aus:
Unternehmen | Kennzahl | Jahr | Wert |
ALDI | Umsatz | 2013 | 100 |
ALDI | Umsatz | 2014 | 110 |
LIDL | Ausgaben | 2013 | 500 |
Für jedes Unternehmen gibt es natürlich einen Wert für jede Kennzahl und jedes Jahr (der Einfachheit halber hier nur drei Datensätze beispielhaft).
Teile ich das dann besser in mehrere Tabellen auf? Oder nehme ich die Kennzahlen (ca. 200 Stück) als Datenfelder?
Ziel ist es, sich sowohl die Zahlen für ein Unternehmen ausgeben zu lassen, als auch Vergleiche über mehrere Unternehmen/Jahre durchzuführen.
Danke nochmal und viele Grüße
Jonas
Hallo,
mit der Beispieltabelle kannst Du alle angeführten Berechnungen durchführen.. Allerdings sollte die Tabelle normalisiert werden, d. h. die Firmen und die "Kennzahlen" (sind eigentlich "KennzahlTypen") sollten in eigene Tabellen hinterlegt und dabei nur die Primärschlüssel(werte) in der Kennzahlen-Tabelle geführt werden ( Normalisierung).
Um z. B. die Summe der Umsätze der Firma "Aldi" in den Jahren 2013 und 2014 zu erhalten, könnte die Dsum-Funktion so lauten:
Dsum("Wert";"tblKennzahlen";"Unternehmen ='Aldi' and [Jahr] in (2013,2014)")
Normalisiert habe ich bereits. Wie Du beschrieben hast, eine separate Tabelle für die Unternehmen und eine für die Kennzahlen. Wollte es initial eigentlich bei einer "einfachen" Frage belassen :P
Jetzt bin ich aber wieder verunsichert, was mein Modell angeht. Was macht mehr Sinn? Nur die Felder "UnternehmensID", "KennzahlID", "Jahr" und "Wert"
oder
"UnternehmensID", "Jahr", "Umsatz", "Ausgaben", "Anzahl Mitarbeiter" etc...
Dein Beispiel habe ich ähnlich auch schon ausprobiert, aber da sind die Kennzahlen ja die gleichen (beides mal Umsatz). Wenn ich aber jetzt, wie anfangs beschrieben, zwei unterschiedliche Kennzahlen (z.B. Umsatz und Ausgaben) miteinander verrechnen möchte, klappt das ja nicht mehr. Und da hänge ich jetzt. Wenn ich das Modell ändere, würde sich das Problem auf jeden Fall auflösen. Aber ich weiß nicht, ob ich mir dann nicht andere Probleme einhandele.
Nochmal ein etwas besseres Beispiel, wenn ich zB den Gewinn aus Umsatz und Ausgabe für ALDI in 2013 berechnen wollte:
Unternehmen | Kennzahl | Jahr | Wert |
ALDI | Umsatz | 2013 | 100 |
ALDI | Umsatz | 2014 | 110 |
ALDI | Ausgaben | 2013 | 40 |
LIDL | Ausgaben | 2013 | 500 |
Sorry, wenn ich Dich etwas über Gebühr beanspruche.
Danke nochmals,
Jonas
Hallo,
naja, dann halt Gewinn = Umsatz-Ausgaben
Domwert("Wert";"tblKennzahlen";"Unternehmen = 'Aldi' and [Jahr] = 2013 and Kennzahl = 'Umsatz') - Domwert(" Wert";"tblKennzahlen";"Unternehmen = 'Aldi' and [Jahr] = 2013 and Kennzahl = 'Ausgaben')
Hallo,
so wie in Deinem Beispiel ist die Tabelle richtig.
In einer Abfrage multiplizierst Du die Ausgaben mit -1
Die Abfarge sieht dann so aus:
Unternehmen Kennzahl Jahr Wert
ALDI Umsatz 2013 100
ALDI Umsatz 2014 110
ALDI Ausgaben 2013 -40
LIDL Ausgaben 2013 -500
Wenn Du jetzt diese Abfrage gruppierts und den Wert summierst hast Du folgendes Ergebnis:
Aldi 170
Lidl -500
Diese Abfrage kannst Du auch auf Jahre oder Firmen filtern.
In der Tabelle für die Kennzahlen würde ich noch den Multiplikator mit erfassen:
KennzahID KennzText Multiplikator
1 Umsatz 1
2 Ausgaben -1
3 AnzMitarb 0
Zitat von: DF6GL am Juni 07, 2014, 19:37:48
Hallo,
naja, dann halt Gewinn = Umsatz-Ausgaben
Domwert("Wert";"tblKennzahlen";"Unternehmen = 'Aldi' and [Jahr] = 2013 and Kennzahl = 'Umsatz') - Domwert(" Wert";"tblKennzahlen";"Unternehmen = 'Aldi' and [Jahr] = 2013 and Kennzahl = 'Ausgaben')
Hi, das macht genau was ich brauche, vielen Dank!
Merkwürdigerweise gibt mir die Abfrage zwar das richtige Ergebnis, aber statt nur einem Wert bekomme ich das Ergebnis so oft, wie die Tabelle Datensätze hat (der gleiche Wert ganz oft untereinander).
Grüße
Jonas
Hallo,
wenn Du das für jeden Datensatz machst, erhältst Du auch in jedem Datensatz das Ergebnis. Über eine Abfrage gibt es keine andere Lösung, das ist auch nicht merkwürdig, sondern normal und richtig.
Schon mal über meinen Vorschlag/Hinweis nachgedacht?
Zitat von: MzKlMu am Juni 08, 2014, 13:19:02
Hallo,
wenn Du das für jeden Datensatz machst, erhältst Du auch in jedem Datensatz das Ergebnis. Über eine Abfrage gibt es keine andere Lösung, das ist auch nicht merkwürdig, sondern normal und richtig.
Schon mal über meinen Vorschlag/Hinweis nachgedacht?
Hey,
obwohl ich nur einen Wert habe, der den Filterkriterien entspricht? Ich hätte bei einem Lookup nur einen Wert erwartet, wenn es nur einen Wert gibt, der den Filterkriterien entspricht.
Ich möchte irgendwann verschiedene Werte aus verschiedenen Datensätzen mit verschiedenen mathematischen Operationen (plus,mal,minus,geteilt) berechnen. Das geht mit Deinem Vorschlag nicht, oder?
Zum Beispiel aus der obigen Tabelle:
(Umsatz ALDI 2013 + Umsatz ALDI 2014)/(Ausgaben LIDL 2013). Also konkret: (100+110)/500=0,42. Bekomme ich irgendwie über eine Abfrage eine Ausgabe, die mir "0,42" anzeigt?
Die Sinnhaftigkeit bei diesem Beispiel sei dahingestellt.
Danke und Gruß
Jonas
Hallo,
DLoopup berechnet für jeden Datensatz. Du es immer die gleichen Ausgangswerte sind, wird in jedem Datensatz auch logischerweise das gleiche Ergebnis gezeigt. Und wenn Du 500 DS hast, hast Du 500x das gleiche Ergebnis. Es gibt ja in der Formel keinen Bezug zu einem Datensatz.
Wenn Du mal zusammenhängend beschreibst, was Du alles berechnen willst, lässt sich da bestimmt eine Lösung finden.
Ziel muss es sein, bereits über das Datenmodell die Zusammenhänge deutlich zu machen.
PS:
ZitatDie Sinnhaftigkeit bei diesem Beispiel sei dahingestellt.
was sollen unsinnige Beispiel für einen Sinn machen? Du erhöhst das Verständnis für die Zusammenhänge, wenn Du sinnhafte Beispiele machst bzw. zeigst.
Zitat(Umsatz ALDI 2013 + Umsatz ALDI 2014)/(Ausgaben LIDL 2013).
Was soll es z.B. für einen Sinn machen, Aldi 2013 und 2014 zu addieren um das dann durch die Ausgaben von LIDL 2013 zu dividieren. Solche Beispiele kannst Du Dir einfach sparen.
Alles klar, here we go:
Ich habe 20 Unternehmen, die ich miteinander vergleichen möchte. Zu diesen Unternehmen habe ich relativ viele Daten (circa 200 Kennzahlen) über 10 Jahre.
Aus diesen Kennzahlen möchte ich nun gewisse KPIs (Key Performance Indicators) berechnen, die sich aus bestimmten Kennzahlen zusammensetzen.
Jetzt nochmal ein hoffentlich etwas sinnvolleres Beispiel:
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)Ich hoffe, das Beispiel und die zu berechnenden Werte sind jetzt verständlicher.
Danke für die Mühen und viele Grüße,
Jonas
Hallo,
da die Werte nicht untereinander in Zusammenhang stehen, würde ich doch die Werte in einzelnen Spalte erfassen. Die Rechnerei wird deutlich einfacher.
Zitat von: MzKlMu am Juni 08, 2014, 15:29:09
Hallo,
da die Werte nicht untereinander in Zusammenhang stehen, würde ich doch die Werte in einzelnen Spalte erfassen. Die Rechnerei wird deutlich einfacher.
Hallo, danke für Deine Rückmeldung. Wenn ich über 200 Kennzahlen habe, stoße ich doch so irgendwann an die Grenzen von Access (Maximum an Datenfeldern ist 255), oder? Gibt es da noch andere sinnvolle Lösungen?
Update: Die Fragen gehen jetzt in eine ganz andere Richtung als ursprünglich geplant. Ich habe dafür einen neuen Thread eröffnet. Damit vielen Dank für die Hilfe für mein ursprüngliches Problem!
Gruß
Jonas