在Power BI中读取深层JSON层级:GeoJSON数据转换问题
解决Power Query提取GeoJSON所有Feature属性的问题
我明白你现在的困扰啦——原来的代码只处理了GeoJSON里的第一条Feature,没法批量提取所有记录的properties。问题其实出在你硬指定了取第一条记录(#"Converted to Table"{0}[Column1]),咱们只需要调整逻辑,让Power Query遍历所有Feature并提取它们的properties就行。
修改后的完整M代码
let Source = Json.Document(File.Contents(".\projekter.api.geojson")), features = Source[features], #"Converted to Table" = Table.FromList(features, Splitter.SplitByNothing(), null, null, ExtraValues.Error), // 遍历每一行的Feature,提取对应的properties记录 #"Extracted Properties" = Table.TransformColumns(#"Converted to Table", { {"Column1", each _[properties], type record} }), // 展开所有properties字段为数据表列 #"Expanded Properties" = Table.ExpandRecordColumn(#"Extracted Properties", "Column1", {"ProjectNr", "ProjectName", "ProjektNavn", "ProjektBeskrivelse", "AnlaegsBeloeb", "BudgetUdgift", "BudgetIndtaegt", "BudgetAar", "ProjektlederNavn", "ForventetAnlaegStart", "ForventetAnlaegSlut", "ForventetProjekteringStart", "ForventetProjekteringSlut", "ProjektfaseBetegnelse", "ProjektkategoriBetegnelse", "ProjekttypeBetegnelse", "StrategiBetegnelse", "HjemmesideLink"}, {"ProjectNr", "ProjectName", "ProjektNavn", "ProjektBeskrivelse", "AnlaegsBeloeb", "BudgetUdgift", "BudgetIndtaegt", "BudgetAar", "ProjektlederNavn", "ForventetAnlaegStart", "ForventetAnlaegSlut", "ForventetProjekteringStart", "ForventetProjekteringSlut", "ProjektfaseBetegnelse", "ProjektkategoriBetegnelse", "ProjekttypeBetegnelse", "StrategiBetegnelse", "HjemmesideLink"}), // 保留你原来的列类型转换逻辑 #"Changed Type" = Table.TransformColumnTypes(#"Expanded Properties",{{"ProjektNr", type text}, {"ProjektNavn", type text}, {"ProjektBeskrivelse", type text}, {"AnlaegsBeloeb", Int64.Type}, {"BudgetUdgift", Int64.Type}, {"BudgetIndtaegt", Int64.Type}, {"BudgetAar", Int64.Type}, {"ProjektlederNavn", type text}, {"ForventetAnlaegStart", type datetime}, {"ForventetAnlaegSlut", type datetime}, {"ForventetProjekteringStart", type datetime}, {"ForventetProjekteringSlut", type datetime}, {"ProjektfaseBetegnelse", type text}, {"ProjektkategoriBetegnelse", type text}, {"ProjekttypeBetegnelse", type text}, {"StrategiBetegnelse", type text}, {"HjemmesideLink", type text}}) in #"Changed Type"
关键调整说明
- 去掉了原来硬取第一条记录的步骤,改用
Table.TransformColumns遍历每一行的Feature,自动提取每个Feature的properties记录。 - 用
Table.ExpandRecordColumn把所有properties里的字段展开成数据表的列(如果你的GeoJSON有新增属性,记得在这个步骤里补充对应的字段名)。 - 最后保留了你原来的类型转换逻辑,保证数据格式符合需求。
这样处理后,所有Feature的properties都会被提取成数据表的一行,完美解决你只能生成单行的问题~
内容的提问来源于stack exchange,提问作者Pengman
相关产品推荐
相关产品推荐

