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
AlienSx
6 months agoSuper User
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