Table.Column 值为 (-4.80, 0.70) 用作列表时抛出错误
Table.Column with value (-4.80, 0.70) throws error when using as List
基于这个答案我能够清理大量数据。
但现在我必须修复一个包含值为 (-4.80, 0.70)
的单元格的列,这 returns 在我的函数中调用列函数时出错
对我来说,如果 (-4.80, 0.70)
被读取为包含两列的列表,则错误消息听起来像是 - 并引发错误 :-/
这是函数。
我注释掉了所有内容 - 并添加了前两行来演示问题。
//fnFixMultipleValuesInCell
//
let
fnFixMultipleValuesInCell = (Source as table, columnName as text, columnIndex as number) as table =>
let
listColumn = Table.Column(Source, columnName), //same result for listColumn = Source[Column2]
Result = Table.FromList(listColumn) /*,
addIndex = Table.AddIndexColumn(Source, "Index",0),
replaceNull = Table.ReplaceValue(addIndex,null,"",Replacer.ReplaceValue,{columnName}),
splitMergedCells = List.Select(List.Combine(List.Transform( Table.Column(replaceNull, columnName), each Text.Split(_, "#(lf)"))), each Text.Length(_) > 0 ),
insertColumn = Table.AddColumn(replaceNull, "new", each splitMergedCells{[Index]}) ,
removeOldColumn = Table.RemoveColumns(insertColumn,{columnName, "Index"}),
renameColumn = Table.RenameColumns(removeOldColumn,{{"new",columnName}}),
ColumnNames = Table.ColumnNames(renameColumn),
newColumnNamesList = List.RemoveLastN( List.Combine({List.FirstN(ColumnNames, columnIndex-2), List.LastN(ColumnNames,1), List.LastN(ColumnNames, List.Count(ColumnNames)-columnIndex+1 ) } ),1),
Result = Table.ReorderColumns(renameColumn, newColumnNamesList) */
in
Result
in fnFixMultipleValuesInCell
我的代码有什么问题吗?
我能做些什么,将此函数用于任何类型的列 - 无论数据如何?
你是正确的,它将逗号解释为表示一个额外的列。
如果您查看 Table.FromList 的文档,您将看到以下内容:
Table.FromList(list as list, optional splitter as nullable function, optional columns as any, optional default as any, optional extraValues as nullable number) as table
Converts a list, list
into a table by applying the optional splitting function, splitter
, to each item in the list. By default, the list is assumed to be a list of text values that is split by commas. Optional columns may be the number of columns
, a list of columns or a TableType. Optional default
and extraValues
may also be specified.
要解决此问题,请将 Table.FromList(listColumn)
更改为
Table.FromList(listColumn, Splitter.SplitByNothing())
基于这个答案
但现在我必须修复一个包含值为 (-4.80, 0.70)
的单元格的列,这 returns 在我的函数中调用列函数时出错
对我来说,如果 (-4.80, 0.70)
被读取为包含两列的列表,则错误消息听起来像是 - 并引发错误 :-/
这是函数。 我注释掉了所有内容 - 并添加了前两行来演示问题。
//fnFixMultipleValuesInCell
//
let
fnFixMultipleValuesInCell = (Source as table, columnName as text, columnIndex as number) as table =>
let
listColumn = Table.Column(Source, columnName), //same result for listColumn = Source[Column2]
Result = Table.FromList(listColumn) /*,
addIndex = Table.AddIndexColumn(Source, "Index",0),
replaceNull = Table.ReplaceValue(addIndex,null,"",Replacer.ReplaceValue,{columnName}),
splitMergedCells = List.Select(List.Combine(List.Transform( Table.Column(replaceNull, columnName), each Text.Split(_, "#(lf)"))), each Text.Length(_) > 0 ),
insertColumn = Table.AddColumn(replaceNull, "new", each splitMergedCells{[Index]}) ,
removeOldColumn = Table.RemoveColumns(insertColumn,{columnName, "Index"}),
renameColumn = Table.RenameColumns(removeOldColumn,{{"new",columnName}}),
ColumnNames = Table.ColumnNames(renameColumn),
newColumnNamesList = List.RemoveLastN( List.Combine({List.FirstN(ColumnNames, columnIndex-2), List.LastN(ColumnNames,1), List.LastN(ColumnNames, List.Count(ColumnNames)-columnIndex+1 ) } ),1),
Result = Table.ReorderColumns(renameColumn, newColumnNamesList) */
in
Result
in fnFixMultipleValuesInCell
我的代码有什么问题吗? 我能做些什么,将此函数用于任何类型的列 - 无论数据如何?
你是正确的,它将逗号解释为表示一个额外的列。
如果您查看 Table.FromList 的文档,您将看到以下内容:
Table.FromList(list as list, optional splitter as nullable function, optional columns as any, optional default as any, optional extraValues as nullable number) as table
Converts a list,
list
into a table by applying the optional splitting function,splitter
, to each item in the list. By default, the list is assumed to be a list of text values that is split by commas. Optional columns may be the number ofcolumns
, a list of columns or a TableType. Optionaldefault
andextraValues
may also be specified.
要解决此问题,请将 Table.FromList(listColumn)
更改为
Table.FromList(listColumn, Splitter.SplitByNothing())