使用 Power Query 对数据进行分组和转置
Posted
技术标签:
【中文标题】使用 Power Query 对数据进行分组和转置【英文标题】:Using Power Query to Group & Transpose Data 【发布时间】:2020-05-20 20:18:53 【问题描述】:需要帮助转换如下所示的数据库:
进入这个:
(右侧的后续列不在视图中)
*注意:所提供的数据仅用于说明目的
我开始使用 Excel 的 Power Query 按 ID 分组,我得到一个包含每个 ID 的“表格”的列,但是当我展开列时,我返回到 0 方格。我试图看看如何转置数据,以便我可以获得与其他列(日期 2、值 2、程序 2、日期 3、值 3、程序 3 等)相同格式的新列,其中包含每个参与者每行的值。本质上,我希望每个 ID 有一行,所有参与者的数据都在后续列中。我查看了不同的网络帖子和教程,但无法弄清楚如何做到这一点。非常感谢任何想法或建议!
【问题讨论】:
请问为什么?当前格式比您建议的更容易使用。 我同意,但我的 PI/导师认为,出于数据分析的目的,我们应该将数据组织成每个 ID 一行。此外,我们将按季度提取这些医疗数据,因此她认为在我们收到新数据时添加额外的列会更容易,尽管我不同意。如果您有任何其他想法或建议,请告诉我。我们能否以当前格式进行数据分析?谢谢! IMO,您目前使用的长格式更有利于数据分析。宽数据有其用途,但我建议在确定之前阅读有关 Tidy Data 的内容。 非常感谢,亚历克西斯!我会看一下那篇文章并与我的导师讨论。 【参考方案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,你能把你的代码贴在这里吗? 嗨,克里斯。我能够弄清楚代码。好像我打错了。再次感谢您的所有帮助! 嗨帕特里夏。伟大的!也许您可以投票答案并将问题设置为已回答。最好的问候克里斯。 再次感谢克里斯。我还有一个问题,如果你能简单地看一下:***.com/questions/62006615/…以上是关于使用 Power Query 对数据进行分组和转置的主要内容,如果未能解决你的问题,请参考以下文章
如何同时使用 QUERY 和 IMPORTRANGE 函数来提取和转置谷歌表格中的数据?