Forum Discussion
Generate a column for dates between start dates (list/ pivot?)
- 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
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.