Power Query处理空API结果时规避Expression.Error的方法
问题:Power Query M代码处理空结果时报错"枚举中的元素不足"
遇到错误:Expression.Error:枚举中的元素不足,无法完成操作。
使用的M代码如下:
results = Sourcea[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", Record.FieldNames(#"Converted to Table"{0}[Column1]), Record.FieldNames(#"Converted to Table"{0}[Column1])),
当results不为空时代码运行正常,但results为空时会报错。results来自JSON API的Get请求,错误出在#"Expanded Column1"步骤——该步骤通过动态函数扩展列以适配任意数据集结构,但空表情况下,#"Converted to Table"{0}[Column1]无法找到元素,导致枚举失败。需要实现:结果为空时避免错误,返回“未找到结果”或空表。
解决方案
方案1:返回空表
修改#"Expanded Column1"步骤,先检查表是否为空,为空则返回空表,否则执行原扩展逻辑:
results = Sourcea[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = if Table.IsEmpty(#"Converted to Table") then Table.FromRecords({}) else Table.ExpandRecordColumn(#"Converted to Table", "Column1", Record.FieldNames(#"Converted to Table"{0}[Column1]), Record.FieldNames(#"Converted to Table"{0}[Column1])),
方案2:返回包含提示信息的表
如果需要明确提示无结果,可构造单列表格返回提示:
results = Sourcea[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = if Table.IsEmpty(#"Converted to Table") then Table.FromRecords({[提示 = "未找到结果"]}) else Table.ExpandRecordColumn(#"Converted to Table", "Column1", Record.FieldNames(#"Converted to Table"{0}[Column1]), Record.FieldNames(#"Converted to Table"{0}[Column1])),
核心逻辑
- 用
Table.IsEmpty(#"Converted to Table")判断转换后的表是否为空(对应results为空的场景) - 为空时直接返回预设的空表或提示表,避免执行会触发错误的
Record.FieldNames调用 - 非空时保留原动态扩展逻辑,确保对任意数据集结构的兼容性
内容的提问来源于stack exchange,提问作者Renier Wessels
相关产品推荐
相关产品推荐

