Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1880to1884
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PowerPivot Summenbildung über 7 Tage

PowerPivot Summenbildung über 7 Tage
05.05.2022 11:13:03
Marcel
Hallo liebe Excel-Gemeinde,
ich hoffe, ihr könnt mir bei einem Power Pivot Thema weiterhelfen. Und zwar habe ich eine PowerPivot-Tabelle. In der ersten Spalte steht das Datum jeden Tages eines Monats. Jetzt möchte ich zu jedem Datum die Summe der Stunden der letzten 7 Tage berechnen. Also für den 05.05. möchte ich die Summe der Stunden für den Zeitraum 28.4. bis 4.5. berechnen und für den 4.5. für den Zeitraum 27.4. bis 3.5. etc. Und hier komme ich leider nicht weiter. Das ganze soll natürlich dynamisch sein, also abhängig von dem Datum, das in der ersten Spalte steht. Ich möchte nicht in die Dax-Formel einen festen Wert eintragen.
Für den aktuellen Tag kann ich das ganze bereits mit DatesInBetween und Today -7 ... berechnen, nur bei anderen Zeiträumen hapert es. Anbei habe ich eine Beispiel Datei angehängt. Bin sehr gespannt auf eure Lösungsvorschläge.
https://www.herber.de/bbs/user/152888.xlsx
Schon einmal vielen Dank im Voraus.
beste Grüße
Marcel

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PowerPivot Summenbildung über 7 Tage
05.05.2022 11:54:27
Daniel
PowerPivot kenne ich jetzt nicht, aber ich vermute mal, dass des nicht funktioniert oder schwierig wird, weil diese Auswertung dem Prinzip widerspricht, dass jeder Einzelwert nur einmalig einer Auswertepostion zugeordnet wird.
das einfachste wäre hier, neben der Pivottabelle eine Formel einzufügen, die einfach die 7 darunterliegenden Zeilen summiert, ich würde hier den Zellbezug mit INDEX machen, das sollte weniger Probleme geben wenn sich die Pivottabelle ändert:
H6: =SUMME(INDEX(F:F;ZEILE()+1):INDEX(F:F;ZEILE()+7))
alternativ kannst du aus die Ursprungstabelle direkt auswerten, das ist aber rechenaufwendiger, allerdings funktioniert das auch in einer unsortierten Liste
H6: =SUMMEWENNS(Daten!C:C;Daten!B:B;"="&E6-7)
in Daten!B:B müssten auch echte Datumswerte stehen (Zahlen) keine Texte
Gruß Daniel
Anzeige
AW: PowerPivot Summenbildung über 7 Tage
09.05.2022 20:38:24
Marcel
Hallo Daniel
Deine Idee hatte ich grundsätzlich auch im Hinterkopf. Ist momentan aber eher noch mein Notnagel, da diese Kennzahl nur ein Teil eines Dashboards sein soll. Aber ich hab es trotzdem schonmal ausprobiert. Hat funktioniert. besten Dank.
AW: PowerPivot Summenbildung über 7 Tage
05.05.2022 13:08:52
ChrisL
Hi Marcel
Müsste mich auch wieder einmal reinknien. Ich denke es geht schon mittels PP.
Ich frage mich, wie die Berechnungslogik sein soll bzw. ob eine Dynamik sinnvoll ist. Worauf ich hinaus will:
Angenommen du wählst im Datenschnitt Mai, soll dann die 7-Tage Berechnung im Mai abgeschnitten werden d.h. u.U. bildest du nur die Summe z.B. über einen Tag (2. Mai = Summe vom 1. Mai ohne April-Daten).
Wenn es sich um eine fixe Berechnung ohne Dynamik handelt, dann würde ich eher ein PP berechnetes Feld (nicht Measure) verwenden oder bereits in Power-Query, vor Übergabe ins Datenmodell rechnen.
Ein weitere Faktor wäre wenn du andere Gruppierungen (z.B. Quartal, Monat etc.) verwendest. Da würden dann die 7-Tage-Summe je Tag noch einmal summiert, die Zwischentotale stimmen dann nicht mehr. Und umgekehrt, wenn du in einer reinen Tabellenansicht bleibst, dann wäre ein dynamisches Measure irgendwie überflüssig.
Zudem fällt mir auf (eher ein Detail), dass in den Quelldaten die Typenkonvertierung für Datum (noch) nicht erfolgt ist. Wenn möglich bereits beim Import richtig stellen.
cu
Chris
Anzeige
AW: PowerPivot Summenbildung über 7 Tage
05.05.2022 23:39:38
Yal
Hallo Marcel,
Du baust 6 Kennzahlen, die je auf dem Wert von Tag -1, -2 usw. basiert und ein 7te Kennzahl, der die Summe von Wert des Tages und der 6 Kennzahlen macht.
VG
Yal
Über Power Query
06.05.2022 10:18:36
Yal
Hallo Marcel,
man könnte die Quelle so behandeln, dass für jeden Tag die Summe von Heute + 6 Tage davor errechnet wird.
In Power Query geht es am einfachste mit einer benutzerdefinierten Funktion:
neue leere Abfrage öffnen, Code einfügen:

(Datum as date) as number => let
Quelle = Tabelle2,
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each [Tag] = Date.AddDays(Datum, -6 )),
#"Gruppierte Zeilen" = Table.Group(#"Gefilterte Zeilen", {"Tag"}, {{"Summe", each List.Sum([wert]), type number}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Benutzerdefiniert", each 1),
#"Gruppierte Zeilen1" = Table.Group(#"Hinzugefügte benutzerdefinierte Spalte", {"Benutzerdefiniert"}, {{"Summe", each List.Sum([Summe]), type number}}),
#"Entfernte Spalten" = Table.RemoveColumns(#"Gruppierte Zeilen1",{"Benutzerdefiniert"}),
letzte = #"Entfernte Spalten"{0}[Summe]
in
letzte
Es wird angenommen, dass
_ die Quelltabelle "Tabelle1" heisst,
_ die Datumspalte "Tag" heisst
_ die Wertspalte "wert" heisst
bei Bedarf anpassen.
in der Tabelle1 dann eine Spalte mit benutzerdefinierten Funktion mit
=Summe7Tag([Tag])
(wenn Du die Funktion "Summe7Tage" benannt hast)
VG
Yal
Anzeige
AW: Über Power Query
06.05.2022 16:54:22
ChrisL
Hi
Hier noch eine ähnliche Variante, welche jedoch ohne PQ-Funktion auskommt. Eine benutzerdefinierte Spalte reicht:

= let MeinTag = [Reporting day] in
List.Sum(
Table.SelectRows(#"Gruppierte Zeilen", each [Reporting day] = Date.AddDays(MeinTag, -7 ))[Summe Stunden])
-1 und -7 noch angepasst, aber das Prinzip ist ähnlich. Erfordert die vorgängige Gruppierung nach Tag.
Der vollständige M-Code sieht wie folgt aus:

let
Quelle = Excel.CurrentWorkbook(){[Name="Daten"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Cost Center", Int64.Type}, {"Reporting day", type date}, {"Stunden", type number}}),
#"Gruppierte Zeilen" = Table.Group(#"Geänderter Typ", {"Reporting day"}, {{"Summe Stunden", each List.Sum([Stunden]), type nullable number}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Summe 7 Tage", each let MeinTag = [Reporting day] in
List.Sum(
Table.SelectRows(#"Gruppierte Zeilen", each [Reporting day] = Date.AddDays(MeinTag, -7 ))[Summe Stunden])),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Hinzugefügte benutzerdefinierte Spalte",{{"Summe 7 Tage", type number}})
in
#"Geänderter Typ1"
cu
Chris
Anzeige
AW: Über Power Query
09.05.2022 20:44:56
Marcel
Hallo Yal
erst einmal vielen vielen Dank für deine Mühe.
ich hab deine Lösung probiert, aber ich bekomme eine Fehlermeldung. Beim Einfügen der Spalte mit der benutzerdefinierten Funktion, muss man ja ein Datum angeben, auf das sich die Funktion bezieht. Ich habe dafür die Datumsspalte aus der Ursprungstabelle genommen. Doch dann kommt die Meldung: "Während der Auswertung wurde ein zyklischer Verweis erkannt." Da hab ich wohl etwas falsch gemacht. Aber ein anderes Datum, als die Datumsspalte gib es ja gar nicht.
Weißt du evtl. was ich falsch gemacht habe?
Jetzt ist mir nur leider aufgefallen, dass ich bei der ersten Problembeschreibung etwas vergessen habe. Und zwar sollte nicht nur über anhand dem Datum die Summe über die letzten 7 Tage gebildet werden, sondern zusätzlich auch über die verschiedenen Kostenstellen, die in der Spalte "Cost Center" in der Daten-tabelle stehen, sodass man die Kennzahl pro Kostenstelle täglich verfolgen kann.
Hättest du dafür evtl. auch eine Lösung parat?
Nochmals vielen Dank
Gruß
Marcel
Anzeige
AW: Über Power Query
10.05.2022 00:22:33
Yal
Hallo zusammen,
ein grossen Danke an Chris, der mich durch seine Lösung immer wieder antreibt.
@Chris: Ich gebe zu, ich hatte sogar die Hoffnung, dass Du meine schlampige Lösung korrigierst ;-) Ich bin trotzdem bei der Idee geblieben, dass eine Funktion eine sauberere Trennung darstellt.
Ich habe hinzwischen die Parametrisierung der Function und die List.Sum entdeckt (ich meine per Klick, nicht mit Eingriff in erweiterten Editor).
Somit jetzt eine Lösung, die mir gefällt. Ich wollte vor allem den Zeit-aufwändigen Gruppierung vermeiden.
Die Quelle bildet die Tabelle Daten. Das Ergebnis der PQ-Abfrage wird ans Datenmodell übergeben (ich habe leider nur xl 2016) und in einem Pivot ausgewertet.
Die 7-Tage-Summen kann man nur einen Durchschnitt sinnvoll auswerten. Die 7-Tage-Summe mag auf dem Tag noch gut sein, aber auf Monat würde es eine Summe von Summe mit viel Redundanz bilden.
https://www.herber.de/bbs/user/152968.xlsx
Der Filter der 7-Tage-Summe ist aktuell
([Reporting day] >= Date.AddDays(Tag, -7) and [Reporting day] Es könnte aber sein, dass
([Reporting day] > Date.AddDays(Tag, -7) and [Reporting day] richtiger ist. Was gleich wäre wie:
([Reporting day] >= Date.AddDays(Tag, -6) and [Reporting day] Das kann ich nicht beurteilen.
VG
Yal
Anzeige
AW: Über Power Query
10.05.2022 11:25:45
ChrisL
Hi Yal
Danke für die Rückmeldung.
Wo hast du List.Sum per Klick entdeckt? :)
Präzisierend: Für meine vorgeschlagene Lösung mit benutzerdefinierter Spalte, muss nicht zwingend gruppiert werden. Die Aussage habe ich gemacht, weil sonst die Pivotierung (über Summe) nicht mehr gepasst hätte. Deine Alternative über Mittelwert umschifft das Problem und ich finde es ebenfalls sinnvoll. Aber letztlich läuft es auf die Frage hinaus, welche Berechnungslogik richtig/sinnvoll ist, worauf mein erster Beitrag zielte (in der Formulierung habe ich mich ein wenig verzettelt).
Die Aussage, dass meine Lösung ohne Funktion auskommt, war nicht ganz richtig. Eine Funktion im weiteren Sinn (Input, Berechnung, Output) ist es auch, aber es ist halt keine separate PQ-Funktion (fx) im engeren Sinn.
Die Lösung hat den Vorteil, dass man keine Probleme mit dem zyklischen Verweis (eine Art Zirkelbezug) bekommt. Nachfolgend die benutzerdefinierte Spalte um einen Parameter erweitert:

let MeinTag = [Reporting day], MeinCC = [Cost Center] in
List.Sum(
Table.SelectRows(#"Gruppierte Zeilen", each [Reporting day] = Date.AddDays(MeinTag, -7 ) and [Cost Center] = MeinCC)[Summe Stunden])
Deine Lösung mittels separater Funktion finde ich insbesondere sinnvoll, wenn diese mehrfach wiederverwendet wird (z.B. mehrere Quelldaten, welche mit identischer Funktion ausgewertet werden müssen). Auch zur allgemeinen Übersichtlichkeit kann es förderlich sein. Generell bin ich somit auf deiner Seite (pro separate Funktion). Meine Optimierungsvorschläge:
https://www.herber.de/bbs/user/152979.xlsx
- Die Quelldaten würde ich nur einmal beziehen. Vorbereiten d.h. Typenkonvertierung und Sortierung.
- Abfrage und Funktion verweisen dann auf die gleichen Quelldaten mittels Verweis. Keine erneute Konvertierung/Sortierung und nur ein Quellbezug nötig.
- Filterkriterien zusammengefasst
- Generell die Funktion etwas abgespeckt
- Worauf ich verzichtet habe, ist die Funktion noch weiter zu parameterisieren (z.B. zusätzlicher Parameter mit Quellbezug), zwecks Erhöhung der Wiederverwendbarkeit (die Filterkriterien sind ja auch ziemlich spezifisch, bringt also nichts).
Als separate Funktion sieht das Resultat somit wie folgt aus:

(CC as number, Tag as date) =>
let
TBgefiltert = Table.SelectRows(Quelldaten, each ([Reporting day] >= Date.AddDays(Tag, -7) and [Reporting day] 
cu
Chris
Anzeige
AW: Über Power Query
10.05.2022 11:47:28
Yal
Hallo Chris,
ja, logisch und sauber: mit Abfrage "Quelldaten" nur einmal auf der Datenlieferant greifen, mit "Abfrage" und der Funktion "Summe7Tage" auf "Quelldaten" verweisen. Wobei PQ intern optimiert. Die Abfrageabhängigkeitsbild ("Ansischt", "Abfrageabhängigkeiten", genau ausgeführt, weil für nicht Spezialist vielleicht sinnvoll) zeigt die Abzweigung nicht.
Da PQ das Ziel hat, ein "Low Code/No Code"- Umgebung zu sein, setzte ich mir auch das Ziel, so wenig wie möglich ins erweiterten Editor einzugereifen. Hier auch mit Rücksicht auf nicht Fortgeschrittenen.
List.Sum per Klick (also "No Code"): nach dem Filterung nach Cost Center und Datum, Spalte "Stunden" markieren und in "Transformieren", "Statistiken", "Summe" klicken.
zur:

= Table.SelectRows(Quelldaten, each ([Reporting day] >= Date.AddDays(Tag, -7)  and [Reporting day] 
lustigerweise (aber genauer gesagt, bedauerlicherweise) mekert bei mir genau diese Zusammenfassung der beiden Filter. Daher in 2 Schritten. Wobei ich versuche [Cost Center] = CC bevor der Filterung auf Datum. Vielleicht ist da der Trick...
VG
Yal
Anzeige
AW: Über Power Query
10.05.2022 13:18:20
ChrisL
Hi Yal
Alles klar. Der Option Transformieren/Statistik habe ich bisher keine Beachtung geschenkt. Die Möglichkeiten werde ich in Zukunft eher mal nutzen.
Das Problem mit dem zusammengefassten Filter kann ich nicht nachvollziehen. Die Reihenfolge sollte eigentlich egal sein.
Aber letztlich auch nicht so wichtig, ob man die Filter kombiniert oder nicht.
Auf weitere interessante PQ Herausforderungen in Zukunft ;)
cu
Chris
AW: Über Power Query
11.05.2022 17:23:51
Luschi
Hallo Yal,
danke für Deine Lösung zum Problem 'Summe letzte 6 Tage', habe aber die benutzerdefinierte Funktion etwas entschlackt, denn Du läßt der Funktion Vorarbeiten erledigen, die schon längst von der Abfrage organisiert wurde - trotzdem ein sehr interessanter Lösungsansatz.
https://www.herber.de/bbs/user/153009.xlsx
Gruß von Luschi
aus klein-Paris
Anzeige
Ja, da hast Du recht.
12.05.2022 15:18:05
Yal
... die Sortierung ist eigentlich überhaupt nicht notwendig, weder in der Hauptabfrage noch in der Funktion.
Ich habe sie gebraucht, um die 7-Tage-Summe leicht kontrollieren zu können (Selektionssummierung der Taskleiste) und danach drin vergessen.
Es freut mich zu sehen, wie ein solche Frage die Power-Query-Verrückten zusammenbindet.
So ein Art von freiwillige Lerngemeinschaft :-)
VG
Yal
AW: Ja, da hast Du recht.
16.05.2022 20:29:59
Marcel
Hallo zusammen,
sorry, dass ich mich so spät melde. Ich habe jetzt die Lösung von Chris in meine Orignialdatei eingebaut. Die hat von Januar bis April 2500 Zeilen á 4 Spalten.
Grundsätzlich funktionert die Lösung. Aber die Performance spielt nicht so ganz mit. Ich habe nicht nur eine Spalte für die Stunden sondern 2, dass konnte ich mit der Lösung von Chris auch noch alleine umsetzen. Aber wenn ich jetzt die Query nach Excel ausgeben, also die Daten lade, dann dauert der Ladeprozess 16 Minuten, was doch ein Tick zu lang ist. Und dann kommen ja die Daten von Mai bis Dezember dazu.
Aber ich habe auf jeden Fall wieder ne ganze Menge dazugelernt. Ich danke euch allen, die ihr mir geholfen habt. Ich find's auch super, dass ihr euch auch gegenseitig Tipps gibt.
Nochmals besten Dank.
beste Grüße
Marcel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige