Power BI中如何将含JSON Payload的单条记录按键值对拆分为多条
问题结论
该需求完全可以在Power BI中实现,通过Power Query编辑器的结构化数据处理能力即可完成,适配ExtraDetails下任意数量、任意名称的<string, string>键值对,无需提前预设键名。
具体操作步骤
- 步骤1:将原始数据导入Power BI后,右键点击数据表选择「编辑查询」进入Power Query编辑器,确认ID列为文本类型,Payload列为原始JSON文本格式。
- 步骤2:选中Payload列,点击顶部菜单栏「转换」->「解析」->「JSON」,将文本格式的JSON转换为Power Query可识别的记录(Record)类型。
- 步骤3:点击Payload列右上角的展开箭头,仅勾选
ExtraDetails选项,确认后即可提取出JSON中的ExtraDetails节点内容。 - 步骤4:选中提取后的ExtraDetails列,右键点击选择「到表」,弹出的配置窗口直接点击确认,即可将键值对记录转换为包含Name(键名)、Value(键值)两列的嵌套表。
- 步骤5:点击嵌套表列右上角的展开箭头,勾选Name、Value两个字段,取消「使用原始列名作为前缀」的勾选,确认后单行数据会自动按键值对数量拆分为多行。
- 步骤6:点击「添加列」->「自定义列」,输入公式
= """" & [Name] & """:""" & [Value] & """",生成你需要的"键":"值"格式的Payload内容。 - 步骤7:删除多余的Name、Value、原始JSON列,仅保留ID和新生成的Payload列即可。
直接可用的M代码示例
你也可以直接在Power Query的高级编辑器中替换以下代码,修改数据源部分即可直接使用:
let // 请将下方源步骤替换为你自己的数据源导入逻辑 源 = Table.FromRecords({ [ID = "746E2C41-79EE-46E7-8FC4-00958EEA13E2", Payload = "{""ExtraDetails"":{""response"":""bad one"",""err_msg"":""No connection""}}"] }), // 解析JSON格式的Payload 解析JSON = Table.TransformColumns(源, {"Payload", Json.Document}), // 提取ExtraDetails节点 提取ExtraDetails = Table.ExpandRecordColumn(解析JSON, "Payload", {"ExtraDetails"}, {"ExtraDetails"}), // 将键值对记录转为嵌套表 记录转表 = Table.TransformColumns(提取ExtraDetails, {"ExtraDetails", each Record.ToTable(_)}), // 展开所有键值对为多行 展开键值对 = Table.ExpandTableColumn(记录转表, "ExtraDetails", {"Name", "Value"}, {"键名", "键值"}), // 拼接为要求的Payload格式 生成目标Payload = Table.AddColumn(展开键值对, "Payload", each """" & [键名] & """:""" & [键值] & """"), // 保留需要的列 输出结果 = Table.SelectColumns(生成目标Payload, {"ID", "Payload"}) in 输出结果
内容的提问来源于stack exchange,提问作者dstewart101
相关产品推荐
相关产品推荐

