【问题标题】:Using Power Query to Group & Transpose Data使用 Power Query 对数据进行分组和转置
【发布时间】:2020-05-20 20:18:53
【问题描述】:

需要帮助转换如下所示的数据库:

进入这个:

(右侧的后续列不在视图中)

*注意:所提供的数据仅用于说明目的

我开始使用 Excel 的 Power Query 按 ID 分组,我得到一个包含每个 ID 的“表格”的列,但是当我展开列时,我返回到 0 方格。我试图看看如何转置数据,以便我可以获得与其他列(日期 2、值 2、程序 2、日期 3、值 3、程序 3 等)相同格式的新列,其中包含每个参与者每行的值。本质上,我希望每个 ID 有一行,所有参与者的数据都在后续列中。我查看了不同的网络帖子和教程,但无法弄清楚如何做到这一点。非常感谢任何想法或建议!

【问题讨论】:

  • 请问为什么?当前格式比您建议的更容易使用。
  • 我同意,但我的 PI/导师认为,出于数据分析的目的,我们应该将数据组织成每个 ID 一行。此外,我们将按季度提取这些医疗数据,因此她认为在我们收到新数据时添加额外的列会更容易,尽管我不同意。如果您有任何其他想法或建议,请告诉我。我们能否以当前格式进行数据分析?谢谢!
  • IMO,您目前使用的长格式更有利于数据分析。宽数据有其用途,但我建议在确定之前阅读有关 Tidy Data 的内容。
  • 非常感谢,亚历克西斯!我会看一下那篇文章并与我的导师讨论。

标签: grouping transpose powerquery m


【解决方案1】:

您需要一个额外的 Group-Counter/Index,然后是 unpivot 一个数据透视列的组合。 这是一个代码。我在 Excel 表中将源表命名为“tbl_Source”。

let
    Source = tbl_Source,
    Group_Rows = Table.Group(Source, {"ID"}, {{"KPI", each _, type table [ID=number, Attribut=text, Wert=anynonnull]}}),
    Add_Custom_Column_Index = Table.AddColumn(Group_Rows, "Index", each Table.AddIndexColumn([KPI], "Index", 1, 1)),
    Expand_Index = Table.ExpandTableColumn(Add_Custom_Column_Index, "Index", {"Date", "Lab_Type", "LabName", "Value", "Unit", "ReferenceValues", "Index" }, {"Date", "Lab_Type", "LabName", "Value", "Unit", "ReferenceValues", "Index"}),
    Delete_Column = Table.RemoveColumns(Expand_Index,{"KPI"}),
    Unpivot_Other_Columns = Table.UnpivotOtherColumns(Delete_Column, {"ID", "Index"}, "Attribut", "Wert"),
    Combine_Columns = Table.CombineColumns(Table.TransformColumnTypes(Unpivot_Other_Columns, {{"Index", type text}}, "de-DE"),{"Attribut", "Index"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"ColumnHeader"),
    Pivot_Columns = Table.Pivot(Combine_Columns, List.Distinct(Combine_Columns[ColumnHeader]), "ColumnHeader", "Wert"),
    /*Change Type of all Date Columns */
    ChangeType_Date = Table.TransformColumnTypes(Pivot_Columns, 
                             List.Transform(List.Select(Table.ColumnNames(Pivot_Columns), 
                                         each Text.StartsWith(_, "Date")
                              ),
                            each {_, type date}))
in
    ChangeType_Date

最好的问候克里斯

你的 PI/导师的下一个问题应该是“我如何取消透视这些数据 ;-)”

【讨论】:

  • 非常感谢克里斯!这很棒!但是,我遇到了 Add_Custom_Column_Index 行。我不断收到此错误(Expression.Error:我们无法将 Function 类型的值转换为 Number 类型。详细信息:Value=Function Type=Type),尽管要小心并更改代码以包含我的列名。知道为什么会发生此错误吗?我已经使用了我的数据并重新创建了您的电子表格以遵循这些步骤,但我得到了相同的信息。非常感谢您的帮助!
  • 你好 Patricia,你能把你的代码贴在这里吗?
  • 嗨,克里斯。我能够弄清楚代码。好像我打错了。再次感谢您的所有帮助!
  • 嗨帕特里夏。伟大的!也许您可以投票答案并将问题设置为已回答。最好的问候克里斯。
  • 再次感谢克里斯。我还有一个问题,如果你能简单地看一下:stackoverflow.com/questions/62006615/…
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2021-10-15
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
相关资源
最近更新 更多