我的用例正在导入CSV数据表。默认情况下,导入的表的所有列的类型均为“文本”。然后根据单独的转换表转换每列。
'Key' 'Name' 'Creation Date'
-------------------------------------------
'1' 'Bob' '21/Jan/20 12:00 AM'
'Field' 'Directive'
-------------------------------------
'Key' 'int64'
'Name' 'text'
'Creation Date' 'date'
我的目标是根据TransformationTable中的指令来转换CSVTable。注意:“名称”字段在CSV中已经是文本格式,因此无需进行转换。
目前,我已在下面的代码行中对转换进行了硬编码。此代码段
OutputTable = Table.TransformColumnTypes(CSVTable,{{"Key", Int64.Type}, {"Creation Date", type datetime}}),
我想基于TransformationTable中的定义来控制转换,而不是硬编码。我该如何实现?
基于此设置:
列类型表名称:TableTypes
值表名称:Table1
源代码:
表格:TableTypes
let
Source= Excel.CurrentWorkbook(){[Name="TableTypes"]}[Content],
ChangeColTypes = Table.TransformColumnTypes(Source,{{"Column header", type text}, {"Type", type text}}),
ToType = Table.TransformColumns(ChangeColTypes,{{"Type", Expression.Evaluate}}),
ToField = Table.AddColumn(ToType, "Custom", each Record.FieldValues(_)),
RemoveOtherCols = Table.SelectColumns(ToField,{"Custom"}),
ToList = RemoveOtherCols[Custom]
in
ToList
表格:Table1
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ChangeTypes = Table.TransformColumnTypes(Source,TableTypes)
in
ChangeTypes
输出:
如果您确实需要非基本类型(例如Int64.Type),请使用:
= Table.TransformColumns(types, {{"col Type", each Expression.Evaluate(_, [Currency.Type=Currency.Type, Int64.Type=Int64.Type, Percentage.Type=Percentage.Type]) }})