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

如何用Power Query将多列问卷数据高效转换为Power BI模型?

用Power Query一步生成AnswerHistory表的方案

完全不需要重复拆分再合并,利用Power Query的逆透视+透视组合操作(可封装为单步M代码)就能实现,具体操作如下:

  • 导入CSV数据进入Power Query编辑器后,选中所有非问卷字段列(如ClientID、MemberID、DateCompleted、年龄等)
  • 点击「转换」选项卡 →「逆透视列」→「逆透视其他列」,此时会生成Attribute(存储Question1/Answer1/Score1这类列名)和Value(对应字段值)两列
  • 添加自定义列提取问题编号:QuestionID = Number.From(Text.Range([Attribute], Text.Length([Attribute])-1))(若列名格式不是末尾带数字,可改用Text.AfterDelimiter([Attribute], "Question")这类函数调整)
  • 添加自定义列区分字段类型:FieldType = Text.BeforeDelimiter([Attribute], Text.From([QuestionID]))(提取出Question、Answer、Score)
  • 选中MemberID、DateCompleted、QuestionID及所有标识列,点击「转换」→「透视列」,将FieldType作为透视依据,Value作为值列,聚合方式选择「不要聚合」
  • 删除中间生成的Attribute列,即可得到结构规范的AnswerHistory表:包含所有标识列、QuestionID、Answer、Score

如果要实现真正的单步操作,可将上述逻辑封装为M代码,直接粘贴到Power Query高级编辑器替换默认代码即可:

let
    源 = Csv.Document(File.Contents("你的CSV文件路径"), [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv]),
    提升标题 = Table.PromoteHeaders(源, [PromoteAllScalars=true]),
    逆透视其他列 = Table.UnpivotOtherColumns(提升标题, {"ClientID", "MemberID", "DateCompleted", "Age"}, "Attribute", "Value"),
    添加QuestionID = Table.AddColumn(逆透视其他列, "QuestionID", each Number.From(Text.Range([Attribute], Text.Length([Attribute])-1))),
    添加FieldType = Table.AddColumn(添加QuestionID, "FieldType", each Text.BeforeDelimiter([Attribute], Text.From([QuestionID]))),
    透视列 = Table.Pivot(添加FieldType, List.Distinct(添加FieldType[FieldType]), "FieldType", "Value"),
    删除列 = Table.RemoveColumns(透视列,{"Attribute"})
in
    删除列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:02:38