咨询:PowerQuery中Table.FromRecords未返回全部列,如何获取所有列?
在Power Query中让Table.FromRecords生成包含所有可能列的表格方法
当使用Table.FromRecords函数时,如果记录列表里不同记录的字段不完全一致,默认只会基于第一条记录的字段生成表格列,导致后续记录中的额外字段被忽略——比如你给出的示例里,第三行的Email字段就没有出现在结果表格中。
要生成包含所有可能列的表格,有两种常用方法:
方法一:手动指定所有列名
直接在Table.FromRecords的第二个参数位置,传入包含所有可能字段的列表,这样函数就会按照这个列表生成列,缺失的字段会根据第三个参数(这里是MissingField.UseNull)填充为null。修改后的代码如下:
= Table.FromRecords({ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"], [CustomerID = 3, Name = "Paul", Phone = "543-7890", Email = "hello@microsoft.com"] }, {"CustomerID", "Name", "Phone", "Email"}, MissingField.UseNull)
这种方法适合提前知道所有字段的场景,操作简单直接。
方法二:动态提取所有列名
如果记录数量多、字段不固定,手动列名太繁琐,可以通过代码动态提取所有记录的字段名,再传给Table.FromRecords:
let RecordsList = { [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"], [CustomerID = 3, Name = "Paul", Phone = "543-7890", Email = "hello@microsoft.com"] }, // 提取所有记录的字段名并去重 AllColumns = List.Union(List.Transform(RecordsList, Record.FieldNames)), // 生成包含所有列的表格 ResultTable = Table.FromRecords(RecordsList, AllColumns, MissingField.UseNull) in ResultTable
这段代码的逻辑是:先用List.Transform把每个记录转换成对应的字段名列表,再用List.Union合并所有列表并去重,得到所有存在的字段名,最后用这个字段名列表生成表格。这种方法能自动适配记录中新增的字段,无需手动修改列名。
内容的提问来源于stack exchange,提问作者Anthony Phan
相关产品推荐
相关产品推荐

