<-

Digital Consumer Order Lifecycle Solution

Background

由于目前电商订单全生命周期各阶段的系统分散、格式不统一,现阶段报表不能完全准确描述订单状态。于是考虑构建一套解决方案,彻底补齐这一处短板,理想情况下,希望为电商数据分析、报表展示提供现有数据基础下最准确的一个入口。

该解决方案和历史解决方案最大的不同在于,历史方案主要通过表和表关联去补全信息,由于系统的不统一,以及系统的口径、格式、信息完整程度存在不同,关联过程中势必造成一定的信息丢失,而这些丢失被证明是可以避免的。

优化的方案是先将订单商品数量、状态相关的最少必须的信息提出,应用数量扣减的思路,依次从订单取消、订单出库、订单物流、订单换货、订单退货的数据中寻找信息,进行数量扣减和状态标识。使用这样的计算思路,即使存在部分信息的缺失,也能按照先到货的先退、先到货的先换这种逻辑去补全状态,最后形成 order_nbr & upc & status 为主键的一个状态表,最后再关联进来门店、订单属性、仓库、物流、产品主数据等维度信息,形成一张可供所有电商报告场景使用的较为准确的数据宽表。


Solution Version 1

数据源层面,订单来源包含官网、天猫旗舰店、官方 APP、抖音店铺、京东、微信小程序,发货方式包括自有城市大仓发货、直营门店代发货、物流中心发货、经销商门店发货、定制商品工厂发货等,快递则一般选用 EMS、顺丰,工厂是用 DHL(后面会改成顺丰)。

Step 1: Product Final Status

1. 先将各生命周期的数据源整合

Order Placement

| order_nbr    | upc        | order_payment_tmst    | order_qty |
| dummy_number | dummy_code | 2024-10-26 00:00:00.0 | 1         |

Order Cancellation

| order_nbr    | upc        | order_cancel_tmst   | cancel_qty |
| dummy_number | dummy_code | 2024-10-26 01:00:00 | 1          |

Order Fulfillment & Exchange

| order_nbr    | delivery_nbr      | upc        | shipped_qty | order_shipped_tmst  |
| dummy_number | SFxxxxxxxxxxxxxxx | dummy_code | 1           | 2024-10-26 08:00:00 |
| order_nbr    | upc        | exchange_qty | order_exchange_tmst |
| dummy_number | dummy_code | 1            | 2024-10-29 08:00:00 |

Order Delivery

| cn_carrier_pick_up_tmst | delivery_nbr      | cn_first_attempt_tmst | cn_delivered_tmst   |
| 2024-10-26 09:00:00     | SFxxxxxxxxxxxxxxx | 2024-10-27 08:00:00   | 2024-10-27 10:00:00 |

Order Return

| return_order_nbr | order_nbr    | upc        | order_return_tmst   | return_qty |
| Rxxxxxxxxxx      | dummy_number | dummy_code | 2024-10-31 10:00:00 | 1          |

2. 将订单中单件单的情况单独拿出来计算

电商渠道购买商品的消费记录中,一个订单中一个 sku + size 只买 1 件的情况占了绝大多数,而且判断状态相对简单,所以单独考虑。

主要判断逻辑是: 1) 当存在取消数量,判定为 Cancelled;否则,当存在退货数量,判定为 Returned;否则,当存在换货数量,判定为 Exchanged;否则,当有送达时间,判定为 Delivered;否则,当存在出库数量,判定为 Shipped;其余情况标 Order Created。 2) 额外处理了一些数据一场缺失的情况,例如,订单状态正常,仓库发货数据缺失时,对于 shipped_qty 的取值,shipped_qty 为空时,优先去看 exchange_qty,再看 return_qty,都没有就填 0(谨慎填 Null,后续涉及到数量拆分,由于各类意想不到的数据缺失,Null 值会带来较大的麻烦)。 3) 另外,增加了一列 issue_type 标注出从现有数据交叉对比中发现的问题,用以全局了解数据准确度和问题来源,如 “Canceled but Shipped”、”Ship qty > Order qty” 等。

3. 针对多件单,首先剔除出取消的订单 / 订单中取消的商品

处理逻辑是先用订单数据关联取消订单数据,并且开窗计算订单下同一 upc 的总取消数量。拿出关联后 cancel_qty 不为空的部分,将这部分数据标上 Cancelled。cancel_qty 为空的 以及 cancel_qty 不为空但 order_qty > total_cancel_qty 的 (order_qty - total_cancel_qty) 这部分拿出来进行后续的状态判断。

4. 将上一步中剩下的部分拿来判断发货情况

将剔除了 cancel 商品后的(按理来说存在取消后仓库依然发货的情况,去除 cancel 这一步应该放在判断发货后面进行,后面再说)订单按照 booking_qty 拆分,确保一个 order_nbr 下一个 upc 每一件商品一行,按 row_number 编号。以同样的做法,将仓库发货数据按照 order_nbr + upc 的 shipped_qty 拆分,按 row_number 编号。用订单数据关联发货数据,关联字段加上 row_number,由此能关联到 shipped_qty 的数据被认为已经发货,将这部分数据标上 Shipped,两部分数据分别聚合再 union 后,去往下一步。

5. 为已发货的订单数据关联快递信息

利用发货数据中带有的快递单号,关联快递数据,为能找到送达时间的数据标上 Delivered,再将两部分数据 union 后去下一步。

6. 按照送达时间,结合退货数据,判断退货情况

将上一步数据中 shipped_qty 拆分,按照 delivered_tmst 做由小到大排序取 row_number。退货数据一样的做法,将 return_qty 拆分,按照 order_return_tmst 由小到大排序取 row_number。两部分数据,将能关联上 return_qty 的数据标为 Returned 聚合后放到一边,剩下的数据继续往下判断。

7. 按照送达时间,结合换货数据,判断换货情况

类似上一步处理,将剩下的数据重新按照送达时间排序,将换货数据中 exchange_qty 拆分,按照 order_exchange_tmst 由小到大排序取 row_number。关联换货数据,将能关联到 exchange_qty 的数据标为 Exchanged,两部分结果数据分别聚合。

8. 将状态结果合并写入中间表中

将以上各阶段结果 single_orders_result、canceled_orders、returned_orders、exchanged_orders、 remaining_orders_after_exchange 合并写入中间表。

| order_nbr    | order_status | upc        | delivery_nbr | return_order_nbr | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst    | order_cancel_tmst   | order_shipped_tmst | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Cancelled    | dummy_code | null         | null             | 1                 | 0               | 0                     | 1          | 0           | 0          | 0            | 2024-08-07 22:20:09.0 | 2024-08-07 22:20:41 | null               | null                    | null                  | null              | null              | null                | Normal     | 2024-08         |

Step 2: Exchange Order Workround

因为存在换货,部分多件单原始订单中存在一个 sku 多个 color 或多个 size,订单中某件商品换货后也可能和原始订单中的 sku & size 相同。在 Step 1 中粗放式地看订单下 upc 在各系统中的状态就会出现:某件商品只订了一件但发了两件或者退了两件的情况,造成统计结果的偏差。

1. Exchanged Order Style

为了修复这部分偏差,处理的逻辑是,在所有渠道的仓库数据中,找到存在换货入库的 order_nbr + style_code,作为判断这类订单下这个类目的商品出现换货的依据。

2. Net Outbound

以 order_nbr + style_code 作为主键,将所有出库(销售出库、换货出库)的商品件数减去所有入库(换货入库、退货入库)的商品件数,得到主键净出库的数量。

3. Net Outbound of Exchanged Order Style

结合以上两个结果,拿到有过换货的 order_nbr + style_code 的净出库数量。

4. 修正所有有过换货的数据

读取 Step 1 的结果数据,将有过换货的所有数据(包括订单中和换货商品有同样 style_code 的商品)拿出来,将数据按照 shipped_qty 拆分,以 order_nbr + style_code 为分区取 row_number,将上一步有过换货的 order_nbr + style_code 净出库数量按照同样的方法拆分。两部分数据关联,将能关联到净出库的标记为 Exchange,不能关联到净出库的标记为 Return。

5. 将以上结果合并写入第二张中间表

将修复了换货记录的结果写入另一张中间表中。

| order_nbr    | order_status | upc        | delivery_nbr      | return_order_nbr | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst    | order_cancel_tmst | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Exchanged    | dummy_code | SFxxxxxxxxxxxxxxx | null             | 1                 | 1               | 0                     | 0          | 1           | 0          | 1            | 2024-08-07 22:20:09.0 | null              | 2024-08-08 11:10:58 | 2024-08-08 11:11:08     | 2024-08-10 07:50:22   | 2024-08-12 09:13:51 | null              | 2024-08-15 11:32:26 | Normal     | 2024-08         |

Step 3: Join Dimensional Information

为了运算性能最优,前面两步只引入了最少的和主键、数量、日期相关的字段参与计算。在第三步中将订单相关(订单渠道、订单金额)、快递相关(发货仓库、承运公司、运输方式、消费者区域)、产品相关(品类、颜色、尺码、吊牌价)、预计送达时间(发货仓库和送货地址的路线决定)这些维度信息通过关联加入,写到最终结果表中。

| order_nbr    | order_status | sourcing_order_nbr | platform | order_store_cd | order_store_nm | upc_cd     | product_line | product_code | size_code  | division_code | presale_ind | from_node | ship_mode | warehouse_region_nm | consumer_region_nm | fulfillment_channel | delivery_nbr    | express_company_nm | express_company_service_nm | province_nm | city_nm | district_nm | route_lead_time_day | return_order_nbr | msrp   | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst    | order_cancel_tmst | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_estimate_delivery_tmst | cn_delivered_tmst   | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
| dummy_number | Delivered    | null               | XXXX.COM | xx             | XXXX XXX       | dummy_code | XXX          | dummy_code   | dummy_code | xx            | x           | XX XXXX   | XX        | EAST                | EAST               | XX                  | SFxxxxxxxxxxxxx | 顺丰快递           | 顺丰标快                   | 上海        | 上海市  | 浦东新区    | 1                   | null             | xxx.xx | 1                 | 1               | 0                     | 0          | 1           | 0          | 0            | 2024-08-25 00:58:54.0 | null              | 2024-08-25 10:36:19 | 2024-08-25 10:37:10     | 2024-08-26 07:11:35   | 2024-08-26 23:59:59       | 2024-08-26 08:54:29 | null              | null                | Normal     | 2024-08         |

Solution Version 2

由于第一版的代码中存在几点逻辑问题:

  1. 先关联取消订单信息,后关联发货信息,导致部分取消后但发货的单号部分实际信息丢失;

  2. 无法追溯换货出库商品的物流信息,对于全局的物流时效、成本控制造成一定程度的失真;

  3. 缺少官网原始单号和换货单号的对应关系,无法统计出准确的换货数量。

为此第二版结果主要做的调整是:

  1. 为天猫订单生成换货单号;
  2. 建立官网换货单号和原始单号的关联关系;
  3. 由此精确计算各平台换货数量;
  4. 不按单件单多件单分开考虑,所有订单通盘计算;
  5. 订单生命周期各阶段只分拆不聚合,最终生成结果时聚合相同状态的数量;
  6. 为了数据准确性和完整性调整扣减先后顺序,调整后的扣减顺序为:订单、仓库发货、物流、取消订单、换货、退货。

Step 1: digital consumer order lifecycle kpi integration

为了补全换货的物流信息,将仓库中换货出库的商品模拟生成一个换货订单,在数据源整合阶段扩充这部分到创建订单。

1. 先将各生命周期的数据源整合

Order Placement

| order_nbr    | upc        | order_payment_tmst    | order_qty | notes      |
|:------------ | ---------- | --------------------- | --------- |:---------- |
| dummy_number | dummy_code | 2024-08-30 21:44:17.0 | 1         | (创建订单) |
| dummy_number | dummy_code | 2024-09-05 14:33:13   | 1         | (换货出库) |

Order Fulfillment

| order_nbr           | delivery_nbr      | upc            | shipped_qty | order_shipped_tmst  | notes      |
|:------------------- | ----------------- | -------------- | ----------- | ------------------- |:---------- |
| dummy_number        | SFxxxxxxxxxxxxxxx | dummy_code | 1           | 2024-09-05 14:33:13 | (换货出库) |
| dummy_number        | SFxxxxxxxxxxxxxxx | dummy_code | 1           | 2024-08-31 03:09:26 | (销售出库) |

Order Delivery

| delivery_nbr      | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | notes      |
|:----------------- | ----------------------- | --------------------- | ------------------- |:---------- |
| SFxxxxxxxxxxxxxxx | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | (Exchange) |
| SFxxxxxxxxxxxxxxx | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | (Sales)    |

Order Cancellation

| order_nbr | upc | order_cancel_tmst | cancel_qty |

Order Exchange

| order_nbr           | upc            | exchange_qty | order_exchange_tmst | notes      |
|:------------------- | -------------- | ------------ | ------------------- |:---------|
| dummy_number        | dummy_code     | 1            | 2024-09-05 12:32:09 | (换货入库) |

Order Return

| return_order_nbr | order_nbr | upc | order_return_tmst | return_qty |

2. 将单件单、多件单、换货出库生成订单拉通考虑,关联发货信息

将所有订单数据拆成一件一行,并按 order_nbr & upc 分区 进行 row_number 排序生成序列号 schedule_line_nbr;应用同样的逻辑,将发货数据分拆。订单表左关联发货表,能关联到发货数量的 order_status 设为 Shipped,其余为 Order Created。

| order_nbr    | upc        | order_status | gross_booking_qty | order_payment_tmst    | shipped_qty | order_shipped_tmst  | delivery_nbr    |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ----------- | ------------------- | --------------- |
| dummy_number | dummy_code | Shipped      | 1                 | 2024-08-30 21:44:17.0 | 1           | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx |
| dummy_number | dummy_code | Shipped      | 1                 | 2024-09-05 14:33:13   | 1           | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx |

3. 关联物流信息

将上一步所有数据通过快递单号关联物流信息,能关联到送达时间 / 首次派送时间的订单 order_status 设为 Delivered,其余状态不变。

| order_nbr    | upc        | order_status | gross_booking_qty | order_payment_tmst    | shipped_qty | order_shipped_tmst  | delivery_nbr    | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | delivered_tmst      |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ----------- | ------------------- | --------------- | ----------------------- | --------------------- | ------------------- | ------------------- |
| dummy_number | dummy_code | Delivered    | 1                 | 2024-08-30 21:44:17.0 | 1           | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 |
| dummy_number | dummy_code | Delivered    | 1                 | 2024-09-05 14:33:13   | 1           | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 |

4. 关联订单取消信息

将订单取消数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到上一步结果中,能关联到取消订单数量的订单 order_status 设为 Cancelled,其余状态保持不变。

| order_nbr    | upc        | order_status | gross_booking_qty | order_payment_tmst    | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst  | delivery_nbr    | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | delivered_tmst      |
|:------------ | ---------- | ------------ | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | --------------- | ----------------------- | --------------------- | ------------------- | ------------------- |
| dummy_number | dummy_code | Delivered    | 1                 | 2024-08-30 21:44:17.0 | 0          | null              | 1           | 2024-08-31 03:09:26 | SFxxxxxxxxxxxxx | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 |
| dummy_number | dummy_code | Delivered    | 1                 | 2024-09-05 14:33:13   | 0          | null              | 1           | 2024-09-05 14:33:13 | SFxxxxxxxxxxxxx | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 |

5. 关联换货信息

维护一张官网换货订单和原始订单的关联关系表,通过这个表得到换货订单的原始订单号 parent_order_nbr,非换货的订单 parent_order_nbr 为 order_nbr 本身。

全表根据 order_nbr 分区计算最小的 order_payment_tmst 设为 initial_payment_tmst,将所有 order_payment_tmst > initial_payment_tmst 的非官网订单 order_nbr 加上前缀 E,以此标识天猫换货订单。

将换货数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到以上结果中,能关联到换货数量的 order_status 标识为 Exchanged,其余保持不变。

| order_nbr     | parent_order_nbr | order_status | upc        | delivery_nbr    | gross_booking_qty | order_payment_tmst    | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | delivered_tmst      | exchange_qty | order_exchange_tmst |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- |
| dummy_number  | dummy_number     | Exchanged    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-08-30 21:44:17.0 | 0          | null              | 1           | 2024-08-31 03:09:26 | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1            | 2024-09-05 12:32:09 |
| Edummy_number | dummy_number     | Delivered    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-09-05 14:33:13   | 0          | null              | 1           | 2024-09-05 14:33:13 | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0            | null                |

6. 关联退货信息

将退货数据拆行,通过 order_nbr & upc & schedule_line_nbr 关联到上一步结果中,能关联到退货数量的订单 order_status 设为 Returned,其余状态保持不变。

| order_nbr     | parent_order_nbr | order_status | upc        | delivery_nbr    | gross_booking_qty | order_payment_tmst    | cancel_qty | order_cancel_tmst | shipped_qty | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | delivered_tmst      | exchange_qty | order_exchange_tmst | return_order_nbr | return_qty | order_return_tmst |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | ---------- | ----------------- | ----------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- | ---------------- | ---------- | ----------------- |
| dummy_number  | dummy_number     | Exchanged    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-08-30 21:44:17.0 | 0          | null              | 1           | 2024-08-31 03:09:26 | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1            | 2024-09-05 12:32:09 | null             | 0          | null              |
| Edummy_number | dummy_number     | Delivered    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-09-05 14:33:13   | 0          | null              | 1           | 2024-09-05 14:33:13 | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0            | null                | null             | 0          | null              |

7. 加上 issue_type

分析每一行数据,为数据进行打标。

  • 有取消记录但也有发货记录,标记 Canceled but Shipped;
  • 没有发货记录但是有退货记录,标记 Not Shipped but Returned;
  • 没有发货记录但是有换货记录,标记 Not Shipped but Exchanged;
  • 有发货记录但是没有快递单号,标记 Shipped but Missing Delivery No.;
  • 其余被认定为 Normal。

8. 计算 net_booking_qty

net_booking_qty = gross_booking_qty - cancel_qty - return_qty - exchange_qty

9. 将换货记录的数据 gross_booking_qty 设为 0

10. 聚合数量

将最终结果根据 order_nbr & upc & order_status & delivery_nbr & return_order_nbr & issue_type 进行聚合。

| order_nbr     | parent_order_nbr | order_status | upc        | delivery_nbr    | gross_booking_qty | order_payment_tmst    | net_booking_qty | cancel_qty | order_cancel_tmst | shipped_qty | remaining_to_ship_qty | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_delivered_tmst   | delivered_tmst      | exchange_qty | order_exchange_tmst | return_order_nbr | return_qty | order_return_tmst | issue_type |
|:------------- | ---------------- | ------------ | ---------- | --------------- | ----------------- | --------------------- | --------------- | ---------- | ----------------- | ----------- | --------------------- | ------------------- | ----------------------- | --------------------- | ------------------- | ------------------- | ------------ | ------------------- | ---------------- | ---------- | ----------------- | ---------- |
| dummy_number  | dummy_number     | Exchanged    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-08-30 21:44:17.0 | 1               | 0          | null              | 1           | 0                     | 2024-08-31 03:09:26 | 2024-08-31 11:14:54     | 2024-09-02 06:58:24   | 2024-09-02 10:04:56 | 2024-09-02 10:04:56 | 1            | 2024-09-05 12:32:09 | null             | 0          | null              | Normal     |
| Edummy_number | dummy_number     | Delivered    | dummy_code | SFxxxxxxxxxxxxx | 1                 | 2024-09-05 14:33:13   | 0               | 0          | null              | 1           | 0                     | 2024-09-05 14:33:13 | 2024-09-05 14:33:45     | 2024-09-07 07:03:39   | 2024-09-07 09:52:22 | 2024-09-07 09:52:22 | 0            | null                | null             | 0          | null              | Normal     |

Step 2: Join Dimensional Information

与 Version 1 的 Step 3 完全一致。跳过单独处理换货的步骤,直接读取 Step 1 的结果,关联维度信息写入最终结果表。

| order_nbr     | parent_order_nbr | order_status | sourcing_order_nbr | platform | order_store_cd | order_store_nm          | upc_cd     | product_line | product_code | size_code | division_code | presale_ind | from_node               | ship_mode | warehouse_region_nm | consumer_region_nm | fulfillment_channel | delivery_nbr    | express_company_nm | express_company_service_nm | province_nm | city_nm | district_nm | route_lead_time_day | return_order_nbr | msrp   | gross_booking_qty | net_booking_qty | remaining_to_ship_qty | cancel_qty | shipped_qty | return_qty | exchange_qty | order_payment_tmst    | order_cancel_tmst | order_shipped_tmst  | cn_carrier_pick_up_tmst | cn_first_attempt_tmst | cn_estimate_delivery_tmst | cn_delivered_tmst   | order_return_tmst | order_exchange_tmst | issue_type | order_month_nbr |
|:------------- | ---------------- | ------------ | ------------------ | -------- | -------------- | ----------------------- | ---------- | ------------ | ------------ | --------- | ------------- | ----------- | ----------------------- | --------- | ------------------- | ------------------ | ------------------- | --------------- | ------------------ | -------------------------- | ----------- | ------- | ----------- | ------------------- | ---------------- | ------ | ----------------- | --------------- | --------------------- | ---------- | ----------- | ---------- | ------------ | --------------------- | ----------------- | ------------------- | ----------------------- | --------------------- | ------------------------- | ------------------- | ----------------- | ------------------- | ---------- | --------------- |
| dummy_number  | dummy_number     | Exchanged    | null               | TMALL    | XXXX           | xxxxxxxxxxxxxxxxxxxxxxx | dummy_code | TBD          | dummy_code   | 10        | 20            | 0           | xxxxxxxxxxxxxxxxxxxxxxx | 陆运      | EAST                | EAST               | DC                  | SFxxxxxxxxxxxxx | 顺丰快递           | 顺丰标快                   | 上海        | 上海市  | 松江区      | null                | null             | 249.00 | 1                 | 0               | 0                     | 0          | 1           | 0          | 1            | 2024-08-29 14:08:04.0 | null              | 2024-08-29 12:06:24 | 2024-08-29 20:17:26     | 2024-08-30 06:52:38   | 2024-08-29 23:59:59       | 2024-08-30 13:06:14 | null              | 2024-08-31 14:20:35 | Normal     | 2024-08         |
| Edummy_number | dummy_number     | Delivered    | null               | TMALL    | XXXX           | xxxxxxxxxxxxxxxxxxxxxxx | dummy_code | TBD          | dummy_code   | 10        | 20            | 0           | xxxxxxxxxxxxxxxxxxxxxxx | 陆运      | EAST                | EAST               | DC                  | SFxxxxxxxxxxxxx | 顺丰快递           | 顺丰次日(空运)           | 上海        | 上海市  | 松江区      | 1                   | null             | 249.00 | 0                 | 1               | 0                     | 0          | 1           | 0          | 0            | 2024-09-01 12:41:13   | null              | 2024-09-01 12:41:13 | 2024-09-01 12:41:21     | 2024-09-02 06:52:49   | null                      | 2024-09-02 11:16:55 | null              | null                | Normal     | 2024-09         |