Có thể nói một trong những tài nguyên quý giá nhất đối với con người là thời gian. Hiểu được “thời gian” trong Marketing Cloud là cách để tiết kiệm tài nguyên (thời gian, tiền bạc, công sức) cho chính bạn khi làm việc trên nền tảng này! Cùng Gâu Đần tìm hiểu date time trong Marketing Cloud qua bài này nhé.
Đầu tiên hãy nhìn vào trường hợp này:
Thời gian chỉnh sửa cuối cùng cho Person Account record này là 7/12/2021 vào lúc 15:42
Cũng cùng là Person Account cho record đó, nhưng sau khi sync vào Marketing Cloud và được truy vấn ra thì ngày chỉnh sửa cuối là 7/12/2021 vào lúc 1:42
Và một điều cũng cần để ý nữa là trong MC đang dùng format dạng mm/dd/yyyy time A/Pm
Được biết cả 2 user trên từng platform này đều set time zone là GMT +8 Singapore time.
- Check user time zone trên Sales Cloud: Settings/My Personal Information/ Advanced User Details
- Check user time zone trên Marketing Cloud: Setup/ Administrator/Users
Tại sao dữ liệu của record này lại khác vậy? Liệu có nhầm ở đâu không? Nếu bạn vẫn còn thắc mắc chưa hiểu tại sao thì bài này quả là dành cho bạn rồi.
Vậy time zone cho user trên Marketing Cloud được apply vào đâu?
System time
Đầu tiên phải hiểu trước là trên hệ thống của Marketing Cloud có một chế độ thời gian riêng. Cụ thể là nó luôn được set hay quy về với time zone là UTC-6 còn hiểu là Central America Standard Time
trong SQL. Thời gian này là fix cứng và KHÔNG áp dụng thay đổi Daylight saving time (DST).
Cái DST này hiểu nôm na là: một số nước như Mỹ có thời gian sẽ thay đổi theo mùa, tức họ sẽ vặn đồng hồ nhanh lên hay chậm đi theo mùa đó.
Mọi dữ liệu trên hệ thống Marketing Cloud sẽ sử dụng time-zone này.
Time-zone ứng với User
Time zone được set cho User chỉ có tác dụng trên UI. Các sự thay đổi về mặt dữ liệu, sẽ hiện thời gian thay đổi dựa vào time zone này. Theo Đần thấy nó chỉ hiện đúng khi xem qua UI ở Journey UI, Subscriber UI, Automation UI, chứ ngó qua Data Extension là nó dùng lại System time(UTC-6) rồi.
Note: Nhắc lại là thời gian trên UI cho mình xem thôi, chứ thực chất thời gian trong dữ liệu hệ thống vẫn là dùng System time nhé.
Dữ liệu render trong Email hay SMS sẽ dùng loại thời gian nào?
Dữ liệu trong MC sẽ dùng dữ liệu của hệ thống, tức là hệ thống lưu trữ thế nào thì nó sẽ hiện y thế đó.
Your ID is: %%Id%%<br>
Last Modified date: %%LastModifiedDate%%
Output:
Từ đây ta thấy có 02 vấn đề cần giải quyết:
- Thời gian bị lệch vì dữ liệu thời gian truyền vào bị biến đổi thành System time UTC-6
- Format thời gian đang dùng format của Mỹ, trong khi ta muốn đó là format ngày trước tháng sau dd/mm/yyyy time
Từ đây ta sẽ có 2 hướng giải quyết đó là:
Xử lý số liệu trước khi truyền vào Data Extension
Sử dụng AT TIME ZONE
trong SQL(option 1)
SELECT
Id,
LastModifiedDate AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Singapore Standard Time' as converted_time
FROM
ENT.[Account_Salesforce]
WHERE
Id = 'YOUR ACCOUNT ID'
Output
Mẹo ở đây là chuyển time-zone về CST Central Standard Time
sau đó chuyển về time-zone mà mình muốn đổi. Như ở đây, Đần đã đổi Singapore time (UTC+8).
CST có tự động áp dụng những thay đổi Daylight saving time (DST), nên đối với múi giờ nào có áp dụng (DST) thì dùng phương pháp này là hay nhất.
Ví dụ: GETDATE()
trả về server time ngay lúc gọi ở System time UTC-6. Giờ mình sẽ thử đổi sang múi giờ ở bang California và bang này thì có dùng DST, rồi thử vào đây xem có đúng không nhé.
SELECT
GETDATE() AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Pacific Standard Time' as converted_time
Sử dụng DATEADD
trong SQL(option 2)
Phương pháp này thì áp dụng với các time-zone nào không dùng DST. Chẳng hạn như Singapore (hay Việt Nam) không dùng Daylight saving time thì dùng cách này được.
Ta sẽ cộng 14 tiếng để chuyển sang giờ Singapore
SELECT
Id,
DATEADD(hour, 14, LastModifiedDate) as converted_time
FROM
ENT.[Account_Salesforce]
WHERE
Id = 'YOUR ACCOUNT ID'
Output:
Tại sao lại 14 tiếng?? À là vì System time là UTC-6 còn Singapore time là UTC+8 vì thế khoảng cách chênh lệch ở đây sẽ là 14 tiếng (6 + 8 = 14)
Format
lại thời gian như mình mong muốn
Việc còn lại khá đơn giản, ta chỉ cần format lại thời gian là xong
SELECT
Id,
FORMAT (LastModifiedDate AT TIME ZONE 'Central Standard Time' AT TIME ZONE 'Singapore Standard Time', 'dd/MM/yyyy hh:mm:ss tt' ) as converted_time
FROM
ENT.[Account_Salesforce]
WHERE
Id = 'YOUR ACCOUNT ID'
Output:
Trong đó
Format | Description |
dd | ngày theo số từ 01 – 31 |
dddd | ngày viết thành chữ |
MM | tháng theo số từ 01 – 12 |
MMM | tháng viết tắt |
MMMM | tháng viết thành chữ |
yy | năm với 2 chữ số |
yyyy | năm với 4 chữ số |
hh | giờ từ 1 – 12 |
HH | giờ từ 0 – 23 |
mm | phút từ 0 -59 |
ss | giây từ 0 – 59 |
tt | hiển thị AM hoặc PM |
d | ngày trong tháng từ 1 – 31 |
us | hiển thị theo kiểu Mỹ MM/DD/yyyy |
Note: khi format lại rồi truyền vào DE thì field được format phải ở dạng text
To be continued hihi