You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google Sheets:按工作日计算时长平均值的技术问询

嘿,我明白你的困扰——用工作日做透视表时,默认的计算逻辑没get到你要的“平均时长”,反而给了条目数的平均对吧?咱们先把数据拆成规范格式,再调整透视表的设置,就能完美解决了。

第一步:先把合并的原始数据拆成规范列

你的原始数据是日期、工作日、时长混在一个单元格里,这是透视表出错的根源之一。假设原始数据在A列(从A2开始),我们需要拆分出3个独立列:

  • 日期列(B列):提取完整的日期部分(比如16-Apr (Mon)),用公式:

    =TRIM(REGEXEXTRACT(A2,"^.+?\)"))
    

    这个公式会提取到括号及之前的内容,再用TRIM清理多余空格(比如Sat )里的空格)。

  • 工作日列(C列):单独提取周一/周二这类标识,用:

    =TRIM(REGEXEXTRACT(A2,"\((.+?)\)"))
    

    提取括号里的内容并清理空格,得到干净的Mon/Tue等。

  • 时长数值列(D列):提取纯数字的时长(去掉mins),转成数值方便计算:

    =REGEXEXTRACT(A2,"(\d+)\s*mins")*1
    

    这个公式会提取数字部分,乘以1把文本转成数值型。

填充完这三列后,你的数据就变成了结构化的日期、工作日、时长数值,接下来就可以正确做透视表了。

第二步:根据你的需求选择透视表设置

你提到现在得到的是“条目数的平均值”,大概率是值字段的计算方式选错了,或者没区分两种常见的“平均”需求:

需求1:每个工作日的单条记录平均时长(总时长÷记录条数)

比如你的周一有3条记录(30+90+60),想得到(30+90+60)/3=60:

  1. 选中B2:D(结构化后的所有数据),插入透视表。
  2. 在透视表编辑器里:
    • :选择「工作日」
    • :选择「时长」,然后点击值字段的下拉菜单,把计算方式从「求和」改成「平均值」。
  3. 这样得到的就是每个工作日下所有记录的时长平均值,完全符合单条记录的平均逻辑。

需求2:每个工作日的日均时长(总时长÷该工作日的日期天数)

比如你的周一有2个不同日期(4.16和4.23),总时长是120+60=180,想得到180/2=90:

  1. 先计算每个日期的总时长:用QUERY函数生成每日汇总表(放在E列开始):
    =QUERY(B:D,"select B, sum(D) group by B label sum(D) '每日总时长'")
    
    这个公式会输出每个日期对应的总时长,比如16-Apr (Mon)对应120,23-April (Mon)对应60。
  2. 给这个汇总表添加工作日列(比如F列),用之前的工作日公式提取:
    =TRIM(REGEXEXTRACT(E2,"\((.+?)\)"))
    
  3. 选中E:F的汇总数据,插入透视表:
    • :选择「工作日」
    • :选择「每日总时长」,把计算方式改成「平均值」。
  4. 这样得到的就是每个工作日下,所有日期的日均时长,符合“按日期维度的总时长再按工作日平均”的逻辑。
排查小技巧

如果还是得到条目数的平均,检查这两点:

  • 确认D列的时长是数值型(不是文本):选中D列,看顶部格式菜单是不是「数字」而非「文本」。
  • 透视表的值字段是不是选了「时长」,而不是「日期」或「工作日」的计数。

内容的提问来源于stack exchange,提问作者user358360

火山引擎 最新活动