我想在json响应中扩展所有列表和记录。 列类似于例如(这是动态的,它也可以是10个记录和5个列表):
文字,文字,[列表],[列表],文字,[记录],[记录],字符串,[记录]
我写了一个函数来获取具有特定类型的所有列
Cn.GetAllColumnsWithType = (table as table, typ as type) as list =>
let
ColumnNames = Table.ColumnNames(table),
ColumnsOfType = List.Select(ColumnNames, (name) =>
List.AllTrue(List.Transform(Table.Column(table, name), (cell) => Type.Is(Value.Type(cell), typ))))
in
ColumnsOfType;
和扩展表中所有列表的函数
Cn.ExpandAllListsFromTable = (table as table, columns as list) =>
let
expandedListTable = List.Accumulate(columns, table, (state, columnToExpand) =>
Table.ExpandListColumn(state, columnToExpand))
in
expandedListTable;
所有列表现在都是记录,我想动态扩展所有这些记录。
我想我需要一个foreach迭代列表(这只是Cn.GetAllColumnsWithType的记录原因), Table.ExpandRecordColumn每个元素与它的Table.ColumnNames并将其添加到表但我不知道如何做到这一点。 也许你可以帮助我,因为它让我发疯。 干杯
编辑: 我最近开了一个帖子,但我想扩展一个像
这样的特定方法#"SelectItems" = Table.SelectColumns(records,{"$items"}),
#"$items1" = #"SelectItems"{0}[#"$items"],
但现在我想动态地完成所有操作。
答案 0 :(得分:3)
Chris Webb为Table-type列编写了一个函数来执行此操作:
http://blog.crossjoin.co.uk/2014/05/21/expanding-all-columns-in-a-table-in-power-query/
我已经分享了我为Record-type列所做的调整版本:
答案 1 :(得分:0)
假设M中的上一步被命名为Removed Other Columns
,并且要扩展的列被命名为Data
,那么我将#"Expanded Data"
的行替换为以下代码:>
#"Expanded Data" =Table.ExpandTableColumn(#"Removed Other Columns", "Data", List.Union(List.Transform(#"Removed Other Columns"[Data], each Table.ColumnNames(_))))
它动态地适应任何列名。