SUMMEWENNS Für bestimmte Uhrzeiten
#11
SUMMEWENNS/ZÄHLENWENNS und Pivot mit Uhrzeiten oder DatumZeiten sind rein mathematisch suboptimal, da gleitkommabedroht. In der Realität wird aber zumindest gewährleistet, dass die Anzahl-Summe über alle Gruppen stimmt.

Im Falle "TEXT" kann man nicht intervallieren.

Will man die Intervalle anders als die angebotenen Vorgaben in Pivot gestalten (z.B. 20 Minuten), dann sollte man die DatumZeiten z.B. x72 nehmen und dann runden oder kürzen.

Merke: Jede statistische Auswertung über DatumZeit unterliegt dem Gleitkommavorbehalt.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • keniath
Antworten Top
#12
Hallo

Wie schon erwähnt wurde von shift-Del, dazu hier meine Lösung einmal als PQ und einmal als PQ/Pivot.


Angehängte Dateien
.xlsx   Lastprofil_Auswertung (1).xlsx (Größe: 1,27 MB / Downloads: 6)
Viele Grüße
PIVPQ
[-] Folgende(r) 1 Nutzer sagt Danke an PIVPQ für diesen Beitrag:
  • keniath
Antworten Top
#13
Hallo Alex,

hier ist meine PQ-Lösung.

Gruß von Luschi
aus klein-Paris


Angehängte Dateien
.xlsx   Lastprofil_Auswertung_2.xlsx (Größe: 1,15 MB / Downloads: 6)
[-] Folgende(r) 1 Nutzer sagt Danke an Luschi für diesen Beitrag:
  • keniath
Antworten Top
#14
Hallo
So den  beschleunigten M-Code und komprimierten kompletten Code in einer Abfrage von 16:30 gepostet wurde, der bei mir  um ein vielfaches schneller läuft.
Code:
let
    GZ = () => let in List.Zip({{Time.EndOfHour(#time(2, 45, 0)), Time.EndOfHour(#time(5, 45, 0)),Time.EndOfHour(#time(8, 45, 0)),
       Time.EndOfHour(#time(11, 45, 0)),Time.EndOfHour(#time(14, 45, 0)), Time.EndOfHour(#time(17, 45, 0)),Time.EndOfHour(#time(20,
       45, 0)), Time.EndOfHour(#time(23, 45, 0))},{"00:00 - 02:59","03:00 - 05:59","06:00 - 08:59","09:00 - 11:59","12:00 - 14:59",
       "15:00 - 17:59","18:00 - 20:59", "21:00 - 23:59"}}),
    ZB = (x_Time as time) => let in GZ(){List.PositionOf(List.Transform(GZ(), each x_Time <= _{0}), true, Occurrence.First)}{1}
in
    Table.InsertRows(Table.Buffer(Table.Combine({Table.AddColumn(Table.Pivot(Table.Group(Table.AddColumn(Table.SelectRows(
    Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],{{"Datum", type date}, {"Uhrzeit", type time},{"KW",
    type number}, {"Tag", type text}}), each _[Datum] <> null), "Stundenbereich", each ZB([Uhrzeit])), {"Stundenbereich", "Tag"},
    {{"Summe KW", each List.Sum([KW]), type nullable number}}),List.Transform({45474..45480}, each  Date.DayOfWeekName(Date.From(_),
    "de-DE")), "Tag", "Summe KW", List.Sum), "G-Summe", each List.Sum(Record.ToList(Record.RemoveFields(_, {"Stundenbereich"})))),
    Table.FromRecords({[]})})), 9,{Record.FromList({"Ergebnis:"} & List.Accumulate(List.Transform({45474..45480}, each 
    Date.DayOfWeekName(Date.From(_), "de-DE")) & {"G-Summe"},{},(st, cur)=> st & {List.Sum(Table.Column(Table.AddColumn(Table.Pivot(
    Table.Group(Table.AddColumn(Table.SelectRows(Table.TransformColumnTypes(Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],{
    {"Datum", type date}, {"Uhrzeit", type time}, {"KW", type number}, {"Tag", type text}}), each _[Datum] <> null), "Stundenbereich",
    each ZB([Uhrzeit])), {"Stundenbereich", "Tag"}, {{"Summe KW", each List.Sum([KW]), type nullable number}}),List.Transform(
    {45474..45480}, each  Date.DayOfWeekName(Date.From(_), "de-DE")), "Tag", "Summe KW", List.Sum), "G-Summe", each List.Sum(
    Record.ToList(Record.RemoveFields(_, {"Stundenbereich"})))), cur))}),Table.ColumnNames(Table.Buffer(Table.Combine({
    Table.AddColumn(Table.Pivot(Table.Group(Table.AddColumn(Table.SelectRows(Table.TransformColumnTypes(Excel.CurrentWorkbook(){
    [Name="Tabelle1"]}[Content],{{"Datum", type date}, {"Uhrzeit", type time}, {"KW", type number}, {"Tag", type text}}), each
    _[Datum] <> null), "Stundenbereich", each ZB([Uhrzeit])), {"Stundenbereich", "Tag"}, {{"Summe KW", each List.Sum([KW]), type
    nullable number}}),List.Transform({45474..45480}, each  Date.DayOfWeekName(Date.From(_), "de-DE")), "Tag", "Summe KW", List.Sum),
    "G-Summe", each List.Sum(Record.ToList(Record.RemoveFields(_, {"Stundenbereich"})))), Table.FromRecords({[]})}))))})
Viele Grüße
PIVPQ
Antworten Top
#15
Wieder doppelte Post , Taste hat geklemmt.
Viele Grüße
PIVPQ
Antworten Top
#16
Hallo PIVPQ,

schön - mal zu sehen, wie meine PQ-Lösung als verklumpter PQ-M-Code aussieht - aber leider hilft das in 1 Excel-Forum Niemanden:
- der PQ-Einsteiger wird total verschreckt
- und der PQ-Lernende muß das alles wieder in den Einzelschritt-Modus zurück transformieren
- um zu begreifen, was da eigentlich alles passiert
- doch diese Rückführung dürfte schon 1 große Hürde werden

Auf alle Fälle habe ich mir Gedanken gemacht, bestimmte Aktionen in M-Funktionen zu packen, anstatt sowas im M-Klumpen zu verstecken:
Code:
Table.AddColumn(c_02, "Time Group", each
        if Time.From([Uhrzeit]) <> null and
          Time.From([Uhrzeit]) >= #time(0, 0, 0) and
          Time.From([Uhrzeit]) < #time(3, 0, 0)
        then "00:00 - 03:00"
        else if Time.From([Uhrzeit]) <> null and
                Time.From([Uhrzeit]) >= #time(3,0, 0) and
                Time.From([Uhrzeit]) < #time(6, 0, 0)
        then "03:00 - 06:00"
        else if Time.From([Uhrzeit]) <> null and
                Time.From([Uhrzeit]) >= #time(6, 0, 0) and
                Time.From([Uhrzeit]) < #time(9, 0, 0)
        then "06:00 - 09:00"
        else if Time.From([Uhrzeit]) <> null and
                Time.From([Uhrzeit]) >= #time(9, 0, 0) and
                Time.From([Uhrzeit]) < #time(12, 0, 0)
        then "09:00 - 12:00"
        else
          if Time.From([Uhrzeit]) <> null and
              Time.From([Uhrzeit]) >= #time(12, 0, 0) and
              Time.From([Uhrzeit]) < #time(15, 0, 0)
          then "12:00 - 15:00"
          else if Time.From([Uhrzeit]) <> null and
                  Time.From([Uhrzeit]) >= #time(15, 0, 0) and
                  Time.From([Uhrzeit]) < #time(18, 0, 0)
          then "15:00 - 18:00"
          else if Time.From([Uhrzeit]) <> null and
                  Time.From([Uhrzeit]) >= #time(18, 0, 0) and
                  Time.From([Uhrzeit]) < #time(21, 0, 0)
          then "18:00 - 21:00"
          else if Time.From([Uhrzeit]) <> null and
                  Time.From([Uhrzeit]) >= #time(21, 0, 0) and
                  Time.From([Uhrzeit]) <= #time(23, 45, 0)
          then "21:00 - 23:45"
          else null),

Gruß von Luschi
aus klein-Paris
[-] Folgende(r) 1 Nutzer sagt Danke an Luschi für diesen Beitrag:
  • keniath
Antworten Top
#17
danke euch allen für die Zeit und Mühe. ich habe mir jetzt die Lösung von PIVPQ genommen und kann damit arbeiten/umbaueb. Herzlichen Dank  21
Antworten Top
#18
Anbei eine weitgehend erklickbare PQ-Lösung, die auch keine Funktionen benötigt. 

Die Zeitgruppe lässt sich übrigens ganz einfach mit:   
Code:
Col_Zeitgruppe      = Table.AddColumn(Col_WotagNr, "Zeitgruppe", each Number.RoundDown(Time.Hour(DateTime.From([Uhrzeit])) / 3, 0) + 1),
ermitteln. Mit einem Table-Join wwerden dann die Zeitfenster zugeordnet. 

In einer 2. Version habe ich die eigentlich falschen Zuordnungen korrigiert. Denn die Erste Messung vom 1.9. 23 0:00 zeigt ja den Verbrauch der letzten Viertelstunde des 31.8.23. Somit müssen auch die Verbräuche von 3:00, 6;00, 9:00 ... jeweils dem vorherigen Zeitfenster zugeordnet werden.


Angehängte Dateien
.xlsx   cef - SUMMEWENNS für bestimmte Uhrzeiten (PQ).xlsx (Größe: 1,17 MB / Downloads: 4)
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  • keniath
Antworten Top
#19
Hallo Luschi,

bei PIV sind sämtliche Ansprachen vergebliche Bemühungen. Selbst wenn Bill, persönlich, ihm sagen würde, dass diese Vorgehensweise Schwachsinn ist, dann würde er auch weiterhin diesen Schwachsinn betreiben. Denn er ist beratungsresistent und kann auch kein IT-ler sein, da ein IT-ler spätestens nach dem Ersten Änderungsbedarf diesen Unsinn aufgeben würde.

Aber verblendete gibt es halt in allen Bereichen. Wobei die verblendeten, die es in deiner Heimat gibt, mir mehr Sorgen bereiten, als der arme PIV.
Antworten Top
#20
danke dir auch für deine Lösung  21
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste