Neuigkeiten:

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

Mobiles Hauptmenü

Kreuztabelle Funktion

Begonnen von PaulB1970, Januar 17, 2019, 16:30:33

⏪ vorheriges - nächstes ⏩

PaulB1970

Hallo liebe Community,

und zwar würde ich gerne wissen ob es überhaupt möglich ist was ich gerade versuche.

Und zwar hab ich in einer Abfrage, mehrere Mitarbeiter, sowie die Daten 01.01.2018 -31.01.2018
Das heißt, es gibt z.B. den 01.01.2018 3 Mal, weil ich 3 Mitarbeiter habe. Dazu gehört auch noch eine 0,.... Zahl.

Datensatz Bsp.
01.01.2018/ Mitarbeiter01/ 0,3
01.01.2018/ Mitarbeiter02/ 0,2

Ich möchte jetzt gerne eine Kreuztabelle erstellen, wo er die kommastellen zahl pro Mitarbeiter Summiert. (kriege ich auch hin) Jedoch würde ich es dann gerne durch die Anzahl der Tage im Monat teilen, dass man sozusagen Summer der Anzahl im Monat / Anzahl der Tage im Monat teilt.

ist dies möglich?

                   /Januar                                                                    / Februar....
Mitarbeiter 1 /         0,81 (27,3/31 die Rechnung natürlich nicht sichtbar )
Mitarbeiter 2 /         ....
...



die 27,3 wäre die Summe der Kommazahlen von 01.01.2018 + 02.02.2018...+ 31.01.2018


ich bedanke mich jetzt schon einmal für eure Hilfe!
L.G. Paul

Josef P.

#1
Hallo!

Wenn ich dich richtig verstehe, hast du in der Tabelle aber nicht jeden Tag enthalten.

2 Möglichkeiten:
1.) Du verwendest eine Hilfstabelle, in der du die Anzahl der Tage je Monat ablegst und verknüpfst diese in der Datenquelle der Pivot-Abfrage.

Prinzip:
select
  T.*, M.AnzahlTage
from
  DeineDatenTabelle T
  inner join
  Monatstabelle M ON M.Monat = Month(T.Datumsfeld)

Falls Schaltjahre zu beachten sind: Monatdaten zu jeweiligen Jahr verwenden.

In der Pivottabelle dann zusätzlich nach dem Feld AnzahlTage gruppieren und den Werte mit Sum(WertFeld) / AnzahlTage berechnen.
Anm.: statt der Hilfstabelle wäre auch eine Berechnung der Tage möglich.
Datediff("d", dateserial(Year(Datumsfeld), Month(Datumsfeld), 1),  dateserial(Year(Datumsfeld), Month(Datumsfeld) + 1, 1))


2.) Oder du verwendest eine Kalendertabelle um alle Tage in der Pivot-Abfrage zu haben.

Prinzip:
Datenquelle für Pivot-Auswertung:
select
  MK.KalenderDatum, MK.MitarbeiterID, T.WertFeld
from
  (
    select
        K.KalenderDatum
        M.MitarbeiterID
    from
        Kalendertabelle K,
        Mitarbeitertabelle M
    where
        K.KalenderDatum between #2018-01-01# and #2018-12-31#
  ) MK
  left join
  DeineDatenTabelle T ON T.Datumsfeld = MK.KalenderDatum and T.MitarbeiterID = MK.MitarbeiterID


Wenn du mit dieser Datenquelle eine Pivot-Abfrage erstellst, ist jeder Tag enthalten. Das sind zwar viel mehr Datensätze, dafür kannst du auch nach Quartal, Woche usw. auswerten.
Du kannst somit Sum(WertFeld) / Count(*) rechnen um den Durchschnittssatz zu erhalten.

Tipp: wenn du bereits in der Kalendertabelle Jahr und Monat als redundaten Wert verfügbar hast, musst du später in der Pivot-Abfrage nichts mehr rechnen und kannst direkt nach diesen Feldern gruppieren.

mfg
Josef

PaulB1970

@josepf, habe es mit einer Hilfstabelle gemacht, da Feiertage und Wochenenden für jeden Monat rausgerechnet werden mussten, weshalb man nicht Pauschal mit einem Monat rechnen konnte.

Vielen Dank für deine schnelle und passende Antworrt !