Clever-Excel-Forum

Normale Version: XL - PQ: Befehl für Typisierung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
  • 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
******************************************************************************************
(24.10.2022, 19:51)DeltaX schrieb: [ -> ]Solved: Change column types dynamically - Microsoft Power BI Community
Richtig, danke für den Link! <habe gerade entsetzt festgestellt, dass ich hier noch nicht geantwortet hatte - hole ich jetzt 'leicht verspätet' nach...>

In meinem Fall sieht das so aus:
Code:
= Table.TransformColumnTypes(>table<, List.Transform(>List-of-columnheads<, each {_, Number.Type}), "en-US")

Lässt sich natürlich noch anpassen, je nach Bedarf...

Gruß und Dank,
RaiSta