在 powerquery 中创建条件 Table.TransformColumnType
Create conditional Table.TransformColumnType in powerquery
我正在尝试将列转换为数字。如果 TransformColumnTypes 导致错误,我想保留它的文本。像这样:
#"Changed Type" = try Table.TransformColumnTypes(CombineTables,List.Transform(sTranCol, each {_, type number})), otherwise Table.TransformColumnTypes(CombineTables,List.Transform(sTranCol, each {_, type number})),
显然这行不通。 sTranCol 是要转换为数字的列列表。它是动态创建的,不是静态的。我不在乎它是否会在单元格中引入错误,但单元格中的错误转置会导致查询中止。
我见过的用于检测列数据类型的 M 代码方法包括对数据进行采样和确定类型。这看起来很乱。
但也许另一种方法是将列键入为数字,然后将错误值替换为在转置时不会导致问题的值。
这里是一些用 null 替换错误的示例代码,但您可以用任何 null 或数字替换:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUTJUitWJBpI6SsZglhGQZQ5mVQBZiWCWKZCVBGaZA1kVEB0ghYYmSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,
List.Transform(Table.ColumnNames(Source), each {_,type nullable number})),
nullList = List.Transform(Table.ColumnNames(#"Changed Type"), each {_, null}),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", nullList)
in
#"Replaced Errors"
来源
已更改类型
替换错误
编辑:添加 M 代码以根据是否所有数字设置列类型
let
Source = Excel.CurrentWorkbook(){[Name="Table37"]}[Content],
//check data type
//if all numbers set to number, else any
colTypes = List.Accumulate(Table.ColumnNames(Source),
{},
(state,current)=> List.Combine({state,
if List.IsEmpty(
List.RemoveMatchingItems(
List.Transform(Table.Column(Source,current), each Value.Type(_)),
{type number}))
then {{current, type number}}
else {{current, type any}}})),
#"Changed Type" = Table.TransformColumnTypes(Source,colTypes)
in
#"Changed Type"
来源
已更改类型
我正在尝试将列转换为数字。如果 TransformColumnTypes 导致错误,我想保留它的文本。像这样:
#"Changed Type" = try Table.TransformColumnTypes(CombineTables,List.Transform(sTranCol, each {_, type number})), otherwise Table.TransformColumnTypes(CombineTables,List.Transform(sTranCol, each {_, type number})),
显然这行不通。 sTranCol 是要转换为数字的列列表。它是动态创建的,不是静态的。我不在乎它是否会在单元格中引入错误,但单元格中的错误转置会导致查询中止。
我见过的用于检测列数据类型的 M 代码方法包括对数据进行采样和确定类型。这看起来很乱。
但也许另一种方法是将列键入为数字,然后将错误值替换为在转置时不会导致问题的值。
这里是一些用 null 替换错误的示例代码,但您可以用任何 null 或数字替换:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUTJUitWJBpI6SsZglhGQZQ5mVQBZiWCWKZCVBGaZA1kVEB0ghYYmSrGxAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,
List.Transform(Table.ColumnNames(Source), each {_,type nullable number})),
nullList = List.Transform(Table.ColumnNames(#"Changed Type"), each {_, null}),
#"Replaced Errors" = Table.ReplaceErrorValues(#"Changed Type", nullList)
in
#"Replaced Errors"
来源
已更改类型
替换错误
编辑:添加 M 代码以根据是否所有数字设置列类型
let
Source = Excel.CurrentWorkbook(){[Name="Table37"]}[Content],
//check data type
//if all numbers set to number, else any
colTypes = List.Accumulate(Table.ColumnNames(Source),
{},
(state,current)=> List.Combine({state,
if List.IsEmpty(
List.RemoveMatchingItems(
List.Transform(Table.Column(Source,current), each Value.Type(_)),
{type number}))
then {{current, type number}}
else {{current, type any}}})),
#"Changed Type" = Table.TransformColumnTypes(Source,colTypes)
in
#"Changed Type"
来源
已更改类型