【问题标题】:PowerQuery: taking the average of each of many columnsPowerQuery:取多列中每一列的平均值
【发布时间】:2018-11-09 00:32:00
【问题描述】:

我是 PowerQuery 的新手,我有一个表格,它本质上是那些日子内的日期和小时数矩阵:第一列包含每个日期,其余列标记为 1 到 24。例如:

Date   H1   H2   H3   H4 ...
----   --   --   --   --
Jan 1
Jan 2
Jan 3
...

这存储在一个非常大的 Excel 文件中,因此我希望能够简单地查询该文件并提取数据的子集。一个例子是每年的平均小时数。在 SQL 中,这将由“SELECT YEAR(Date), AVG(H1), AVG(H2), ... FROM Source Table GROUPBY YEAR(Date)”表示。但是,在 PowerQuery 中,您似乎只能使用 GROUPBY 生成具有分组结果的新列,因此在这种情况下必须重复 x24 操作,或者如果我有几秒钟的数据(公平地说,在SQL 查询,如果您不考虑脚本解决方案,您还必须输入每一列)。是否有更简单的方法来生成我想要的表(基本上将每一列折叠为其平均值),还是我需要手动添加每一列?

【问题讨论】:

    标签: powerquery


    【解决方案1】:

    您可以取消透视小时列,然后只需按年份和未透视的属性列分组。

    我像这样为您的数据制作了一个示例表,并将其加载到电源查询中。我将日期列转换为仅年份,在日期列上取消透视其他列,然后在取消透视后按日期和小时列分组。结果看起来像这样。

    如果您想要在电源查询内部或外部,您当然可以在之后重新透视数据。这是电源查询中的代码的样子,但这都是使用普通菜单选项创建的,而不是手工编写的。

    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Extracted Year" = Table.TransformColumns(Source,{{"Date", Date.Year, Int64.Type}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Extracted Year", {"Date"}, "Hour", "Value"),
        #"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"Date", "Hour"}, {{"Average", each List.Average([Value]), type number}})
    in
        #"Grouped Rows"
    

    【讨论】:

    • 这非常有效,我刚刚对旋转/取消旋转有了新的认识:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-01-31
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2021-08-07
    • 2016-09-02
    相关资源
    最近更新 更多