Forum Discussion
Optrix
5 years agoNew Member
Loading Table Column Types from Another Table
I've got two PowerQuery tables - one containing my actual data, one containing the data type for each row. For example, one table is... Name High Score Age Geoff 20 29 Sandra 203...
- 5 years ago
With non-primitive type support:
let // TextToType function #"Type Table" = Table.FromRows({ {"text", Text.Type}, {"Integer", Int64.Type}, {"Floating Point", Number.Type} }, Type.AddTableKey (type table [#"Json Type" = text, #"Actual Type" = type] , {"Json Type"}, true) ), TextToType = (jsontype as any) as type => #"Type Table"{[#"Json Type" = jsontype]}[Actual Type], // First table FirstTable = Table.FromRecords({ [name = "George", age = 22, score=50], [name = "Sarah", age = 19, score=201] }), // Second Table SecondTable = Table.FromRecords({ [name = "text", age = "Integer", score="Floating Point"] }), #"Add Types to Second Table" = Table.TransformColumns(Table.Transpose(Table.DemoteHeaders(SecondTable)), {{"Column2", TextToType, type type}}), TypeList = List.Zip ({#"Add Types to Second Table"[Column1], #"Add Types to Second Table"[Column2]}), // Transform Types #"Types to first table" = Table.TransformColumnTypes(FirstTable, TypeList) in #"Types to first table"So basically if you ever get more than these three types, you'll just need to add them in the #"Type Table"
shaowu459
Resolver II
5 years agoHi, Optrix
Please have this a try:
let
FirstTable = Table.FromRecords({
[name = "George", age = 22, score=50],
[name = "Sarah", age = 19, score=201]
}),
SecondTable = Table.FromRecords({
[name = "text", age = "Integer", score="Floating Point"]
}),
typeList = {{"Floating Point",Number.From},{"text", Text.From},{"Integer", Int64.From}},
acc = List.Accumulate(
Table.ToColumns(Table.DemoteHeaders(SecondTable)),
FirstTable,
(x,y)=>
Table.TransformColumns(x,{y{0},List.Select(typeList,each _{0}=y{1}){0}{1}})
)
in
acc