【问题标题】:Google Sheets: averaging duration data per weekday谷歌表格:平均每个工作日的持续时间数据
【发布时间】:2018-04-23 09:34:06
【问题描述】:

我有日期/持续时间数据,例如:

16-Apr  (Mon)  30mins

16-Apr  (Mon)  90mins

17 Apr (Tue) 60 mins

19-Apr (thu) 15 mins 

19-Apr (thu) 20 mins 

19-Apr (thu) 20 mins

21-April (Sat ) 120 mins  

23-April (Mon) 60 mins 

24-Apr (Tue)15 mins

我想生成每个工作日的平均持续时间

带有日期的数据透视表可以为我提供每个日期的持续时间总和。

(派生的)星期几的数据透视表为我提供了星期几的平均条目数,例如在上面,星期一 = 3 个条目,我想要 2 个(日期)的平均值。

我想要的是Mondays = x minsTues= y minsWed =z mins

这可以通过数据透视表或数组公式一步完成吗?

【问题讨论】:

    标签: date google-sheets pivot-table


    【解决方案1】:

    假设您在 E 列中有日期,在 F 列中有持续时间

    此公式将按星期几为您提供摘要:

    =query({arrayformula(weekday(E2:E7)), arrayformula(n(F2:F7))},
           "select Col1, sum(Col2) group by Col1")
    

    要获得平均值,请使用 avg(Col2) 而不是 sum(Col2)。您仍然必须将第二个结果列格式化为 Duration,并找到一种将星期几从数字转换为文本的方法,但这可以作为练习留给读者 :-)

    【讨论】:

    • 我在这里试过这个解决方案(抱歉,英国格式日期)
    • 我第一次看到这个n 函数。是最近发布的吗?
    • 嗨@MaxMakhrov,我想我已经看到了它,尽管这是我第一次不得不使用它,QUERY() 不想在没有它的情况下对 Duration 值求和,即使在理论上持续时间值是下面的数字。
    • 仍然在为此苦苦挣扎 - 是查询查询的替代方法吗?
    • 嗨@user358360,你想要一个解决方案,我引用,“这可以通过数据透视表或数组公式一步完成吗?”你得到了 2 个答案,用一个公式表达了一个解决方案。你到底在努力解决什么问题?
    【解决方案2】:

    你可以这样做来添加标签

    =ArrayFormula(query({hlookup(weekday(A:A),{1,2,3,4,5,6,7;"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},2,false),B:B},"select Col1,avg(Col2) group by Col1 label Col1 'Day'"))
    

    C 列中的日期数字仅用于检查。

    如果缺少任何日期,您需要忽略它们,否则它们将被视为星期六...

    =ArrayFormula(query({A:A,hlookup(weekday(A:A),{1,2,3,4,5,6,7;"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},2,false),B:B},"select Col2,avg(Col3) where Col1 is not null group by Col2 label Col2 'Day'"))
    

    编辑

    好的,这是实际要求的答案,即每个工作日的持续时间总和除以该工作日的唯一日期数。

    =ArrayFormula(query({query({C2:C,weekday(C2:C),choose(weekday(C2:C),"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"),E2:E},"select Col3,sum(Col4) where Col1 is not null group by Col2,Col3"),
    query({unique(C2:C),weekday(unique(C2:C))},"select count(Col2) where Col1 is not null group by Col2")},"Select Col1,Col2/Col3 label Col1 'Day',Col2/Col3 'Average'"))
    

    注意事项

    (1) 基于唯一日期的组数与基于重复日期的组数完全相同。

    (2) 为了以正确的顺序(星期日、星期一、星期二...)获取日期名称,我将工作日编号(1-7)分组,然后是工作日名称(第一个内部查询中的 Col2、Col3)。除了仅使用 Col3 之外,这不会创建更多组,但具有将日期按工作日编号顺序而不是工作日名称(字母顺序)顺序的效果,同时仍允许您将 Col3(工作日名称)放入选择列表中。

    (3) 包含了@ttarchala 的建议,即使用 Choose 而不是 Hlookup。

    【讨论】:

    • 在这种基本情况下,我会使用 CHOOSE(),比 HLOOKUP() 更简单。
    • 是的,当时我认为 HLOOKUP 看起来有点啰嗦。
    • drive.google.com/open?id=1MKLoAuzjNo7P1c0a5jeRNIM5cThaxHZx" =ArrayFormula(query({A:A,hlookup(weekday(C:C),{1,2,3,4,5,6,7 ;"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},2,false),E:E},"select Col2,avg(Col3) where Col1 is not null group by Col2 label Col2 'Day'"))
      为英国时间格式道歉
    • Apl;ogies - 在编辑 /formatting 中苦苦挣扎。也许一个mod可以删除废话? drive.google.com/open?id=1MKLoAuzjNo7P1c0a5jeRNIM5cThaxHZx" > ` =ArrayFormula(query({A:A,hlookup(weekday(C:C),{1,2,3,4,5,6,7;"星期日", Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"},2,false),E:E},"select Col2,avg(Col3) where Col1 is not null group by Col2标签 Col2 'Day'")) `
      为英国时间格式道歉但是有 2 个星期二 -13 和 20 - 总时间 = 150 分钟,所以我想要的平均值是 72.5。而 21 号,唯一的星期三,应该是 150。
    • 啊,我明白了 - 我完全误解了这个问题 - 所以你想要一周中某一天的总时间除以一周中这一天的不同日期的数量。将不得不考虑那个。
    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    相关资源
    最近更新 更多