Power Query - 从嵌套列表中提取数据
Power Query - extracting data from nested lists
我有几个JSON files that I need to combine in power query. Ever file has the same structure that needs to be pivoted. Here's link to the files
我很挣扎,因为每个文件都有一列包含记录列表,这会阻止电源查询旋转 table。
这是查询编辑器中的两个屏幕截图,我只需要从列表中提取“landing_points.name”并将整个 table 转换为第二个格式截图。
我该怎么做?非常感谢任何帮助!
下面是我使用的代码,得到了这个错误信息
“转换文件”查询出错。 Expression.Error: 我们无法将List 类型的值转换为Record 类型。
细节:
值=[列表]
类型=[类型]
Row 93 error reference
let
Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"Name", type any}, {"Value", type any}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name]), "Name", "Value")
在
#“透视列”
Nested lists
Extracted if just pulling one file
试试这个
我们创建了一个索引。使用整数除以按文件名分组。枢。展开列表然后从记录中拉出名称字段
let Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"RecordToTable" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File from Query1", each Record.ToTable(Json.Document([Content]))),
#"Removed Other Columns" = Table.SelectColumns(RecordToTable,{"Name", "Transform File from Query1"}),
#"Expanded Transform File from Query1" = Table.ExpandTableColumn(#"Removed Other Columns", "Transform File from Query1", {"Name", "Value"}, {"Name1", "Value"}),
#"Added Index" = Table.AddIndexColumn(#"Expanded Transform File from Query1", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name1]), "Name1", "Value"),
#"Expanded landing_points" = Table.ExpandListColumn(#"Pivoted Column", "landing_points"),
#"ExtractName" = Table.TransformColumns(#"Expanded landing_points",{{"landing_points", each Record.Field(_,"name"), type text}})
in #"ExtractName"
如果还是不行,那么试试这个在枢轴之前进行扩展
let Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"RecordToTable" = Table.AddColumn(Source, "Transform File from Query1", each Record.ToTable(Json.Document([Content]))),
#"Removed Other Columns" = Table.SelectColumns(RecordToTable,{"Name", "Transform File from Query1"}),
#"Expanded Transform File from Query1" = Table.ExpandTableColumn(#"Removed Other Columns", "Transform File from Query1", {"Name", "Value"}, {"Name1", "Value"}),
#"Added Index" = Table.AddIndexColumn(#"Expanded Transform File from Query1", "Index", 0, 1),
// extract and combine landing points locations
#"Filtered Rows" = Table.SelectRows(#"Added Index", each [Name1] = "landing_points"),
#"Expanded Value" = Table.TransformColumns(Table.ExpandListColumn(#"Filtered Rows", "Value"),{{"Value", each Record.Field(_,"name"), type text}}),
Places = Table.Group(#"Expanded Value", {"Name","Index","Name1"}, {{"Value", each Text.Combine([Value],"|"), type text}}),
Recombined = Table.Sort(Table.Combine({Table.SelectRows(#"Added Index", each [Name1] <> "landing_points"), Places }),{{"Index", Order.Ascending}}),
#"Integer-Divided Column" = Table.TransformColumns(Recombined , {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name1]), "Name1", "Value"),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Pivoted Column", {{"landing_points", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "landing_points")
in #"Split Column by Delimiter"
我有几个JSON files that I need to combine in power query. Ever file has the same structure that needs to be pivoted. Here's link to the files
我很挣扎,因为每个文件都有一列包含记录列表,这会阻止电源查询旋转 table。
这是查询编辑器中的两个屏幕截图,我只需要从列表中提取“landing_points.name”并将整个 table 转换为第二个格式截图。
我该怎么做?非常感谢任何帮助!
下面是我使用的代码,得到了这个错误信息
“转换文件”查询出错。 Expression.Error: 我们无法将List 类型的值转换为Record 类型。 细节: 值=[列表] 类型=[类型]
Row 93 error reference
let
Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File", each #"Transform File"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File", Table.ColumnNames(#"Transform File"(#"Sample File"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"Name", type any}, {"Value", type any}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name]), "Name", "Value")
在 #“透视列”
Nested lists
Extracted if just pulling one file
试试这个
我们创建了一个索引。使用整数除以按文件名分组。枢。展开列表然后从记录中拉出名称字段
let Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"RecordToTable" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File from Query1", each Record.ToTable(Json.Document([Content]))),
#"Removed Other Columns" = Table.SelectColumns(RecordToTable,{"Name", "Transform File from Query1"}),
#"Expanded Transform File from Query1" = Table.ExpandTableColumn(#"Removed Other Columns", "Transform File from Query1", {"Name", "Value"}, {"Name1", "Value"}),
#"Added Index" = Table.AddIndexColumn(#"Expanded Transform File from Query1", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name1]), "Name1", "Value"),
#"Expanded landing_points" = Table.ExpandListColumn(#"Pivoted Column", "landing_points"),
#"ExtractName" = Table.TransformColumns(#"Expanded landing_points",{{"landing_points", each Record.Field(_,"name"), type text}})
in #"ExtractName"
如果还是不行,那么试试这个在枢轴之前进行扩展
let Source = Folder.Files("C:\Users\ldu\Desktop\Subsea"),
#"RecordToTable" = Table.AddColumn(Source, "Transform File from Query1", each Record.ToTable(Json.Document([Content]))),
#"Removed Other Columns" = Table.SelectColumns(RecordToTable,{"Name", "Transform File from Query1"}),
#"Expanded Transform File from Query1" = Table.ExpandTableColumn(#"Removed Other Columns", "Transform File from Query1", {"Name", "Value"}, {"Name1", "Value"}),
#"Added Index" = Table.AddIndexColumn(#"Expanded Transform File from Query1", "Index", 0, 1),
// extract and combine landing points locations
#"Filtered Rows" = Table.SelectRows(#"Added Index", each [Name1] = "landing_points"),
#"Expanded Value" = Table.TransformColumns(Table.ExpandListColumn(#"Filtered Rows", "Value"),{{"Value", each Record.Field(_,"name"), type text}}),
Places = Table.Group(#"Expanded Value", {"Name","Index","Name1"}, {{"Value", each Text.Combine([Value],"|"), type text}}),
Recombined = Table.Sort(Table.Combine({Table.SelectRows(#"Added Index", each [Name1] <> "landing_points"), Places }),{{"Index", Order.Ascending}}),
#"Integer-Divided Column" = Table.TransformColumns(Recombined , {{"Index", each Number.IntegerDivide(_, 9), Int64.Type}}),
#"Pivoted Column" = Table.Pivot(#"Integer-Divided Column", List.Distinct(#"Integer-Divided Column"[Name1]), "Name1", "Value"),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Pivoted Column", {{"landing_points", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "landing_points")
in #"Split Column by Delimiter"