Dữ liệu Date/ Time trong Qlik (P3)

Các bài viết trước trong cùng loạt bài về dữ liệu Date/ Time trong Qlik:

  • Dữ liệu Date/ Time trong Qlik (P1)
  • Dữ liệu Date/ Time trong Qlik (P2)

Phần cuối loạt bài sẽ tiếp tục trình bày các thủ thuật cần lưu ý khi làm việc với dữ liệu ngày tháng.

6. Luôn dùng giá trị tính toán cho các variable

Có một cách dùng variable đặc biệt trong Qlik gọi là dollar sign expansion. Đây là một quá trình cho phép thay thế một đoạn text trong một expression hay môt dòng script bằng giá trị của một biến. Ví dụ, xét 2 câu lệnh sau:

SET vRegionCode = ‘EU’;
LOAD
    If(RegionCode=’$(vRegionCode)’, ‘Yes’, ‘No’) AS IsEuropeCountry
RESIDENT Table1;

Khi thưc hiện câu lệnh LOAD, If(RegionCode=’$(vRegionCode)’ được dịch thành If(RegionCode=’EU’ trước khi thực hiện.

Như đã trình bày ở bài đầu tiên, ngày tháng trong Qlik được lưu trữ theo kiểu dual value (lưu 1 cặp giá trị bao gồm giá trị hiển thi và giá trị tính toán). Tuy nhiên, dollar sign expansion chỉ trả về một giá trị duy nhất. Vì vậy, bất cứ khi nào cần lưu lại một giá trị ngày tháng để dùng cho các tính toán hoặc so sánh về sau, sẽ thuận tiện hơn nếu giá trị được lưu trữ lại dưới dạng số thuần túy hơn là chuỗi thể hiện định dạng ngày tháng.

Ví dụ, biến vPreviousMonth được tạo ra như sau:

Let vPreviousMonth = Num( AddMonths( Today(), – 1 );

Sử dụng variable này trong một WHERE clause sau đó sẽ trở nên đơn giản:

LOAD * WHERE DeliveryDate > $(PreviousMonth) FROM Table1;

Nếu không sử dụng hàm Num trước đó, tác vụ so sánh DeliveryDate > $(PreviousMonth) có thể gây ra lỗi cú pháp khi DeliveryDate thực chất là một con số, trong khi $(PreviousMonth) trả về dạng chuỗi.

7. Tận dụng tính năng tự động tạo derived field cho dữ liệu Date/ Time trong Qlik Sense

Một trong những yêu cầu căn bản khi phân tích dữ liệu date/ time là chia các thành phần ngày tháng thành các dimension nhỏ hơn để sử dụng trong các phân tích chuyên sâu. Giả sử dữ liệu của bạn chỉ có (Ngày bán, Doanh số), nhưng bạn lại cần phân tích doanh số theo năm, quý, tháng, tuần trong năm, ngày trong tuần v.v.

Trong trường hợp này, nếu tự viết script, bản sẽ phải sử dụng các hàm Year, Month, WeekDay,… để tự xây dựng Master Calendar. (Lưu ý: Master Calendar không chỉ dùng để thêm vào các thành phần ngày tháng, mà quan trọng hơn là lấp đầy các khoảng trống trong dữ liệu thời gian. Mình sẽ trình bày tầm quan trọng và cách thức xây dựng Master Calendar trong một bài viết khác).

Việc trích xuất năm, tháng, quý… từ dữ liệu ngày tháng sẽ đơn giản hơn nhiều khi bạn sử dụng Data Manager trong Qlik Sense. Khi phát hiện một field dữ liệu ngày tháng, Data Manager sẽ tự động tính toán các thành phần liên quan mà không cần thêm thao tác nào khác từ  người sử dụng. Vì vậy, thay vì phải viết hàm Ceil(Month(SalesDate) / 3) as Quarter để tính toán quý trong năm, bạn chỉ cần gọi trực tiếp SalesDate.Quarter trong ứng dụng.

8. Dùng hàm Dual

Hàm Dual tạo ra một cặp giá trị: giá trị hiển thị (chuỗi) và giá trị tính toán (số). Sử dụng hàm này có thể giúp bạn giải quyết các vấn đề phức tạp liên quan đến dữ liệu ngày tháng. Ví dụ, để sắp xếp tháng trong năm tài chính (Fiscal Year) bắt đầu từ tháng 4, bạn có thể viết như sau:

Dual(Month(SalesDate), Mod(Month(SalesDate)-4,12)+1) as FiscalMonth

Hoặc bạn cần một filed kết hợp giữa tuần với năm, nhưng vẫn muốn sắp xếp field này theo thứ tự thời gian:

Dual(Year(SalesDate) & '-Week ' & Week( SalesDate), WeekStart( SalesDate) ) as YearWeek

9. Xử lý nhiều định dạng ngày tháng khác nhau trong cùng 1 field

Nếu bạn có nhiều định dạng ngày tháng từ các nguồn khác nhau hoặc trong cùng một field dữ liệu, bạn có thể dùng hàm Alt() để định nghĩa các định dạng có thể gặp, sau đó dùng Date() trên kết quả của hàm Alt để đưa về một định dạng ngày tháng thống nhất.

Date( 
           Alt(
           Date#(SalesDateSource,'YYYY/MM/DD'),
           Date#(SalesDateSource,'M-D-YY'),
           Date#(SalesDateSource,'DD/MM/YYYY'),
           Date#(SalesDateSource,'DD-MMM-YYYY'),
           Date#(SalesDateSource,'MM-DD-YYYY')
           ),'YYYY-MM-DD') as SalesDate;

Kết luận

Luôn luôn nhớ dữ liệu ngày tháng trong Qlik được lưu thành 2 giá trị: giá trị tính toán và giá trị hiển thị. Kiểu lưu trữ Dual values trong Qlik mang đến nhiều thuận tiện cho việc tính toán, so sánh ngày tháng trong khi vẫn đảm bảo hiển thị theo đúng định dạng ngày tháng mà bạn muốn. Tuy nhiên, dual values cũng có thể gây ra lỗi trong quá trình tính toán nếu numeric value được đem ra so sánh với một presentation value và ngược lại.

 Nguồn: https://vietqlikies.wordpress.com