Forum Discussion
WMart_AMS
6 months agoFrequent Visitor
Generate a column for dates between start dates (list/ pivot?)
Hi all, I am looking for a solution in power query for the following. I have an overview with shipping and return costs per year, country and channel. the costs change every now and then. m...
- 6 months ago
Hi,
ich hoffe, die Datenqualität ist im Original besser...;)
So wie ich das verstanden habe, könntest Du das folgendermaßen lösen:
Abfrage 1: Alle Versandkosten:
M-Code:
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], Tarifspalten = Table.ColumnNames(Quelle), #"Entfernte oberste Elemente" = List.Skip(Tarifspalten,2), #"In Tabelle konvertiert" = Table.FromList(#"Entfernte oberste Elemente", Splitter.SplitTextByDelimiter(" "), null, null, ExtraValues.Error), #"Gefilterte Zeilen" = Table.SelectRows(#"In Tabelle konvertiert", each ([Column1] = "Rückgabekosten")), ColToDel = Table.AddColumn(#"Gefilterte Zeilen", "Relevant", each [Column1] & " " & [Column2])[Relevant], #"Entfernte Spalten" = Table.RemoveColumns(Quelle,ColToDel), #"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Entfernte Spalten", {"CountryID", "Kanal"}, "Attribut", "Wert"), #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Entpivotierte Spalten", "Attribut", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Tarif", "Datum"}) in #"Spalte nach Trennzeichen teilen"Abfrage 2: Alle Rückgaben, an die die Versanddaten angehängt werden. (Natürlich kann man das auch in einer Abfrage erledigen, aber so wird es hoffentlich klarer)
M-Code:
let Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content], Tarifspalten = Table.ColumnNames(Quelle), #"Entfernte oberste Elemente" = List.Skip(Tarifspalten,2), #"In Tabelle konvertiert" = Table.FromList(#"Entfernte oberste Elemente", Splitter.SplitTextByDelimiter(" "), null, null, ExtraValues.Error), #"Gefilterte Zeilen" = Table.SelectRows(#"In Tabelle konvertiert", each ([Column1] = "Versandkosten")), ColToDel = Table.AddColumn(#"Gefilterte Zeilen", "Relevant", each [Column1] & " " & [Column2])[Relevant], #"Entfernte Spalten" = Table.RemoveColumns(Quelle,ColToDel), #"Entpivotierte Spalten" = Table.UnpivotOtherColumns(#"Entfernte Spalten", {"CountryID", "Kanal"}, "Attribut", "Wert"), #"Spalte nach Trennzeichen teilen" = Table.SplitColumn(#"Entpivotierte Spalten", "Attribut", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Tarif", "Datum"}), #"Angefügte Abfrage" = Table.Combine({#"Spalte nach Trennzeichen teilen", TarifVersand}) in #"Angefügte Abfrage"Hier kannst Du die Beispieldatei herunterladen.
- 6 months ago
let fx_dates = (s, e) => List.Generate(() => s, (x) => x < e, (x) => Date.AddMonths(x, 1)), Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], eff_dates = List.Buffer( List.Sort( List.Distinct( List.Transform( List.Skip(Table.ColumnNames(Source), 2), (x) => Date.From(Text.AfterDelimiter(x, "cost "), "de") ) ) ) & {Date.StartOfMonth(Date.AddMonths(Date.From(DateTime.LocalNow()), 2))} ), all_dates = List.Buffer( List.Transform( List.RemoveLastN(List.Positions(eff_dates)), (x) => fx_dates(eff_dates{x}, eff_dates{x + 1}) ) ), upvt = Table.UnpivotOtherColumns(Source, {"CountryID", "Channel"}, "Attribute", "Tarif"), split = Table.SplitColumn(upvt, "Attribute", Splitter.SplitTextByDelimiter(" cost "), {"Cost type", "Date"}), tx = Table.TransformColumns( split, { {"Date", (x) => all_dates{List.PositionOf(eff_dates, Date.From(x, "de"))}}, {"Tarif", (x) => Value.FromText(x, "de")} } ), z = Table.ExpandListColumn(tx, "Date") in z
BA_Pete
6 months agoSuper User
Hi WMart_AMS ,
Tha big question here is: why?
Why do you need the data in this format. Admittedly, your original data format is 'wrong' with the dated columns, but what's the bigger picture that requires the monthly dates between?
I only ask as there may be a faster/easier route to your end goal if I can understand the bigger picture.
Pete