之前參加一個測試的時候,遇到一個試題,說怎麼樣計算在過去24小時時間內的銷售數據。注意這裏是過去的24小時,不是過去的一天也不是昨天。這裏就是一個滑動時間窗,然後對滑動時間窗內部的數據進行一個聚合運算。
先看初始數據:
Date | Hour | Amt |
2016-02-18 | 11 | 50 |
2016-02-18 | 14 | 30 |
2016-02-18 | 19 | 20 |
2016-02-18 | 7 | 100 |
2016-02-18 | 10 | 40 |
2016-02-18 | 19 | 20 |
2016-02-18 | 21 | 60 |
這裏我們有當天的小時時間,但是沒有完整的datetime時間,所以需要 轉換一下:
1. 使用下面的命令新建一個列DateTime:
=TEXT(G25,"yyyy-mm-dd ")&TEXT(H25&":00:00","hh:mm:ss")
Date | Hour | DateTime | Amt |
2016-02-18 | 11 | 2016-02-18 11:00:00 | 50 |
2016-02-18 | 14 | 2016-02-18 14:00:00 | 30 |
2016-02-18 | 19 | 2016-02-18 19:00:00 | 20 |
2016-02-18 | 7 | 2016-02-18 07:00:00 | 100 |
2016-02-18 | 10 | 2016-02-18 10:00:00 | 40 |
2016-02-18 | 19 | 2016-02-18 19:00:00 | 20 |
2016-02-18 | 21 | 2016-02-18 21:00:00 | 60 |
2. 上一步之後,我們需要了解怎麼做時間窗,好,我們再新建一列,叫做過去一天之前的現在時間 YesTime:
=DateTime-1,同時保證DateTime是時間,可以Ctrl+c,然後alt+v+v,直接賦值,如果沒有最後am或者pm的後綴就使用 =DateTime-0
Date | Hour | DateTime | YesTime | Amt |
2016-02-18 | 11 | 2016-02-18 11:00:00 | 2016-02-17 11:00:00 | 50 |
2016-02-18 | 14 | 2016-02-18 14:00:00 | 2016-02-17 14:00:00 | 30 |
2016-02-18 | 19 | 2016-02-18 19:00:00 | 2016-02-17 19:00:00 | 20 |
2016-02-18 | 7 | 2016-02-18 07:00:00 | 2016-02-17 07:00:00 | 100 |
2016-02-18 | 10 | 2016-02-18 10:00:00 | 2016-02-17 10:00:00 | 40 |
2016-02-18 | 19 | 2016-02-18 19:00:00 | 2016-02-17 19:00:00 | 20 |
2016-02-18 | 21 | 2016-02-18 21:00:00 | 2016-02-17 21:00:00 | 60 |
3. 然後我們使用YesTime作爲時間窗的threshhold去做一個sum
=SUMIFS($G$51:$G$57,$E$51:$E$57,">"&F52, $E$51:$E$57,"<="&E52)
其中$G$51:$G$57 是Amt列,$E$51:$E$57是DateTime列,F52是昨天的同一時間,E52是現在。
Date | Hour | DateTime | DateTime-0 | YesTime | Amt | SumRoll |
2016-02-17 | 11 | 2016-02-17 11:00:00 | 2016-02-17 11:00:00 | 2016-02-16 11:00:00 | 50 | 150 |
2016-02-17 | 14 | 2016-02-17 14:00:00 | 2016-02-17 14:00:00 | 2016-02-16 14:00:00 | 30 | 180 |
2016-02-17 | 19 | 2016-02-17 19:00:00 | 2016-02-17 19:00:00 | 2016-02-16 19:00:00 | 20 | 200 |
2016-02-17 | 7 | 2016-02-17 07:00:00 | 2016-02-17 07:00:00 | 2016-02-16 07:00:00 | 100 | 100 |
2016-02-18 | 10 | 2016-02-18 10:00:00 | 2016-02-18 10:00:00 | 2016-02-17 10:00:00 | 40 | 140 |
2016-02-18 | 19 | 2016-02-18 19:00:00 | 2016-02-18 19:00:00 | 2016-02-17 19:00:00 | 20 | 60 |
2016-02-18 | 21 | 2016-02-18 21:00:00 | 2016-02-18 21:00:00 | 2016-02-17 21:00:00 | 60 | 120 |
OK。點到爲止。
謝謝