【问题标题】:How to group data of similar survey answers with Power Query如何使用 Power Query 对类似调查答案的数据进行分组
【发布时间】:2021-06-28 12:59:26
【问题描述】:

如果我做错了什么,首先我很抱歉!这是我在这里的第一篇文章,但我会尽力而为。

我的问题:我有一个来自调查工具的 .CSV 文件,我尝试使用 Excel 中的 Power Query Tool 将其转换为更简洁的形式。

经过一些基本的编辑后,我得到了这样的表格:

起始形式:

左栏反映了调查中提出的问题的标题。由于某些问题可能有多个答案,因此标题可能会出现不止一次。我现在的目标是:为每个问题生成一个列,并在下面排列给定的答案。但到目前为止,我得到了例如对于“Instrument(s)”也是 3 列,因为那里给出了 3 个答案,我想在一个单元格中为每个参与者总结这些答案。另外,在问题“评论”之后,下一个参与者的评价就开始了,所以这里也应该开始新的一行。目标格式应如下所示:

最终格式

您对如何实现这一目标有任何建议或解决方案吗? 提前感谢您的帮助,感谢您的帮助!

【问题讨论】:

  • 这不是一个免费的编码网站(尽管有些人可能会这样做)。但是我们可以帮助您开发您正在尝试开发的代码。过去,此类问题已在此站点上解决。所以请做一些研究并编辑你的问题来展示你尝试过的代码;以及您在哪里遇到问题的说明。一般来说,您可以使用Index 列;然后使用Integer/Divide 列创建一个列,您可以通过该列对不同的响应者进行分组。然后只需在Table.Group 操作中拆分出所需的列即可。

标签: excel csv powerquery csv-import


【解决方案1】:

总的来说,同意 Ron 的 cmets

也就是说,当我开始时,一些代码示例受到了赞赏,所以你去吧

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
// 20 based on number of repeating rows in each answer block
#"Divide" = Table.TransformColumns(#"Added Index",{{"Index", each Number.IntegerDivide(_, 20), type number}}),
// combine rows that have same title and more than one answer
#"Grouped Rows" = Table.Group(#"Divide", {"voteOptionText", "Index"}, {{"Data", each Text.Combine([voteAnswer]," "), type text}}),
// pivot to get into proper sideways format
#"Pivoted Column" = Table.Pivot(#"Grouped Rows", List.Distinct(#"Grouped Rows"[voteOptionText]), "voteOptionText", "Data")
in  #"Pivoted Column"

【讨论】:

    【解决方案2】:

    抱歉回复晚了,因为复活节我被阻止了。

    感谢您的帮助,到目前为止,它已经为我提供了足够的线索来说明如何进行。我将测试这些建议,现在我确切地知道我还能寻找什么。

    【讨论】:

      【解决方案3】:

      感谢您的帮助,我现在几乎设法获得了所需格式的 .csv 文件。但是,我现在面临的问题是我无法区分通过枢轴转换回答调查的不同人的答案,答案的数量总是不同的,所以除以某个数字并不能得到我到所需的格式。示例 answer1 可能如下所示:

      Answer1

      然后像这样回答2:

      Answer2

      这样组合起来:

      Combined

      如果我现在尝试使用数据透视列,我会丢失谁给出答案的信息,因为类似的问题会合并在一起:

      Pivot

      此时的代码:

      let
          Quelle = Folder.Files("Z:\Report Form"),
          #"Z:\Report Form\example csv" = Quelle{[#"Folder  Path"="Z:\Report Form\",Name="example.csv"]}[Content],
          #"Importierte CSV" = Csv.Document(#"Z:\Report Form\example csv",[Delimiter=",", Columns=6, Encoding=1252, QuoteStyle=QuoteStyle.None]),
          #"Höher gestufte Header" = Table.PromoteHeaders(#"Importierte CSV", [PromoteAllScalars=true]),
          #"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header",{{"id", Int64.Type}, {"userId", type text}, {"voteOptionId", Int64.Type}, {"voteOptionText", type text}, {"voteAnswer", type text}, {"voteOptionType", type text}}),
          #"Entfernte Spalten" = Table.RemoveColumns(#"Geänderter Typ",{"userId", "id", "voteOptionId", "voteOptionType"}),
          #"Gruppierte Zeilen" = Table.Group(#"Entfernte Spalten", {"voteOptionText"}, {{"Anzahl", each _, type table [voteOptionText=nullable text, voteAnswer=nullable text]}}),
          #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Gruppierte Zeilen", "Custom", each Table.AddIndexColumn([Anzahl], "index", 1)),
          #"Erweiterte Custom" = Table.ExpandTableColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Custom", {"voteAnswer", "index"}, {"voteAnswer", "index"}),
          #"Entfernte Spalten1" = Table.RemoveColumns(#"Erweiterte Custom",{"Anzahl"}),
          #"Pivotierte Spalte" = Table.Pivot(#"Entfernte Spalten1", List.Distinct(#"Entfernte Spalten1"[voteOptionText]), "voteOptionText", "voteAnswer")
      in
          #"Pivotierte Spalte"
      

      所以我试图做的是将相同问题的答案合并在一起,但我无法区分给出答案的 2 个不同的人。我还尝试实现一个计数器,每次出现 QuestionA 时都会增加,因为这个问题只有 1 个答案的可能性,但我在这里也失败了。你有什么进一步的建议吗?我希望我能够以可以理解的方式描述我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        • 1970-01-01
        • 2015-07-20
        • 2019-12-22
        • 2022-08-10
        相关资源
        最近更新 更多