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

如何将Google Spreadsheet数据透视以展示耗时时长?

解决Google表格中事件间耗时的透视计算问题

先把你提供的示例数据整理成清晰的表格,方便后续操作:

usermessage_ideventtimestamp
john playerekjf939e9313140_34kdelivered04/13/2018 12:56:30
john playerekjf939e9313140_34kopened04/15/2018 16:05:00
john playerekjf939e9313140_34kopened04/16/2018 22:15:20
john playerekjf939e9313140_34kopened04/16/2018 23:47:33
cristian diordsfsk0340344030fkjkjdelivered04/12/2018 18:45:21

接下来我给你两种实用方法,计算同一消息ID下不同事件的耗时(小时),并通过透视表展示结果:

方法一:辅助列 + 数据透视表(适合新手,可视化操作)

步骤1:添加辅助列计算基准时间

首先我们需要为每条数据找到对应消息ID的最早送达时间(作为计算耗时的基准):

  • 在E列(表头命名为First Delivered Time)的E2单元格输入公式:
    =MINIFS(D:D, B:B, B2, C:C, "delivered")
    
    下拉填充整个E列,这样每行都会自动匹配当前消息ID的最早delivered时间。

步骤2:计算耗时(小时)

添加F列(表头命名为Hours Elapsed),在F2单元格输入:

=IF(E2="", "", (D2 - E2)*24)

这个公式会把时间差转换成小时数(日期差×24就是小时数),空值会自动跳过。

步骤3:创建透视表展示结果

  1. 选中包含所有列(A-F)的数据区域
  2. 点击顶部菜单栏「数据」→「数据透视表」,选择透视表放置的位置(新工作表或当前工作表)
  3. 在右侧透视表编辑器中配置:
    • :添加usermessage_id(按用户和消息分组)
    • :添加event(按事件类型分类)
    • :添加Hours Elapsed,然后选择统计方式:
      • 选「最小值」:展示该事件相对于首次送达的最早耗时(比如首次打开的时间)
      • 选「平均值」:展示该事件所有记录的平均耗时
      • 选「最大值」:展示最晚发生的事件耗时

方法二:用QUERY+LET函数直接计算(适合进阶用户,无需手动操作)

如果不想用辅助列,可以直接用数组公式一次性生成每个消息ID的关键耗时数据,比如计算首次送达→首次打开的耗时:

=ARRAYFORMULA(
  LET(
    // 获取每个消息ID的最早送达时间
    delivered_data, QUERY(A:D, "SELECT B, MIN(D) WHERE C='delivered' GROUP BY B", 1),
    // 获取每个消息ID的最早打开时间
    opened_data, QUERY(A:D, "SELECT B, MIN(D) WHERE C='opened' GROUP BY B", 1),
    // 关联两组数据
    merged_data, VLOOKUP(delivered_data!A2:A, opened_data, {1,2}, FALSE),
    // 计算耗时(小时)
    time_diff, (merged_data!B:B - delivered_data!B:B)*24,
    // 拼接最终结果表格
    HSTACK(delivered_data!A2:A, delivered_data!B2:B, merged_data!B2:B, time_diff)
  )
)

执行后会返回四列数据:message_id首次送达时间首次打开时间耗时(小时),你可以直接把这个结果作为数据源再做透视,或者直接使用。

关键注意事项

  • 确保timestamp列是日期时间格式:选中D列→点击「格式」→「数字」→「日期时间」,否则时间差计算会出错。
  • 如果同一个消息ID有多次delivered事件,上述方法默认取最早的送达时间;如果需要对应每次送达的后续事件,需要额外按delivered的时间点分组。

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

火山引擎 最新活动