如何用Excel数据透视表计算用户消息的送达与打开时间间隔小时数?
用Excel数据透视表计算邮件送达与打开的时间间隔小时数
先把你的原始数据整理成更清晰的表格形式:
| user | sg_message_id | event | datetime |
|---|---|---|---|
| john player | ekjf939e9313140_34k | delivered | 04/13/2018 12:56:30 |
| john player | ekjf939e9313140_34k | opened | 04/15/2018 16:05:00 |
| cristian dior | dsfsk0340344030fkjkj | delivered | 04/12/2018 18:45:21 |
| cristian dior | dsfsk0340344030fkjkj | opened | 04/13/2018 15:40:17 |
你的数据是每行对应一个事件(送达/打开),但透视表需要同一行里同时有两个时间才能计算间隔,所以得先把数据规整成「每个唯一sg_message_id一行,同时包含送达、打开时间」的结构,再做透视。下面是具体操作步骤:
步骤1:把送达和打开时间整合到同一行
这里给你两种方法,选你顺手的来:
方法A:用XLOOKUP公式快速匹配
假设原始数据在A1:D5区域(A1是表头),新增两列:
- E列表头设为
Delivered Time,在E2输入公式:=IF(C2="delivered", D2, XLOOKUP(B2, B:B, IF(C:C="delivered", D:D, ""), "")) - F列表头设为
Opened Time,在F2输入公式:=IF(C2="opened", D2, XLOOKUP(B2, B:B, IF(C:C="opened", D:D, ""), ""))
下拉填充公式后,每个sg_message_id对应的两个时间就会出现在同一行里了。如果某条记录只有单一事件,对应单元格会显示空值,后续可以用IFERROR做容错处理。
方法B:用Power Query批量转置(适合大数据量)
- 选中原始数据区域,点击「数据」选项卡 → 「从表格/范围」,确认勾选「我的表格有标题」,进入Power Query编辑器。
- 选中
user和sg_message_id列,点击「转换」选项卡 → 「透视列」。 - 在弹出的设置框里:
- 值列选择
datetime - 高级选项选「不要聚合」
- 值列选择
- 点击确定后,直接就能得到每个sg_message_id一行、包含送达/打开时间的表格,最后点击「关闭并上载」把数据导回Excel。
步骤2:计算时间间隔小时数
新增G列,表头设为间隔小时数,在G2输入公式:
=IF(AND(E2<>"", F2<>""), (F2-E2)*24, "")
解释一下:F2-E2得到的是天数差,乘以24就能转换成小时数;AND函数用来确保两个时间都存在才计算,避免出现错误值。
步骤3:用数据透视表汇总结果
- 选中整理好的包含
间隔小时数的数据集(A1:G5),点击「插入」选项卡 → 「数据透视表」,选择透视表的放置位置。 - 在透视表字段面板里:
- 把
user和sg_message_id拖到「行」区域 - 把
间隔小时数拖到「值」区域,默认是求和(因为每个sg_message_id只有一个间隔值,求和/平均值/最大值结果都一样),你可以右键值区域的字段,选择「值字段设置」改成更直观的名称,比如「送达至打开间隔小时数」。
- 把
这样就能得到每个用户、每个唯一sg_message_id对应的时间间隔汇总结果啦!如果有缺失事件的记录,透视表里会显示空白,你可以根据需求调整容错逻辑。
内容的提问来源于stack exchange,提问作者sifar




