You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerQuery将带层级的Qualtrics JSON转为Excel扁平表

处理Qualtrics TextIQ主题层级JSON生成Excel扁平表(PowerQuery方案)

一、分离insert_topic与move_topic数据

  • 进入已展开的operations查询,添加自定义列,公式:if [type] = "insert_topic" then "插入主题" else if [type] = "move_topic" then "移动主题" else "其他",快速区分两类操作
  • 也可直接用筛选行功能,分别筛选[type]等于insert_topic和move_topic的行,拆分出两个独立查询(优先处理insert_topic,这是主题创建的原始记录;move_topic用于调整层级关联)

二、构建三级主题层级关联

1. 提取主题基础信息

从insert_topic查询中展开payload字段,提取topicId、name(主题名称)、parentId(父主题ID),生成基础主题表:

  • 添加自定义列层级,规则:若parentId为空(对应rootNodes里的根主题)则标记为1级(H1);后续通过关联判断2级(H2)、3级(H3)

2. 应用move_topic的层级调整

move_topic的payload包含topicId和newParentId,需将这些层级更新同步到基础主题表:

  • 将move_topic查询与基础主题表按topicId合并,用newParentId替换原parentId(若存在多条同主题的move记录,先按时间戳排序,保留最新的一条更新)

3. 递归关联生成三级列

通过PowerQuery的合并查询功能,逐级关联父主题:

  • 生成H2列:将基础主题表(子表)与自身(父表)按parentId = topicId合并,提取父表的name作为H2列(针对层级为2的主题)
  • 生成H3列:将已含H2的表再次与基础主题表合并,用子表的parentId匹配H2主题的topicId,提取父表的name作为H3列(针对层级为3的主题)
  • 最终整理成包含H1、H2、H3的扁平表,确保每一行对应最末级主题,上级主题自动填充

三、适配树状图(Treemap)的表结构调整

  • 确保H1、H2、H3列层级连续,空值用上级主题名称填充(比如H3为空时,复用H2的值)
  • 添加数值维度列:若树状图需要展示主题权重,可统计每个主题的出现次数生成计数列

PowerQuery核心代码片段

let
    源 = 你的前置查询步骤,
    // 筛选并处理insert_topic记录
    筛选insert_topic = Table.SelectRows(源, each [type] = "insert_topic"),
    展开payload = Table.ExpandRecordColumn(筛选insert_topic, "payload", {"topicId", "name", "parentId"}, {"topicId", "主题名称", "parentId"}),
    添加层级标记 = Table.AddColumn(展开payload, "层级", each if [parentId] = null then 1 else 2),
    // 处理move_topic的层级更新
    筛选move_topic = Table.SelectRows(源, each [type] = "move_topic"),
    展开move_payload = Table.ExpandRecordColumn(筛选move_topic, "payload", {"topicId", "newParentId"}, {"topicId", "newParentId"}),
    // 合并并更新父ID
    合并更新表 = Table.NestedJoin(添加层级标记, {"topicId"}, 展开move_payload, {"topicId"}, "move记录", JoinKind.LeftOuter),
    展开move记录 = Table.ExpandTableColumn(合并更新表, "move记录", {"newParentId"}, {"newParentId"}),
    最终父ID = Table.AddColumn(展开move记录, "最终parentId", each if [newParentId] <> null then [newParentId] else [parentId]),
    // 关联生成H1列
    关联H1主题 = Table.NestedJoin(最终父ID, {"最终parentId"}, 最终父ID, {"topicId"}, "H1信息", JoinKind.LeftOuter),
    展开H1 = Table.ExpandTableColumn(关联H1主题, "H1信息", {"主题名称"}, {"H1"}),
    // 关联生成H2列并整理H3
    关联H2主题 = Table.NestedJoin(展开H1, {"最终parentId"}, 展开H1, {"topicId"}, "H2信息", JoinKind.LeftOuter),
    展开H2 = Table.ExpandTableColumn(关联H2主题, "H2信息", {"主题名称"}, {"H2"}),
    整理层级列 = Table.SelectColumns(展开H2, {"H1", "H2", "主题名称", "层级"}),
    重命名H3 = Table.RenameColumns(整理层级列, {{"主题名称", "H3"}}),
    填充空层级 = Table.FillDown(重命名H3, {"H1", "H2"})
in
    填充空层级

内容的提问来源于stack exchange,提问作者Rodp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:35:28