首页 > 解决方案 > 具有值 (-4.80, 0.70) 的 Table.Column 用作 List 时会引发错误

问题描述

基于这个答案https://stackoverflow.com/a/68625162/16578424我能够清理大量数据。

但是现在我必须修复一个包含一个单元格的列,该单元格的值(-4.80, 0.70)在我的函数中调用列函数时会返回错误 源表和结果

对我来说,错误消息听起来像是(-4.80, 0.70)一个包含两列的列表 - 这会引发错误:-/

这就是功能。我将所有内容都注释掉了——并添加了前两行来演示问题。

//fnFixMultipleValuesInCell
//https://stackoverflow.com/a/68625162/1657842
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

我的代码有什么问题吗?我能做的任何事情,将这个函数用于任何类型的列 - 无论数据如何?

标签: powerquerym

解决方案


您是正确的,它将逗号解释为表示额外的列。

如果您查看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

list通过将可选的拆分函数 ,splitter应用于列表中的每个项目,将列表转换为表格。默认情况下,该列表假定为由逗号分隔的文本值列表。可选列可以是个数columns、列列表或 TableType。可选default的,extraValues也可以指定。

要解决此问题,请更改Table.FromList(listColumn)

Table.FromList(listColumn, Splitter.SplitByNothing())

推荐阅读