Power Query如何展开SharePoint列表中所有层级的嵌套表
混合类型嵌套列全量展开方案(Power Query M 语言实现)
针对SharePoint列表返回的混合值嵌套结构,可通过自定义递归函数直接绕过界面限制,自动识别所有嵌套层级的表/记录完成展开,无需手动逐列操作:
操作步骤
- 进入Power Query编辑器,在「主页」选项卡选择「高级编辑器」,先确认你的原始加载表的步骤名,比如默认是
源 - 新建空白查询:右键左侧查询面板→「新建查询」→「其他源」→「空白查询」,重命名为
fnExpandNested,将以下代码粘贴到该查询的高级编辑器中:
(input as any) as any => let 类型判断 = // 处理表类型值 if Value.Is(input, type table) then let // 先对表内所有列递归执行当前函数 列递归处理 = Table.TransformColumns(input, List.Transform(Table.ColumnNames(input), (col) => {col, (val) => @fnExpandNested(val)})), // 展开所有剩余的列表/表列 全列展开 = Table.ExpandListColumn(列递归处理, Table.ColumnNames(列递归处理){0}) in 全列展开 // 处理记录类型值 else if Value.Is(input, type record) then @fnExpandNested(Record.ToTable(input)) // 普通值直接返回 else input in 类型判断
- 回到你的原始数据表查询,新增自定义步骤:在编辑栏输入
= fnExpandNested(源)(如果你的原始表步骤名不是源,替换成对应名称即可),回车后系统会自动完成所有层级的嵌套展开
常见问题处理
- 如果展开后出现重复列名,Power Query会自动添加数字后缀,你可以按需批量重命名即可
- 若嵌套层级超过20层,可以给函数增加深度计数参数,避免栈溢出:修改函数定义为
(input as any, optional depth as number = 0) as any,并在递归调用时传入depth + 1,设置depth > 20时直接返回原值即可 - 部分行展开后出现空值,对应原始行没有对应嵌套字段,属于正常结果
内容的提问来源于stack exchange,提问作者Laventum
相关产品推荐
相关产品推荐

