Quản lý mối quan hệ dữ liệu đóng vai trò then chốt để xây dựng một mô hình dữ liệu tốt trong Power BI. Trong bài viết lần này, mình sẽ cung cấp cho các bạn những thông tin đầy đủ và ngắn gọn nhất về các loại quan hệ trong Power BI. Hy vọng rằng sau bài viết lần này, các bạn sẽ nắm vững được tốt thông tin về các loại quan hệ dữ liệu, từ đó giúp đưa ra những quyết định nhanh chóng trong việc quản lý các các loại quan hệ dữ liệu trong Power BI.
Các nội dung chính
Các loại quan hệ dữ liệu trong Power BI
Quan hệ many-to-one (*:1) và one-to-many (1: *)
- Mô tả mối quan hệ mà mỗi dữ liệu xuất hiện trong bảng này đều tương ứng với một dữ liệu quy nhất ở bảng kia.
- Mô tả mối quan hệ giữa bảng DIM và bảng FACT
- Là loại quan hệ dữ liệu thường dùng nhất và được mặc định khi bạn tạo relationship.
Một ví dụ đơn giản của loại quan hệ này là quan hệ giữa hai bảng CountryName và Territory, bạn sẽ thấy có nhiều Territory nhưng lại chỉ ứng với một Country duy nhất.

- Mô tả mối quan hệ mà mỗi dữ liệu xuất hiện trong các cột đều chung giữa hai bảng
- Yêu cầu cả hai bảng chứa các giá trị unique
- Không nên dùng bởi vì nó chứa các thông tin thừa và sẽ dẫn đến việc thiết kế bị sai. Thay vào đó, bạn nên kết hợp các bảng này vào với nhau.
Quan hệ one-to-one (1-1)
Một ví dụ mà các bạn có thể tham khảo ở đây là bạn có productID ở hai bảng khác nhau. Thay vì tạo mối quan hệ 1-1 thì ta nên kết hợp hai bảng này lại với nhau.

Quan hệ many-to-many
- Mô tả mối quan hệ dữ liệu có nhiều giá trị chung giữa hai bảng.
- Không yêu cầu các giá trị unique trong một trong hai bảng trong một mối quan hệ.
- Không nên dùng: việc thiếu các giá trị unique sẽ dẫn đến sự khó hiểu và người dùng của bạn có thể không biết cột giá trị nào đang đề cập đến cái gì.
Ví dụ như hình dưới đây thể hiện mối quan hệ many-to-many giữa bảng Sales và Order dựa trên cột OrderDate, bởi vì có thể nhiều lần mua sẽ có cơ số đơn hàng liên quan. Khi đó, người dùng sẽ bị khó hiểu bởi vì cả hai bảng đều có ngày đặt hàng giống hệt nhau.

Cách tạo mối quan hệ dữ liệu many-to-many
Giả dụ như các bạn đang được giao nhiệm vụ xây dựng báo cáo phân tích về budget của từng khách hàng và từng tài khoản, như vậy bạn sẽ có nhiều khách hàng có chung tài khoản, và bên cạnh đó cũng sẽ có những khách hàng có nhiều tài khoản. Ở đây, mình đang nói đến việc mà các bạn cần tạo, đó là một mối quan hệ many-to-many.
Để tạo ra mối quan hệ này, hãy đi đến Manage Relationship -> New. Ở cửa sổ vừa hiện ra, các bạn hãy tạo một mối quan hệ giữa cột CustomerID của bảng CustomerTable và của bảng Accounttable. Mối quan hệ được chọn sẽ có cardinality là many-to-many, và loại filter là both direction. Ngay lập tức, bạn sẽ nhận được cảnh báo nói rằng bạn chỉ nên sử dụng loại relationship này nếu bạn hy vọng là không cột nào trong số hai cột được nối có chứa các giá trị unique, bởi nó sẽ lấy cả những giá trị mà bạn không hề mong muốn. Trong trường hợp này, nếu bạn mong muốn filter từ cả hai đầu, hãy chọn bi-directional cross-filtering.
Nhấn OK và chỉ với vài thao tác đơn giản, bạn đã tạo xong một mối quan hệ dữ liệu many-to-many.
Bạn có thể đọc thêm ở Many-to-many relationships in Power BI.
Cross-filter direction
Khi làm việc, dữ liệu có thể được filter từ một phía, gọi là single direction hoặc là cả hai phía, gọi là both direction của mối quan hệ.
Với cross-filter:
- Chỉ một bảng trong mối quan hệ có thể được sử dụng để lọc dữ liệu. Ví dụ: Bảng 1 có thể được lọc theo Bảng 2, nhưng Bảng 2 không thể được lọc theo Bảng 1.
- MẸO: Hãy làm theo hướng của mũi tên chỉ mối quan hệ dữ liệu giữa các bảng để biết bộ lọc sẽ chảy theo hướng nào. Bạn thường muốn các mũi tên này trỏ đến bảng dữ kiện của mình.
- Đối với mối quan hệ one-to-many hoặc many-to-one, hướng lọc cross-filter sẽ từ phía “one”, nghĩa là quá trình lọc sẽ diễn ra trong bảng có các giá trị duy nhất.
Với both cross-filter directions (có thể gọi là bi-directional cross-filtering):
- Một bảng trong mối quan hệ dữ liệu có thể được sử dụng để lọc bảng còn lại. Ví dụ, một bảng thứ nguyên có thể được lọc qua bảng dữ kiện và bảng dữ kiện có thể được lọc qua bảng thứ nguyên.
- Bạn có thể có hiệu suất thấp hơn khi sử dụng tính năng bi-directional cross-filtering với các mối quan hệ many-to-many.
Một cảnh báo liên quan đến bi-directional cross-filtering, các bạn hãy lưu ý rằng không nên bật các mối quan hệ này trừ khi bạn đã hiểu đầy đủ các phân nhánh của việc làm như vậy. Bởi việc kích hoạt nó có thể dẫn đến tình trạng không rõ ràng, lấy mẫu quá mức, kết quả không mong muốn và khả năng suy giảm hiệu suất của cả quá trình.
Mối quan hệ giữa Cardinality và Cross-filter direction
Đối với các mối quan hệ one-to-one, tùy chọn duy nhất khả dụng là both cross-filter directions. Dữ liệu ở cả hai cột của mối quan hệ này là các giá trị duy nhất và riêng biệt.
Ví dụ: Bạn có thể lọc trên một ID sản phẩm và được trả lại một Sản phẩm duy nhất, hoặc bạn có thể lọc trên một Sản phẩm và được trả lại một ID sản phẩm duy nhất. Đối với mối quan hệ many-to-many, bạn có thể chọn lọc theo một hướng (single) hoặc theo cả hai hướng (both) bằng cách sử dụng lọc chéo hai hướng.
Sự mơ hồ liên quan đến both cross-filter directions được khuếch đại trong mối quan hệ many-to-many vì nhiều đường truyền bộ lọc sẽ tồn tại giữa các bảng khác nhau. Nếu bạn tạo một measure, phép tính hoặc bộ lọc, các hậu quả mà chúng ta không mong muốn có thể sẽ xảy ra khi dữ liệu của bạn đang được lọc và tùy thuộc vào mối quan hệ mà công cụ Power BI chọn khi áp dụng bộ lọc, kết quả cuối cùng có thể sẽ khác.
Tình huống này cũng đúng với các mối quan hệ dữ liệu hai chiều và đó là lí do tại sao các bạn đọc hãy nên thận trọng khi sử dụng chúng. Vì lý do này, các mối quan hệ many-to-many và / hoặc các mối quan hệ hai chiều rất phức tạp. Trừ khi bạn chắc chắn dữ liệu của mình trông như thế nào khi được tổng hợp, nếu không các loại mối quan hệ dữ liệu mở với nhiều hướng lọc này có thể đưa đến nhiều đường truyền qua dữ liệu.