PowerQuery:取许多列中每列的平均值

时间:2018-11-08 11:04:27

标签: powerquery

我是PowerQuery的新手,我有一个表,该表本质上是那几天内的日期和小时的矩阵:第一列保存每个日期,其余各列则标记为1到24。示例如下:< / p>

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

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

1 个答案:

答案 0 :(得分:0)

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

enter image description here

我对您的数据制作了一个样本表,并将其加载到功率查询中。我将“日期”列转换为“仅年”,将“日期”列的“未透视的其他列”转换为“年”,然后在取消透视后按“日期和小时”列进行了分组。结果看起来像这样。

enter image description here

如果您想在电源查询之内或之外进行查询,则当然可以取消数据。这就是电源查询中的代码,但是它们都是用普通菜单选项创建的,而不是手工编写的。

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"