Hallo Ihr Wissenden,
bin mal wieder ratlos, daher wende ich mich hier an die Experten:
In meinem Excel-PowerQuery möchte ich dafür sorgen, dass ab der 5. Spalte alle nachfolgenden als 'type number' typisiert werden. Da sich die Anzahl der Spalten ändern wird, möchte ich das dynamisieren.
Dazu habe ich
Nun war meine Hoffnung, dass ich diese Liste später verwenden kann, um die Spalten ab Spalte 5 als 'number' zu deklarieren: Table.TransformColumnTypes(>DatenTabelle<, >Liste mit Typisierung<, "en-US").
Leider führt das zur Fehlermeldung "Expression.Error: Der Wert ""type number"" kann nicht in den Typ "Type" konvertiert werden."
Problem ist wohl, dass der Eintrag 'type number' als Text interpretiert wird und nicht als 'Kommando'(?).
Wie gehe ich vor, um mein Ziel zu erreichen? Nachfolgend mein PQ-Code bis zur den Fehler erzeugenden Zeile:
******************************************************************************************
let
Quelle = Csv.Document(File.Contents("XYZ\Recipe.CSV"),[Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.None]), //Datei wird eingelesen
ÜS.Liste=Table.ColumnNames(Quelle), //Liste mit Spaltennamen
ÜS.DatenSpalten = List.Skip(ÜS.Liste,4), //Nur die Spaltennamen ab der 5. Spalte bleiben übrig
ÜS.Daten.Tabelle = Table.FromList(ÜS.DatenSpalten, Splitter.SplitByNothing(), null, null, ExtraValues.Error), //Aus der Liste wieder eine (einspaltige) Tabelle
ÜSplusTyp = Table.AddColumn(ÜS.Daten.Tabelle, "Typ", each "type number"), //Tabelle wird um Typisierungs-Spalte ergänzt (Text(!) "type number" in jeder Zeile)
TypisierungsTabelle = Table.AddColumn(ÜSplusTyp, "Typisierung", each {[Column1],[Typ]}), //Jede Zeile eine Liste mit {>Spaltenname<, type number}
TypisierungsSpalte = Table.SelectColumns(TypisierungsTabelle,{"Typisierung"})[Typisierung], //Liste von Listen wird erzeugt
Kopfzeilen = Table.FirstN(Quelle,6), //Quelldatei wird aufgeteilt: die ersten 6 Zeilen alles Text
Daten0 = Table.Skip(Quelle,6), //nach der 6-ten Zeile dann der Datenbereich
Daten1 = Table.FirstN(Daten0,176), //...und im Datenbereich nur die ersten 176 Zeilen betrachten
TypisierungFix = Table.TransformColumnTypes(Daten1, {{"Column5", type number}, {"Column6", type number}, {"Column7", type number}, {"Column8", type number}, {"Column9", type number}, {"Column10", type number}, {"Column11", type number}, {"Column12", type number}}, "en-US"), //Zum Anschauen: so sieht die fixe Typisierung aus
TypisierungDynamisch = Table.TransformColumnTypes(Daten1, TypisierungsSpalte, "en-US"), //... das klappt leider nicht: Typisierung mit der oben erzeugten Liste von Listen
<< noch ein
paar Zeilen>>
in
Daten3
******************************************************************************************
bin mal wieder ratlos, daher wende ich mich hier an die Experten:
In meinem Excel-PowerQuery möchte ich dafür sorgen, dass ab der 5. Spalte alle nachfolgenden als 'type number' typisiert werden. Da sich die Anzahl der Spalten ändern wird, möchte ich das dynamisieren.
Dazu habe ich
- mit dem Befehl Table.ColumnNames() eine Liste der Spaltenüberschriften erstellt
- diese um die ersten 4 Einträge reduziert
- die Liste wieder in eine (einspaltige) Tabelle gewandelt
- der Tabelle eine weitere Spalte hinzugefügt, überall den Eintrag 'type number' eingetragen
- in einer weiteren Spalte die ersten beiden zu jeweiligen Listen kombiniert
- und diese letzte Spalte zu einer Liste gemacht.
Nun war meine Hoffnung, dass ich diese Liste später verwenden kann, um die Spalten ab Spalte 5 als 'number' zu deklarieren: Table.TransformColumnTypes(>DatenTabelle<, >Liste mit Typisierung<, "en-US").
Leider führt das zur Fehlermeldung "Expression.Error: Der Wert ""type number"" kann nicht in den Typ "Type" konvertiert werden."
Problem ist wohl, dass der Eintrag 'type number' als Text interpretiert wird und nicht als 'Kommando'(?).
Wie gehe ich vor, um mein Ziel zu erreichen? Nachfolgend mein PQ-Code bis zur den Fehler erzeugenden Zeile:
******************************************************************************************
let
Quelle = Csv.Document(File.Contents("XYZ\Recipe.CSV"),[Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.None]), //Datei wird eingelesen
ÜS.Liste=Table.ColumnNames(Quelle), //Liste mit Spaltennamen
ÜS.DatenSpalten = List.Skip(ÜS.Liste,4), //Nur die Spaltennamen ab der 5. Spalte bleiben übrig
ÜS.Daten.Tabelle = Table.FromList(ÜS.DatenSpalten, Splitter.SplitByNothing(), null, null, ExtraValues.Error), //Aus der Liste wieder eine (einspaltige) Tabelle
ÜSplusTyp = Table.AddColumn(ÜS.Daten.Tabelle, "Typ", each "type number"), //Tabelle wird um Typisierungs-Spalte ergänzt (Text(!) "type number" in jeder Zeile)
TypisierungsTabelle = Table.AddColumn(ÜSplusTyp, "Typisierung", each {[Column1],[Typ]}), //Jede Zeile eine Liste mit {>Spaltenname<, type number}
TypisierungsSpalte = Table.SelectColumns(TypisierungsTabelle,{"Typisierung"})[Typisierung], //Liste von Listen wird erzeugt
Kopfzeilen = Table.FirstN(Quelle,6), //Quelldatei wird aufgeteilt: die ersten 6 Zeilen alles Text
Daten0 = Table.Skip(Quelle,6), //nach der 6-ten Zeile dann der Datenbereich
Daten1 = Table.FirstN(Daten0,176), //...und im Datenbereich nur die ersten 176 Zeilen betrachten
TypisierungFix = Table.TransformColumnTypes(Daten1, {{"Column5", type number}, {"Column6", type number}, {"Column7", type number}, {"Column8", type number}, {"Column9", type number}, {"Column10", type number}, {"Column11", type number}, {"Column12", type number}}, "en-US"), //Zum Anschauen: so sieht die fixe Typisierung aus
TypisierungDynamisch = Table.TransformColumnTypes(Daten1, TypisierungsSpalte, "en-US"), //... das klappt leider nicht: Typisierung mit der oben erzeugten Liste von Listen
<< noch ein
paar Zeilen>>
in
Daten3
******************************************************************************************