【发布时间】:2018-03-31 20:13:14
【问题描述】:
作为我为团队创建的工具的一部分,我通过 PowerQuery 连接到内部 Web 服务。
Web 服务返回嵌套的 JSON,我无法将 JSON 数据解析为我要查找的格式。具体来说,我在将列中的记录内容提取到逗号分隔列表时遇到问题。
数据
如您所见,数据包含与特定“种族”(race_id)相关的详细信息。我要关注的是driver_codes 中的信息,这是一个记录列表。记录的数量从 0 到 4 不等,每条记录的结构为id: 50000(50000 可以是任何 5 位数字)。所以它可能是:
id: 10000
id: 20000
id: 30000
根据要求,原始 JSON 的示例 sn-p:
<race>
<race_id>ABC123445</race_id>
<begin_time>2018-03-23T00:00:00Z</begin_time>
<vehicle_id>gokart_11</vehicle_id>
<driver_code>
<id>90200</id>
</driver_code>
<driver_code>
<id>90500</id>
</driver_code>
</race>
我希望它的结构如下:
10000,20000,30000
问题
当我在包含列表的列上选择“提取值”时,我收到以下消息:
Expression.Error:我们无法将 Record 类型的值转换为类型 文字。
如果我改为选择“扩展到新行”,则会为每个唯一的驱动程序代码创建重复的行。我现在每个唯一的race_id 有几行,但我想要的是每个唯一的race_id 一行和一个串联的驱动程序代码列表。
我的尝试
我已尝试按 race_id 对数据进行分组,但分组数据时允许的操作不包括连接行。
我也尝试过取消透视该列,但这给我留下了同样的问题:我仍然得到多行。
我已经在谷歌上广泛搜索(和 Stack Overflowed)这个问题,但没有运气。但是,可能是我使用了错误的关键字,所以如果存在重复,我深表歉意。
更新:根据目前的答案,我已经尝试过什么
我尝试了 Alexis Olson 的优秀且非常详细的方法,但我最终得到以下错误:
Expression.Error:我们无法将值“id”转换为数字类型。详情:
值=id 类型=类型
错误来自使用这些 M 代码行中的任何一行(一个带有 List.Transform 和一个没有):
= Table.Group(#"Renamed Columns", {"race_id", "begin_time", "vehicle_id"},
{{"DriverCodes", each Text.Combine([driver_code][id], ","), type text}})
= Table.Group(#"Renamed Columns", {"race_id", "begin_time", "vehicle_id"},
{{"DriverCodes", each Text.Combine(List.Transform([driver_code][id], each Number.ToText(_)), ","), type text}})
注意:如果我不写[driver_code][id],而只写[id],那么我会收到另一个错误,说[id] 列不存在。
【问题讨论】:
-
我很难重现您的错误。您能否提供一个您尝试使用的示例 JSON 字符串?
-
已添加。请看我的编辑。这会让你更清楚吗?
-
当然。那是 XML,不是 JSON。
标签: json list record powerquery