使用Power BI自定义数据连接器提取数据遇类型转换错误
解决Power BI自定义连接器“无法将Record类型转换为Table类型”错误
问题排查
- 核心错误:你用
List.Generate生成的AllJson是一组包含i和data字段的记录,而Table.Combine只能接收表的列表,直接传入记录列表就会触发类型转换错误。 - 字段提取错误:代码里
apiData[data]是错误写法,应该用字符串索引apiData["data"],否则会把变量data当作字段名去查找,大概率取不到正确值。 - 空值未处理:当某个symbol没有返回数据时,
getJson会返回null,合并时需要先过滤这些空值,避免报错。
修正后的代码
getMydata.getMyData = (apiKey as text, symbols as text, startYear as text, endYear as text) => let symbolList = Text.Split(symbols, ","), initialPosition = 0, getJson = (position) => let source = Json.Document( Web.Contents( "https://myDataAPI.com/getData.json?apikey=" & apiKey & "&symbol=" & symbolList{position} & "&startYear=" & startYear & "&endYear=" & endYear ) ), apiData = try source[results] otherwise null, data = if apiData <> null then apiData["data"] else null, // 修正字段索引写法 toTable = if data <> null then Table.FromRecords(data) else null in toTable, AllJson = List.Generate( () => [i = 1, data = getJson(initialPosition)], each [i] <= List.Count(symbolList), each [i = [i] + 1, data = getJson([i])] ), // 提取所有data字段,过滤null后合并 tableList = List.Transform(AllJson, each [data]), filteredTables = List.RemoveNulls(tableList), finalTable = Table.Combine(filteredTables) in finalTable
关键修改点
- 用
List.Transform(AllJson, each [data])从记录列表中提取出所有表对象 - 新增
List.RemoveNulls(filteredTables)过滤掉无数据返回的null值 - 修正
apiData["data"]的字段索引写法,确保正确提取数据
内容的提问来源于stack exchange,提问作者GeekyPanda
相关产品推荐
相关产品推荐

