1- SELECT
2- transaction_id,
1+ WITH transaction_fulfillment AS
2+ (
3+ SELECT
4+ transaction_id,
5+
6+ CASE
7+ WHEN order_date LIKE ' [A-Z][a-z][a-z][a-z]% __, ____' THEN TRY_CONVERT(DATE , order_date)
8+ WHEN order_date LIKE ' [A-Z][a-z][a-z] __, ____' THEN TRY_CONVERT(DATE , order_date)
9+ WHEN order_date LIKE ' ____/__/__' THEN TRY_CONVERT(DATE , order_date)
10+ WHEN order_date LIKE ' ____-__-__' THEN TRY_CONVERT(DATE , order_date)
11+ WHEN order_date LIKE ' __/__/____' AND TRY_CONVERT(INT , SUBSTRING (order_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , order_date, 101 )
12+ WHEN order_date LIKE ' __-__-____' AND TRY_CONVERT(INT , SUBSTRING (order_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , order_date, 110 )
13+ WHEN order_date LIKE ' __/__/____' AND TRY_CONVERT(INT , LEFT(order_date, 2 )) > 12 THEN TRY_CONVERT(DATE , order_date, 103 )
14+ WHEN order_date LIKE ' __-__-____' AND TRY_CONVERT(INT , LEFT(order_date, 2 )) > 12 THEN TRY_CONVERT(DATE , order_date, 105 )
15+ ELSE TRY_CONVERT(DATE , TRIM (order_date), 101 )
16+ END as order_date,
17+
18+ order_month,
19+
20+ CASE
21+ WHEN ship_date LIKE ' [A-Z][a-z][a-z][a-z]% __, ____' THEN TRY_CONVERT(DATE , ship_date)
22+ WHEN ship_date LIKE ' [A-Z][a-z][a-z] __, ____' THEN TRY_CONVERT(DATE , ship_date)
23+ WHEN ship_date LIKE ' ____/__/__' THEN TRY_CONVERT(DATE , ship_date)
24+ WHEN ship_date LIKE ' ____-__-__' THEN TRY_CONVERT(DATE , ship_date)
25+ WHEN ship_date LIKE ' __/__/____' AND TRY_CONVERT(INT , SUBSTRING (ship_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , ship_date, 101 )
26+ WHEN ship_date LIKE ' __-__-____' AND TRY_CONVERT(INT , SUBSTRING (ship_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , ship_date, 110 )
27+ WHEN ship_date LIKE ' __/__/____' AND TRY_CONVERT(INT , LEFT(ship_date, 2 )) > 12 THEN TRY_CONVERT(DATE , ship_date, 103 )
28+ WHEN ship_date LIKE ' __-__-____' AND TRY_CONVERT(INT , LEFT(ship_date, 2 )) > 12 THEN TRY_CONVERT(DATE , ship_date, 105 )
29+ ELSE TRY_CONVERT(DATE , TRIM (ship_date), 101 )
30+ END as ship_date,
31+
32+ CASE
33+ WHEN delivery_date LIKE ' [A-Z][a-z][a-z][a-z]% __, ____' THEN TRY_CONVERT(DATE , delivery_date)
34+ WHEN delivery_date LIKE ' [A-Z][a-z][a-z] __, ____' THEN TRY_CONVERT(DATE , delivery_date)
35+ WHEN delivery_date LIKE ' ____/__/__' THEN TRY_CONVERT(DATE , delivery_date)
36+ WHEN delivery_date LIKE ' ____-__-__' THEN TRY_CONVERT(DATE , delivery_date)
37+ WHEN delivery_date LIKE ' __/__/____' AND TRY_CONVERT(INT , SUBSTRING (delivery_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , delivery_date, 101 )
38+ WHEN delivery_date LIKE ' __-__-____' AND TRY_CONVERT(INT , SUBSTRING (delivery_date, 4 , 2 )) > 12 THEN TRY_CONVERT(DATE , delivery_date, 110 )
39+ WHEN delivery_date LIKE ' __/__/____' AND TRY_CONVERT(INT , LEFT(delivery_date, 2 )) > 12 THEN TRY_CONVERT(DATE , delivery_date, 103 )
40+ WHEN delivery_date LIKE ' __-__-____' AND TRY_CONVERT(INT , LEFT(delivery_date, 2 )) > 12 THEN TRY_CONVERT(DATE , delivery_date, 105 )
41+ ELSE TRY_CONVERT(DATE , TRIM (delivery_date), 101 )
42+ END as delivery_date,
43+
44+ CASE
45+ WHEN TRIM (LOWER (shipping_method)) IN (' pickup' , ' in-store pickup' ) THEN ' Store Pickup'
46+ WHEN TRIM (LOWER (shipping_method)) IN (' overnight' , ' overnight shipping' ) THEN ' Overnight Shipping'
47+ WHEN TRIM (LOWER (shipping_method)) IN (' same day' , ' same day delivery' ) THEN ' Same Day Delivery'
48+ WHEN TRIM (LOWER (shipping_method)) IN (' express' , ' express shipping' ) THEN ' Express Shipping'
49+ WHEN TRIM (LOWER (shipping_method)) IN (' standard' , ' standard shipping' ) THEN ' Standard Shipping'
50+ WHEN TRIM (LOWER (shipping_method)) IN (' free ship' , ' free shipping' ) THEN ' Free Shipping'
51+ ELSE TRIM (shipping_method)
52+ END AS shipping_method,
53+
54+ CASE
55+ WHEN TRIM (LOWER (sales_channel)) IN (' app' , ' mobile' , ' mobile app' ) THEN ' Mobile App'
56+ WHEN TRIM (LOWER (sales_channel)) IN (' store' , ' in store' , ' in-store' ) THEN ' In Store'
57+ WHEN TRIM (LOWER (sales_channel)) IN (' online' , ' web' ) THEN ' Website'
58+ WHEN TRIM (LOWER (sales_channel)) IN (' phone' ) THEN ' Phone Call'
59+ WHEN TRIM (LOWER (sales_channel)) IN (' catalog' ) THEN ' Catalog'
60+ ELSE ' Unknown'
61+ END AS sales_channel,
62+
63+ CASE TRIM (LOWER (payment_method))
64+ WHEN ' debit card' THEN ' Debit Card'
65+ WHEN ' credit card' THEN ' Credit Card'
66+ WHEN ' google pay' THEN ' Google Pay'
67+ WHEN ' apple pay' THEN ' Apple Pay'
68+ WHEN ' bank transfer' THEN ' Bank Transfer'
69+ WHEN ' buy now pay later' THEN ' Buy Now Pay Later'
70+ WHEN ' bnpl' THEN ' Buy Now Pay Later'
71+ WHEN ' gift card' THEN ' Gift Card'
72+ WHEN ' paypal' THEN ' PayPal'
73+ WHEN ' cash' THEN ' Cash'
74+ ELSE TRIM (payment_method)
75+ END AS payment_method,
76+
77+ TRY_CONVERT(DATE , record_created_ts) as record_created,
78+ TRY_CONVERT(DATE , last_modified_ts ) as last_modified
79+ FROM {{ ref(' stg_transactions' ) }}
80+ ),
81+ order_date_cleaning AS
82+ (
83+ SELECT
84+ transaction_id,
385
4- ship_date,
5- delivery_date,
86+ CASE
87+ WHEN order_month != MONTH(order_date) THEN DATEFROMPARTS(YEAR(order_date), DAY(order_date), MONTH(order_date))
88+ ELSE order_date
89+ END AS order_date,
690
7- shipping_method,
8- sales_channel,
9- payment_method
10- FROM {{ ref(' stg_transactions' ) }} ;
91+ ship_date,
92+ delivery_date,
93+
94+ shipping_method,
95+ sales_channel,
96+ payment_method,
97+
98+ CASE
99+ WHEN record_created IS NULL
100+ OR record_created NOT LIKE ' ____-__-__'
101+ OR TRY_CONVERT(DATE , record_created) IS NULL
102+ OR YEAR(record_created) < 2019 THEN NULL
103+ ELSE record_created
104+ END as record_created,
105+
106+ CASE
107+ WHEN last_modified IS NULL
108+ OR last_modified NOT LIKE ' ____-__-__'
109+ OR TRY_CONVERT(DATE , last_modified) IS NULL
110+ OR YEAR(last_modified) < 2019 THEN NULL
111+ ELSE last_modified
112+ END as last_modified
113+
114+ FROM transaction_fulfillment
115+ ),
116+ ship_date_cleaning AS
117+ (
118+ SELECT
119+ transaction_id,
120+ order_date ,
121+
122+ CASE
123+ WHEN DATEDIFF(DAY ,order_date, ship_date) < 0 THEN DATEFROMPARTS(YEAR(ship_date), DAY(ship_date), MONTH(ship_date))
124+ WHEN DATEDIFF(DAY ,order_date, ship_date) > 15 THEN DATEFROMPARTS(YEAR(ship_date), DAY(ship_date), MONTH(ship_date))
125+ WHEN ship_date IS NULL THEN DATEADD(DAY, 7 , order_date)
126+ ELSE ship_date
127+ END as ship_date ,
128+
129+ delivery_date,
130+ shipping_method,
131+ sales_channel,
132+ payment_method,
133+ record_created,
134+ last_modified
135+ FROM order_date_cleaning
136+ ),
137+ int_transaction_fulfillment AS
138+ (
139+ SELECT
140+ transaction_id,
141+ order_date,
142+ ship_date,
143+
144+ CASE
145+ WHEN DATEDIFF(DAY, ship_date , delivery_date) > 17 THEN DATEFROMPARTS(YEAR(delivery_date), DAY(delivery_date), MONTH(delivery_date))
146+ WHEN DATEDIFF(DAY, ship_date , delivery_date) < - 15 THEN DATEFROMPARTS(YEAR(delivery_date), DAY(delivery_date), MONTH(delivery_date))
147+ ELSE delivery_date
148+ END as delivery_date,
149+
150+ shipping_method,
151+ sales_channel,
152+ payment_method,
153+ record_created,
154+ last_modified
155+ FROM ship_date_cleaning
156+ )
157+ SELECT
158+ transaction_id,
159+ order_date,
160+ ship_date,
161+ delivery_date,
162+ shipping_method,
163+ sales_channel,
164+ payment_method,
165+ record_created,
166+ last_modified
167+ FROM int_transaction_fulfillment;
0 commit comments