Power Query导入CSV报错:无法将Record类型转换为Table类型
问题:Power Query导入CSV报错“无法将Record转换为Table”
问题详情
尝试使用以下Power Query代码从指定共享路径导入以hedge_factors_config_开头的最新CSV文件:
let Source = Folder.Files("\\alignefsxprd.aws.edfenergy.net\share\ETRMHUB\Lookup\Config"), FilteredFiles = Table.SelectRows(Source, each Text.StartsWith([Name], "hedge_factors_config_")), MaxDateModified = List.Max(FilteredFiles[Date modified]), FilteredFilesMaxDate = Table.SelectRows(FilteredFiles, each [Date modified] = MaxDateModified), ImportData = Table.Combine( List.Transform(FilteredFilesMaxDate[Content], each Csv.Document(_, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]){0}) ) in ImportData
运行时报错:
Expression.Error: We cannot convert a value of type Record to type Table. Details: Value= Column1=TEAM_FILE Column2=EFFECTIVE_FROM_DATETIME Column3=EFFECTIVE_TO_DATETIME Column4=BOOK_ATTRIBUTE_3 Column5=BOOK_ATTRIBUTE_6 Column6=BOOK_ATTRIBUTE_8 Column7=FORECAST_BOOk
目标CSV文件的前几行内容如下:
TEAM_FILE,EFFECTIVE_FROM_DATETIME,EFFECTIVE_TO_DATETIME,BOOK_ATTRIBUTE_3,BOOK_ATTRIBUTE_6,BOOK_ATTRIBUTE_8,FORECAST_BOOK,HEDGE_BOOK,TARGET_BOOK,TRADE_GROUP_1,FACTOR_START,FACTOR_END,STRATEGY_TYPE,CARBON_TRADES,AVERAGED,MATRIX_FILE,ALIGNE_DATE,TARGET_DATE,TARGET_FACTOR,VOLUME_HEDGE B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/06/2023,30/06/2023,Passthrough,,,,,,1, B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/07/2023,31/07/2023,Passthrough,,,,,,1, B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/08/2023,31/08/2023,Passthrough,,,,,,0.9, B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/09/2023,30/09/2023,Passthrough,,,,,,0.9,
疑问:该错误是否是由于CSV中“PROGRESSIVE 6_2_6”值包含空格所导致?
错误原因
不是空格导致的。错误根源在代码的ImportData步骤:
Csv.Document()返回的是完整的表结构,你在后面加了{0},这会提取表的第一行,也就是一个**Record(记录)**对象。Table.Combine()要求输入参数是表的列表,但你传入的是记录的列表,所以触发了“无法将Record转换为Table”的错误。
修正后的代码
移除Csv.Document()后的{0},同时添加提升表头的步骤,让CSV的第一行作为列名:
let Source = Folder.Files("\\alignefsxprd.aws.edfenergy.net\share\ETRMHUB\Lookup\Config"), FilteredFiles = Table.SelectRows(Source, each Text.StartsWith([Name], "hedge_factors_config_")), MaxDateModified = List.Max(FilteredFiles[Date modified]), FilteredFilesMaxDate = Table.SelectRows(FilteredFiles, each [Date modified] = MaxDateModified), ImportData = Table.Combine( List.Transform(FilteredFilesMaxDate[Content], each Table.PromoteHeaders( Csv.Document(_, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]), [PromoteAllScalars=true] ) ) ) in ImportData
关键修改点
- 去掉
Csv.Document()后的{0},保留完整的表返回值,确保List.Transform生成的是表的列表。 - 添加
Table.PromoteHeaders(),将CSV的第一行(表头行)转换为表的列名,避免默认的Column1/Column2这类命名。
内容的提问来源于stack exchange,提问作者r.baton
相关产品推荐
相关产品推荐

