在Power BI中解析自定义结构的JSON数据
在Power BI中解析自定义结构JSON的方法
我需要解析以下结构的JSON数据:
{"name":{"0":"Jerry","1":"Ron","2":"Sally","3":"Sue"},"grade":{"0":78,"1":99,"2":88,"3":97}}
尝试过通过「转换→转成表格→解析JSON」的流程处理,得到的结果不符合需求:
- 第一步得到Table1:
| Column1 |
|---|
| Record |
- 展开后得到Table2:
| Name | Score |
|---|---|
| Record | Record |
- 再次展开后得到Table3(横向展开,不符合需求):
| Name.0 | Name.1 | Name.2 | Name.3 | Grade.0 | Grade.1 | Grade.2 | Grade.3 |
|---|---|---|---|---|---|---|---|
| Jerry | Ron | Sally | Sue | 78 | 99 | 88 | 87 |
我需要得到Table4的格式(纵向行列结构):
| Name | Score |
|---|---|
| Jerry | 78 |
| Ron | 99 |
| Sally | 88 |
| Sue | 87 |
解决方法(Power Query编辑器)
方法1:可视化步骤操作
- 完成「解析JSON」步骤后,得到包含
name和grade两个Record列的表(即Table2状态)。 - 选中
name列,点击「转换→逆透视列→逆透视值」,得到带索引、姓名和grade Record的表:
| Attribute | Value | grade |
|---|---|---|
| 0 | Jerry | Record |
| 1 | Ron | Record |
| 2 | Sally | Record |
| 3 | Sue | Record |
- 添加自定义列,公式输入:
Record.Field([grade], [Attribute]),提取对应索引的分数值。 - 重命名列:将
Value改为Name,自定义列改为Score,最后删除Attribute和grade列,即可得到目标格式。
方法2:直接使用M脚本批量处理
打开Power Query编辑器的「高级编辑器」,替换现有脚本为以下内容(若JSON是从外部加载,只需替换Source行的内容):
let Source = Json.Document("{""name"":{""0"":""Jerry"",""1"":""Ron"",""2"":""Sally"",""3"":""Sue""},""grade"":{""0"":78,""1"":99,""2"":88,""3"":97}}"), NameTable = Record.ToTable(Source[name]), GradeTable = Record.ToTable(Source[grade]), JoinedTable = Table.Join(NameTable, "Name", GradeTable, "Name"), RenamedColumns = Table.RenameColumns(JoinedTable,{{"Value", "Name"}, {"Value.1", "Score"}}) in RenamedColumns
脚本逻辑:将name和grade的Record结构转成表格,通过共同索引关联,最后重命名列得到目标结构。
内容的提问来源于stack exchange,提问作者deeth128
相关产品推荐
相关产品推荐

