Chào các bạn,
Trong bài viết hôm nay tôi sẽ chia sẻ một số phương pháp tốt nhất (best practices) khi xây dựng mô hình dữ liệu (data modeling) trong Microsoft Power BI. Các phương pháp này sẽ phát huy tác dụng tốt nhất khi project của các bạn bắt đầu scaling ( dataset có thể mở rộng tới hàng triệu dòng). Nếu dữ liệu của bạn nhỏ (dataset khoảng vài ngàn record) thì có thể bạn sẽ không thấy sự khác biệt nhiều lắm. Microsoft Power BI giúp người dùng có thể dễ dàng để bắt đầu, nhưng để có thể master được Power BI thì bạn thực sự cần hiểu rõ và có kinh nghiệm sử dụng những kỹ thuật cao hơn như M Query và DAX (Data Analysis Expression) language. Trong đó, việc có thể thành thạo về DAX sẽ đòi hỏi ở bạn rất nhiều thời gian để thực hành.
About Author

I’m Viet, the founder of this website with 8+ years experience in data analytics. My sharing is focus on data, which specialise on both Analytics and Business Intelligence platform as well as Data Science and Machine Learning platform.
Xây dựng mô hình dữ liệu tốt (Data Modeling)
Tình huống
- Một mô hình dữ liệu thiếu hiệu quả sẽ làm chậm tốc độ hiển thị của báo cáo, thậm chí là với một bộ dữ liệu nhỏ.
Đề xuất giải pháp
- Xây dựng một mô hình nhỏ nhất có thể.
- Mô hình dữ liệu dạng star schema sẽ hỗ trợ tốt cho việc phân tích sau này.
- Các mối quan hệ của các bảng dữ liệu phải được xây dựng một cách có mục đích và ý đồ rõ ràng.
Kiểm tra kiến thức của bạn
Mô hình dạng star schema là gì?
Lược đồ hình sao (star schema) bao gồm một hoặc nhiều bảng dữ kiện (fact table) tham chiếu đến bất kỳ số lượng bảng thứ nguyên (dimension table) nào.
Bạn có thể đọc thêm cách định nghĩa của Microsoft về star schema ở đường link bên dưới.
https://docs.microsoft.com/en-us/power-bi/guidance/star-schema?source=docs
Di chuyển việc tính toán tới nguồn dữ liệu
Bối cảnh
- Bảng dữ liệu có nhiều calculated column với cardinality cao.
Tại sao điều này không tốt?
- Các calculated column không nén dữ liệu tốt như column thông thường.
Đề xuất giải pháp
- Thực hiện việc tính toán trong Power Query sẽ giúp kích thước dữ liệu giảm xuống đáng kể.
Kiểm tra kiến thức của bạn
Cardinality là gì?
Cardinality là phép nối giữa hai bảng thể hiện mối quan hệ số giữa các hàng của một bảng với các hàng của bảng còn lại.
Cardinality là cách quản lý mối quan hệ giữa các bảng dữ liệu.
Bạn có thể đọc thêm link bên dưới để hiểu hơn cách tạo và quản lý mối quan hệ giữa các bảng dữ liệu trong Microsoft Power BI.
https://docs.microsoft.com/en-us/power-bi/transform-model/desktop-create-and-manage-relationships
Xóa các bảng và cột dữ liệu không sử dụng đến
Bối cảnh
- Mô hình chứa các bảng/cột không sử dụng đến cho báo cáo/phân tích hoặc tính toán
Tại sao điều này không tốt?
- Tăng kích thước mô hình dữ liệu
- Tăng thời gian tải dữ liệu vào bộ nhớ
- Tăng refresh time
Tránh việc sử dụng các cột có độ chính xác/cardinality cao
Bối cảnh
- Mô hình dữ liệu chứa các cột có độ chính xác cao hơn cần thiết. Ví dụ như ngày giờ chính xác tới mili giây, trọng lượng chính xác tới 6 số thập phân.
- Mô hình dữ liệu chứa các cột với số lượng các giá trị unique cao.
Tại sao điều này không tốt?
- Độ nén dữ liệu thấp hơn khi độ chính xác/cardinality cao.
- Tăng thời gian load dữ liệu vào bộ nhớ
- Tăng refresh time
Đề xuất giải pháp
- Xóa các cột nếu cần thiết
- Giảm độ chính xác
- Chia ngày giờ thành hai cột: ngày và giờ
Tránh sử dụng chuỗi (Strings), sử dụng số nguyên (Integers) nếu có thể
Tại sao điều này không tốt?
- Chuỗi sử dụng "dictionary encoding", số nguyên sử dụng "run length encoding" - một phương pháp giúp giảm kích thước dữ liệu hiệu quả hơn.
Đề xuất giải pháp
- Kiểm tra kiểu dữ liệu và đặt về kiểu số nguyên nếu chắc chắn dữ liệu thuộc về kiểu số.
Sử dụng mã định danh số nguyên (Integer Surrogate Keys), tiền-sắp xếp (pre-sorting) mã định danh trước khi load dữ liệu vào mô hình
- Power BI nén các dòng trong từng cụm, mỗi cụm chứa hàng triệu dòng được nén.
- Kiểu số nguyên sử dụng Run Length Encoding.
- Sắp xếp sẽ cực đại hóa khả năng nén khi mã hóa bằng cách giảm độ rộng của dữ liệu trong từng cụm.
Cẩn thận khi sử dụng quan hệ 2 chiều (Bi-Directional Relationships)
Bối cảnh
- Hầu hết các mối quan hệ của mô hình dữ liệu là 2 chiều
Tại sao điều này không tốt?
- Sử dụng filters/slicers sẽ khiến quá trình phải xử lý nhiều mối quan hệ và làm quá trình chậm đi.
- Một vài filter hầu như không tạo thêm giá trị nào cho việc phân tích
Đề xuất giải pháp
- Chỉ sử dụng quan hệ 2 chiều khi mà bối cảnh thực sự đòi hỏi.
Sử dụng chế độ Summarization mặc định
Bối cảnh
- Các cột có dữ liệu kiểu số trong mô hình mang tính thuần thông tin ( ví dụ số tài khoản).
- Chế độ summarization mặc định là phép cộng.
Tại sao điều này không tốt?
- Power BI sẽ cố gắng xử lý phép cộng khi cột được thả vào visual.
- Các bảng/ma trận có thể xử lý chậm hơn.
Đề xuất giải pháp
- Đặt chế độ mặc định là None.
Bạn có muốn kiểm tra kiến thức về Power BI của mình không?
Hãy chia sẻ nếu thấy bài viết có ích nhé các bạn