Ma trận đối xứng và Ma trận không đối xứng – Học Power BI nâng cao
Matrix đối xứng
Matrix là một loại visual thường được sử dụng trong Power BI khi người dùng muốn thể hiện thông tin theo 2 chiều dữ liệu khác nhau. Thông thường matrix của chúng ta là dạng ma trận đối xứng, chúng ta sử dụng một dimension để cấu thành nên hàng và 1 dimension khác để cấu thành nên cột của matrix. Như ví dụ trong ảnh dưới đây là một ma trận đối xứng.
Matrix không đối xứng
Tuy nhiên, thực tế chúng ta có thể gặp các yêu cầu xây dựng matrix không đối xứng, thường gặp trong các báo cáo tài chính, cân đối kế toán. Với dạng visual này, chúng ta không thể kéo 2 dimension cấu thành nên cột và hàng như thông thường. Hình ảnh dưới là minh họa cho 1 matrix không đối xứng ở cột.

Hướng dẫn học Power BI nâng cao – Xây dựng Ma trận không đối xứng
Giả sử chúng ta có một bảng dữ liệu có tên là “SalesTable” bao gồm 2 cột: ⦁ Customerkey: Cột chứa key định danh cho mỗi khách hàng mua dịch vụ. ⦁ OrderDate: Ngày có đặt hàng dịch vụ Mỗi dòng dữ liệu là 1 giao dịch bán hàng. Ngoài ra ta cũng có 1 bảng “Date”, có relationship với bảng “SalesTable” thông qua cột Date và OrderDate.Chúng ta cần tạo một matrix chứa số lượng order bán hàng ra theo từng tháng trong từng năm và cũng thể hiện sự tăng trưởng của năm 2022 so cới số lượng bán được trong ăm 2019.Bước 1
Đầu tiên, chúng ta cần tạo ra 1 measure để đếm số lượng order từ dữ liệu trong bảng “SalesTable”:No.Orders = COUNTROWS(SalesTable)
Quan sát matrix ở trên, với dòng, chúng ta có thể dễ dàng sử dụng cột “Month of year” trong bảng “Date”. Tuy nhiên với cột, chúng ta không thể kéo cột “Fiscal Year” vào. Thay vào đó, chúng ta cần tạo ra một disconnected table, đặt tên nó là “header_table”. Bảng này sẽ chứa các quan sát là header label của matrix mà chúng ta cần tạo. Lưu ý ở đây, 3 giá trị đầu tiên trong cột header_label của bảng chính là 3 năm trong bảng “Date”.
header_table
Để cố định thứ tự xuất hiện trong matrix, chúng ta cần sắp xếp cột header_label theo cột id.
Sắp xếp cột header_label theo cột id
Bước 2
Tiếp đến, chúng ta cần thiết lập relationship giữa bảng “Header_table” và bảng “Date” thông qua cột “header_label” trong bảng “Header_table” và cột “Fiscal Year” trong bảng Date. Tại sao lại là “Fical Year”? Đơn giản chúng ta muốn hiển thị matrix theo “Fiscal Year” nhưng thêm 1 số cột mới như change và %change.
Bước 3
Measure by column header = VAR DisplayItem = SELECTEDVALUE (header_table[id])VAR year_2019 = CALCULATE([No.Orders], all(header_table), header_table[header_label] = "FY2019") VAR year_2020 = CALCULATE([No.Orders], all(header_table), header_table[header_label] = "FY2020") VAR change_2020_vs_2019 = year_2020 - year_2019 VAR percent_change = DIVIDE(change_2020_vs_2019, year_2019, BLANK())*100 RETURN SWITCH ( TRUE (), DisplayItem <= 3, [No.Orders], DisplayItem = 4, change_2020_vs_2019, DisplayItem = 5, percent_change)Bước tiếp theo, chúng ta tạo 1 measure, đặt tên là “Measure by column header” như sau:Trong measure này, chúng ta tạo ra 2 chỉ số change_2020_vs_2019 và percent_change để xác định số lượng order thay đổi giữa năm FY2020 so với FY2019 và tỉ lệ thay đổi là bao nhiêu. Việc tạo ra “DisplayItem” thông qua hàm “SELECTEDVALUE” và sử dụng nó trong hàm “SWITCH” chính là cách mà measure “Dynamic measure by column header” hoạt động.
Bước 4
Cuối cùng, chúng ta tạo matrix. Lựa chọn loại visual là matrix, tại tùy chọn Rows, sử dụng cột “Month of year” trong bảng “Date”. Tại tùy chọn Columns, thay vì sử dụng “Fiscal Year” trong bảng “Date”, ta sử dụng cột “header_label” trong bảng “header_table”. Ở tùy chọn Values, ta sử dụng “Measure by column header”. Kết quả là chúng ta có một ma trận không đối xứng theo cột (matrix with asymmetrical columns).Ở đây, tại mỗi cột, chúng ta DisplayItem trong measure sẽ được xác định. Ví dụ tại FY2018, DisplayItem = 1, với điều kiện DisplayItem <= 3 thì sử dụng [No.Orders]. Tương tự với cột FY2019 và FY2020. Trong khi đó với cột Change 2020 vs 2019, DisplayItem = 4, do đó measure sẽ áp dụng chỉ số change_2020_vs_2019. Với ma trận không đối xứng theo hàng (matrix with asymmetrical rows), chúng ta chỉ cần thay đổi tùy chọn columns, rows trong phần thiết lập visual:
Ma trận không đối xứng theo cột

Thiết lập tùy chọn
Ở đây, tại mỗi cột, chúng ta DisplayItem trong measure sẽ được xác định. Ví dụ tại FY2018, DisplayItem = 1, với điều kiện DisplayItem <= 3 thì sử dụng [No.Orders]. Tương tự với cột FY2019 và FY2020. Trong khi đó với cột Change 2020 vs 2019, DisplayItem = 4, do đó measure sẽ áp dụng chỉ số change_2020_vs_2019. Với ma trận không đối xứng theo hàng (matrix with asymmetrical rows), chúng ta chỉ cần thay đổi tùy chọn columns, rows trong phần thiết lập visual:
Ma trận không đối xứng theo hàng

Thiết lập tùy chọn
Tham khảo kết quả tại file Power BI dưới đây:

Tham gia group ôn thi DA-100 tại: https://www.facebook.com/groups/da100vn Chuỗi Video Hướng dẫn thực hành Lab và sử dụng các tài nguyên của Microsoft: https://www.youtube.com/c/Datapotvn/videos Update tài nguyên từ Microsoft, DA-100 exam questions và exam topics tại Fanpage của Datapot: https://www.facebook.com/DatapotAnalytics/