Học Qlik Sense qua ví dụ: Phân tích dân số và kinh tế thế giới (P2)

Trong bài viết trước, chúng ta đã tìm hiểu cách tải dữ liệu từ Qlik Data Market, đồng thời chuẩn bị xong dữ liệu cho ứng dụng phân tích dân số và kinh tế thế giới. Bài viết này sẽ tiếp tục trình bày các bước thiết kế dashboard, tạo bảng biểu để phân tích dữ liệu.

Thiết kế ứng dụng

Lựa chọn biểu đồ phù hợp

Nhắc lại bài viết trước: ứng dụng của chúng ta nhằm mục đích phân tích các tiêu chí như dân số, tỷ lệ nam / nữ, GDP… theo từng quốc gia theo năm gần nhất. Như vậy, biểu đồ chính trong ứng dụng có dimension là quốc gia, và measure là các tiêu chí nêu trên.

Bảng hoặc biểu đồ cột hoàn toàn có thể được sừ dụng để so sánh các tiêu chí giữa các quốc gia với nhau. Tuy nhiên, ở trường hợp này, dimension (các quốc gia và vùng lãnh thổ) có yếu tố địa lý. Vì vậy, ta có thể dùng biểu đồ dạng bản đồ (map object) để hiển thị dữ liệu trực quan hơn nữa.

Quan sát khối dữ liệu vừa load, ta thấy một số filed như Country được đánh dấu với biểu tượng quả địa cầu. Đây là một GeoFiled (field mang thông tin địa lý) – có thể dùng làm dimension cho map object. Nếu mở Data Model viewer, chọn bảng Country, bạn sẽ thấy bảng này bao gồm field Country.Country_GeoInfo, chứa thông tin về các tọa độ làm nên hình dạng (shape) của từng quốc gia. Đây là một lợi điểm nữa của Qlik DataMarket – dữ liệu được tải về kèm theo thông tin địa lý và xây dựng sẵn thành các GeoField sẵn sàng để sử dụng. Khi bạn tải dữ liệu từ nguồn riêng (ví dụ Excel file), bạn sẽ phải chuẩn bị dữ liệu bản đồ và sử dụng các hàm như GeoMakePoint( ) Tag Filed trong reload script để tạo các GeoField và liên kết GeoField với shape tương ứng.

Tạo Map object

Map object tương đối khác so với các biểu đồ còn lại trong Qlik Sense. Map object bao gồm nhiều lớp (layers), mỗi lớp chứa dữ liệu thể hiện thông tin cần hiển thị. Điều này giống như việc bạn mua một bản đồ giấy và tô màu các nước, cắm cờ vào các thành phố bạn đã đến. Như vậy bản đồ của bạn có 3 layers: bản đồ giấy (background layer), phần tô màu (area layer) và cờ đánh dấu (point layer). Map object trong Qlik Sense cũng cung cấp các loại layer tương tự.

Dữ liệu của một biểu đồ bình thường bao gồm dimension và measure. Dữ liệu của map object bao gồm các layer, mỗi layer chỉ chứa các dimension, không có measure. Để thể hiện độ lớn của measure, ta dùng biểu thức (expression) để định nghĩa các thuộc tính (attribute). Kích thước của điểm đánh dấu trên bản đồ, màu sắc của vùng tô màu là ví dụ về các map attribute.

Quay lại với ứng dụng, tạo map object hiển thị GDP theo quốc gia qua các bước sau:

1. Tạo một sheet mới, đặt tên tùy ý. Kéo thả map object mới vào sheet. Hiện map object chưa có layer nào ngoài background mặc định (bản đồ thế giới từ openstreetmap.org).

2. Tạo một layer mới: Edit map object > Layers > Add layer. Chọn Area layer

3. Click vào layer vừa tạo > Data > Add. Chọn filed Country. Sau bước này, nếu bạn thấy các nước trên bản đồ được tô cùng một màu mặc định nghĩa là dữ liệu bản đồ trong field Country là hợp lệ.

4. Vẫn trong layer Country > Colors Chọn các tham số sau:

  • By expression (mặc định: Single color)
  • Expression: Avg(“GDP (current US$)”)
  • Bỏ chọn “The expression is a color code”

5. Để cho phép người dùng drill down dữ liệu theo vùng và quốc gia, tạo 2 filter pane sau trong sheet:

  • Field = Region, Title = Khu vực
  • Field = Country, Title = Quốc gia

Kết quả thu được tương tự như hình dưới. Cũng như các biểu đồ khác, map object được vẽ lại mỗi khi người sử dụng lựa chọn dữ liệu. Ở ví dụ này, khi chọn 2 giá trị “Latin America & Caribbean” và “North America”, chỉ những nước thuộc châu Mỹ được tô màu và map object cũng tự động zoom đến khu vực này.

Hiển thị các measure khác nhau trên cùng một map object

Chúng ta vừa xây dựng bản đồ GDP theo quốc gia. Như mục đích ban đầu của app, ta còn cần phân tích nhiều tiêu chí khác như dân số, tỷ lệ thất nghiệp. Tất nhiên bạn có thể tạo nhiều bản đồ cho từng tiêu chí. Tuy nhiên, đây không phải là một thiết kế tốt vì lặp lại cùng một kiểu biểu đồ nhiều lần gây nhàm chán và tương đối rối mắt. Hơn nữa, khi có thêm tiêu chí mới, bạn cần phải tạo một map object mới để thể hiện tiêu chí đó.

Thiết kế tối ưu trong trường hợp này là sử dụng một bản đồ duy nhất, và cho phép người dùng lựa chọn hiển thị tiêu chí mà họ muốn phân tích. Việc này khá đơn giản ở các biểu đồ khác của Qlik Sense như pie chart, bar chart – bạn luôn có thể tạo Alternative measures, cho phép người sử dụng click vào Exploration menu ExpMenu của chart và chọn measure mình muốn.

Tuy nhiên, map object lại không cung cấp tính năng tạo Alternative measure. Vì vậy, ta sẽ thêm vào 1 Filter pane để người sử dụng lựa chọn tiêu chí hiển thị trên bản đồ. Các bước thực hiện như sau:

1. Vì thông tin về các tiêu chí cần hiển thị chưa có trong data model, ta cần thêm vào một bảng mới chứa các thông tin này. Mở Data Load Editor, bạn sẽ thấy reload script của bạn có sẵn 2 section: Main (chứa các câu lệnh khởi tạo mặc định) và Auto-generated section (chứa các câu lệnh tạo ra bởi thao tác add data từ Data Manager mà bạn đã làm trong bài trước).

2. Tạo một section mới (click dấu + phía trên các section) và đặt một tên gợi nhớ tùy ý. Paste vào section đoạn script sau:

[Indicator]:
LOAD * INLINE [
Indicator, Expression
GDP, Avg("GDP (current US$)")
Tốc độ tăng GDP, Avg("GDP growth (annual %)")
Tỉ lệ thất nghiệp, 'Avg("Unemployment, total (% of total labor force) (modeled ILO estimate)")'
Dân số, Sum(Persons)
Chênh lệch nam/nữ, Sum({<Sex={'Male'}>}Persons)/Sum({<Sex={'Female'}>}Persons)
];

Reload script lúc này tương tự như hình dưới:

Trong đoạn script này, câu lệnh INLINE LOAD thêm vào một bảng trong data model. Bảng này chứa tên tiêu chí cần phân tích, và expression để tính toán tiêu chí đó. Bảng này không nhất thiết phải liên kết với các bảng còn lại trong data model, vì không có mối liên hệ trực tiếp với dữ liệu. Cùng tìm hiểu một chút về các expression này:

  • 3 tiêu chí đầu tiên khá đơn giản: Tập dữ liệu “Selected development indicators” trên DataMarket (xem bài viết trước đã có dạng (Country , Indicator). Mỗi giá trị indicator như GDP tương ứng với 1 Country duy nhất nên chỉ cần dùng 1 hàm aggregation như Avglà đủ (trong trường hợp này Sum, Avg, Max, Min sẽ cho ra kết quả như nhau)
  • Tiêu chí thứ 4 (Dân số): Tập dữ liệu “World population” từ DataMarket có dạng (Country, Sex, Age group, Persons) – tức mỗi dòng là số lượng người ở một quốc gia, thuộc một giới tính, ở một độ tuổi cụ thể. Để có được tổng số dân, ta cần cộng (Sum) các dòng thuộc cùng một Country lại với nhau.
  • Tiêu chí thứ 5 (Chênh lệch nam/nữ): Căn bản vẫn là Sum(Persons)nhưng có thêm điều kiện đặt trong cặp ngoặc nhọn { }. Phần điều kiện này được gọi là Set Analysis – là một kỹ thuật cho phép tính toán expression độc lập với data selection hiện tại trong Qlik Sense. Mình sẽ trình bày rõ hơn về Set Analysis trong một loạt bài khác. Ở đây,  biểu thức này có nghĩa là lấy tổng số nam chia cho tổng số nữ.

4. Sửa color expression của map object (bước 4 trong phần trên) thành biểu thức sau: =$(=Only(Expression)) . Ý nghĩa của biểu thức như sau:

  • Hàm Only(Expression) trả về giá trị đang được lựa chọn của field Expression nếu chỉ có đúng một giá trị được lựa chọn trên field đó
  • Dấu dollar kèm ngoặc đơn $( ): Gọi là dollar sign expansion – đây là kỹ thuật sử dụng một expression hoặc variable để thay thế một đoạn text. Dollar expansion sẽ được thay thế trước khi expression bên ngoài được thực hiện.

5. Thêm Filter pane sau vào sheet: Field = Indicator, Title = Số liệu

6. Để hướng dẫn người sử dụng lựa chọn tiêu chí, tạo một Text & image object bên dưới map object. Trong phần Data của Text object > Add measure > thêm vào biểu thức sau:

=If(GetPossibleCount(Indicator) <> 1, 'Chọn một loại số liệu để hiển thị', 'Biểu đồ ' & Only(Indicator) & ' theo quốc gia')

Ý nghĩa của biểu thức này khá rõ ràng: Khi hàm GetPossibleCount() trên field Indicator trả về giá trị khác 1 (tức người sử dụng không lựa chọn hoặc chọn nhiều hơn 1 giá trị), text object sẽ hiển thị thông báo “Chọn một loại số liệu để hiển thị”. Nếu người sử dụng chọn đúng một tiêu chí, text object sẽ chuyển thành “Biểu đồ <tên tiêu chí> theo quốc gia”.

Map object bây giờ chuyển thành màu xám khi không có hoặc có nhiều hơn một lựa chọn trên filter “Số liệu”. Khi người sử dụng lựa chọn tiêu chí, các quốc gia sẽ được tô màu lại theo tiêu chí đó.

Tương tác trực quan với map object

Một lợi điểm đáng kể khác của map object trong Qlik Sense là người sử dụng có thể tương tác trực tiếp với các đối tượng được hiển thị trên bản đồ qua một số thao tác như sau:

  • Click chọn một điểm trên bản đồ, quốc gia tương ứng tại điểm đó sẽ được lựa chọn trong filed Country
  • Lasso selection (lasso): Cho phép người sử dụng vẽ một đường bao bất kỳ và chọn các nước trong đường bao đó
  • Circle selection (circle): Tương tự như Lasso, nhưng vẽ một vòng tròn

Tận dụng các công cụ trực quan trên giúp người sử dụng thực hiện được các phân tích tương đối phức tạp. Ví dụ, để trả lời câu hỏi “Phân tích tỷ lệ thất nghiệp ở các nước xung quanh Việt Nam (trong bán kính 3000 km)”, ta có thể làm như sau:

  1. Click vào bản đồ để hiện thanh công cụ
  2. Chọn Circle selection (circle) từ thanh công cụ
  3. Click vào Việt Nam và kéo một vòng tròn với bán kính tương đương 3000km
  4. Di chuyển chuột (hover) trên các nước được lựa chọn để xem giá trị cụ thể

Xem hình minh họa sau đây:

Phân tích này cho ta thấy tỷ lệ thất nghiệp ở Việt Nam tương đối thấp trong khu vực (2.7%), so với Trung Quốc (4.7%) và Nhật Bản (2.8%)

Tổng kết

Trong bài viết này, chúng ta đã xây dựng ứng dụng phân tích các chỉ tiêu dân số và kinh tế theo quốc gia, dựa trên tập dữ liệu đã tải về từ Qlik DataMarket trong bài viết trước. Thông qua đó, chúng ta thực hành sử dụng các tính năng sau trong Qlik Sense:

  • GeoField (filed mang dữ liệu địa lý)
  • Cấu hình map object
  • Tương tác trực quan với map object
  • INLINE LOAD (tạo bảng nhanh trong data model với dữ liệu nhập từ bàn phím)
  • Set Analysis
  • Các hàm kiểm tra lựa chọn duy nhất trên một field: Only(), GetPossibleCount()
  • Dollar sign expansion