You are currently viewing Làm việc với date time trong Marketing Cloud (1)

Làm việc với date time trong Marketing Cloud (1)

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.

Never give up on a dream just because of the time it will take to accomplish it. The time will pass anyway.

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 đó

FormatDescription
ddngày theo số từ 01 – 31
ddddngày viết thành chữ
MMtháng theo số từ 01 – 12
MMMtháng viết tắt
MMMMtháng viết thành chữ
yynăm với 2 chữ số
yyyynăm với 4 chữ số
hhgiờ từ 1 – 12
HHgiờ từ 0 – 23
mmphút từ 0 -59
ssgiây từ 0 – 59
tthiển thị AM hoặc PM
dngày trong tháng từ 1 – 31
ushiể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