Ở bài viết trước chúng ta đã xây dựng được một mô hình BI cơ bản với BigQuery và Data Studio theo kiến trúc như sau:
Hệ thống report có 2 người sử dụng chính là Report Viewer – chỉ có quyền xem report, và Report Editor – có quyền chỉnh sửa report.
Mô hình này có một hạn chế lớn: Report Viewer có thể xem toàn bộ report với đầy đủ thông tin – chưa có phân quyền dữ liệu theo viewer. Thực tế chúng ta cần phân quyền dữ liệu theo phòng ban, theo cấp bậc. Mỗi phòng ban chỉ được xem dữ liệu thuộc về phòng ban đó, quản lý cấp cao có thể xem dữ liệu tổng hợp của tất cả phòng ban mà mình quản lý. Về cơ bản là như thế. Bên cạnh đó, Report Viewer chỉ nên tương tác với Data Studio, hạn chế tối đa quyền trên BigQuery.
Vậy chúng ta phải làm sao để giải quyết bài toán này?
Hãy cùng xem mô hình nâng cấp như sau:
Sự khác biệt đến từ cách thức chúng ta tổ chức dataset: thay vì chỉ một dataset lưu trữ toàn bộ dữ liệu, chúng ta sử dụng 4 dataset với các vai trò khác nhau:
– *_raw: lưu trữ toàn bộ dữ liệu gốc
– *_resource: chỉ lưu trữ dữ liệu cần thiết sử dụng cho report (đã được xử lý, phân tích)
– *_permission: lưu trữ cơ chế phân quyền dữ liệu
– *_gate: cổng giao tiếp với BI report tool
Các bạn có thể thấy rất rõ ràng là connector của Data Studio chỉ giao tiếp với dataset cz_report_gate
. Cùng xem trong cz_report_gate
có những gì?
Chỉ có view và hoàn toàn không có table! Những view này được tạo thành từ các table trong 2 dataset cz_report_resource
và cz_report_perrmission
:
Hãy cùng xem kỹ hơn cách tạo view cz_report_gate.v_FACT_FULL_TRANS
cũng như bảng cz_report_permission.PERMISSION
:
Key word trong giải pháp này đó là sử dụng function SESSSION_USER()
để lấy được email của account đang truy cập vào dataset cz_report_gate
. Trong ví dụ này mình chỉ cấp quyền truy cập dữ liệu cho 2 user thông qua bảngcz_report_permission.PERMISSION
: một user được phép truy cập đến 4 region trong khi user còn lại chỉ được truy cập 1 region. Và dĩ nhiên 2 user này chỉ có quyền read tối thiểu trên dataset cz_report_gate
.
Tới đây chúng ta lại phát sinh một vấn đề lớn: đó là làm thế nào để 2 user này thông qua viewcz_report_gate.v_FACT_FULL_TRANS
có thể đọc dữ liệu của 2 table cz_report_permission.PERMISSION
và cz_report_resource.FACT_FULL_TRANS
mà không được phép truy cập 2 dataset chứa 2 table này?
Giải pháp đó là sử dụng authorized views, và chúng ta có một hô hình đầy đủ như sau:
Các bạn lưu ý khi tạo connector giữa BigQuery & Data Studio chúng ta cần chọn chế độ Viewer’s Credentials.
Kết quả chúng ta có được cùng một report nhưng view của user khác nhau theo cấu hình phân quyền:
Các bạn hãy thử làm lại demo như mình vừa hướng dẫn để hiểu kĩ hơn về mô hình này nhé.
Hẹn gặp lại các bạn trong bài viết tiếp theo!