AW: Gelöst: Einfach neu aufgebaut
30.09.2022 15:47:55
ChrisL
Hi Heinz
Danke für die Rückmeldung und für das Teilen der Lösung (auch im anderen Beitrag).
Tut jetzt nichts mehr zur Sache (keine erneute Rückmeldung notwendig ;), aber mir ist nun doch noch klar geworden, wo der Code herkommt.
Beispieltabelle:
let
Quelle = #table({"Titel1","Titel2","Titel3"},{{"xxx",#date(2022,1,1),"a"},{2,"xxx","b"},{3,#date(2023,1,1),"c"}}),
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Titel1", Int64.Type}, {"Titel2", type date}, {"Titel3", type text}})
in
#"Geänderter Typ"
Mit "xxx" provoziere ich bewusst Fehler, da die Typenumwandlung in Ganzzahl und Datum zum Error führt.
Als Lade-Status der Abfrage wird angezeigt:
3 Zeilen geladen. 2 Fehler.
Drückt man auf Fehler, dann wird automatisch der fragwürdige Code produziert.
let
Quelle = BeispielTabelle,
#"Typenkonflikte gefunden." = let
tableWithOnlyPrimitiveTypes = Table.SelectColumns(Quelle, Table.ColumnsOfType(Quelle, {type nullable number, type nullable text, type nullable logical, type nullable date, type nullable datetime, type nullable datetimezone, type nullable time, type nullable duration})),
recordTypeFields = Type.RecordFields(Type.TableRow(Value.Type(tableWithOnlyPrimitiveTypes))),
fieldNames = Record.FieldNames(recordTypeFields),
fieldTypes = List.Transform(Record.ToList(recordTypeFields), each [Type]),
pairs = List.Transform(List.Positions(fieldNames), (i) => {fieldNames{i}, (v) => if v = null or Value.Is(v, fieldTypes{i}) then v else error [Message = "Der Werttyp stimmt nicht mit dem Typ der Spalte überein.", Detail = v], fieldTypes{i}})
in
Table.TransformColumns(Quelle, pairs),
#"Hinzugefügter Index" = Table.AddIndexColumn(#"Typenkonflikte gefunden.", "Zeilennummer" ,1),
#"Beibehaltene Fehler" = Table.SelectRowsWithErrors(#"Hinzugefügter Index", {"Titel1", "Titel2", "Titel3"}),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Beibehaltene Fehler", {"Zeilennummer", "Titel1", "Titel2", "Titel3"})
in
#"Neu angeordnete Spalten"
Lustigerweise kann man ein identisches Resultat wie folgt produzieren. Es ist mir ein Rätsel, wieso PQ den Code auf die komplizierte Art und Weise erzeugt.
let
Quelle = BeispielTabelle,
#"Hinzugefügter Index" = Table.AddIndexColumn(Quelle, "Index", 1, 1, Int64.Type),
Ergebnis = Table.SelectRowsWithErrors(#"Hinzugefügter Index")
in
Ergebnis
cu
Chris