Q:根据其他表转换列?

问题描述 投票:0回答:1

我的用例正在导入CSV数据表。默认情况下,导入的表的所有列的类型均为“文本”。然后根据单独的转换表转换每列。

CSVTable

'Key'   'Name'   'Creation Date'
-------------------------------------------
'1'     'Bob'    '21/Jan/20 12:00 AM'       

TransformationTable

'Field'          'Directive'
-------------------------------------
'Key'            'int64'
'Name'           'text'
'Creation Date'  'date'

我的目标是根据TransformationTable中的指令来转换CSVTable。注意:“名称”字段在CSV中已经是文本格式,因此无需进行转换。

OutputTable

目前,我已在下面的代码行中对转换进行了硬编码。此代码段

OutputTable = Table.TransformColumnTypes(CSVTable,{{"Key", Int64.Type}, {"Creation Date", type datetime}}),

问题

我想基于TransformationTable中的定义来控制转换,而不是硬编码。我该如何实现?

excel powerbi transformation powerquery
1个回答
0
投票

Credits to Imke and Marcel

基于此设置:

  1. 列类型表名称:TableTypes

  2. 值表名称:Table1

Setup

源代码:

表格: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

输出:

output

如果您确实需要非基本类型(例如Int64.Type),请使用:

= Table.TransformColumns(types, {{"col Type", each Expression.Evaluate(_, [Currency.Type=Currency.Type, Int64.Type=Int64.Type, Percentage.Type=Percentage.Type]) }})
© www.soinside.com 2019 - 2024. All rights reserved.