1. Relationship trong Power BI là gì?
Trước tiên để bắt đầu tìm hiểu về relationship trong Power BI, chúng ta sẽ cùng nhau nghiên cứu một trong những “trụ cột” trên Power BI đó là Data model.
Data model là một tập hợp gồm:
- Các bảng dữ liệu: trong đó bao gồm các cột và các dòng được load vào Power BI
- Các mối quan hệ (relationship) giữa các bảng
Bằng việc nhìn và nghiên cứu Data model, chúng ta có thể dễ dàng tìm hiểu được nghiệp vụ mà data model đó đang thể hiện. Nói cách khác, Data model chính là đang thể hiện mô hình kinh doanh của doanh nghiệp thông qua logic của data.
Việc xây dựng data model hợp lý giúp cho việc làm báo cáo được triển khai nhanh hơn, các hàm tính toán được sử dựng trong báo cáo sẽ xử lý dễ dàng hơn và việc duy trì nâng cấp cũng đơn giản hơn nhiều.
Một Data Model sẽ không được coi là hoàn thiện nếu không xây dựng được các mối quan hệ giữa các bảng. Trong đó có 3 thuộc tính, người dùng chắc chắn phải hiểu và xác định rõ khi tiến hành xây dựng Data Model đó là:
- Loại liên kết (Cardinality)
- Hướng lọc (cross filter direction)
- Liên kết hoạt động/Không hoạt động (active/inactive ralationship)
Trong bài viết này, chúng ta sẽ cùng nhau lần lượt đi qua từng phần về chủ đề này.
2. Tại sao lại cần phải có relationship ở Power BI
Trong Data Model, relationship đóng một vai trò quan trọng và cần thiết. Nếu không có mối liên hệ thì data model không còn có thể được gọi là data model nữa, mà chỉ là tập hợp của các bảng.
Dưới đây là một ví dụ minh họa về ý nghĩa của việc tạo mối liên hệ giữa 2 bảng Products và Sales để xây dựng Data Model:
Trước khi có relationship
Với trường hợp chưa có mối liên hệ với nhau, Power BI sẽ ngầm định là 2 bảng không liên quan gì nhau cả và các công thức tính toán mà liên quan tới 2 bảng sẽ chỉ thể hiện cùng 1 giá trị. Ví dụ cụ thể ở hình ảnh bên dưới:

Bằng việc tạo 1 visual để thể hiện doanh thu (revenue) tính từ cột SaleAmount trong bảng Internet Sales theo từng Category của bảng Product: Toàn bộ các loại Category trong visual đều thể hiện cùng một giá trị (ở đây là giá trị total revenue của toàn bộ bản Internet Sales).

Sau khi có Relationship

Với trường hợp chúng ta đã xây dưng mối liên hệ với nhau giữa 2 bảng . Ở trường hợp trên là mối quan hệ one – many (liên kết thông quan cột Product Key) và chiều lọc dữ liệu là Single (chiều dữ liệu từ bảng Product tới bảng Internet Sales)
Sau khi thiết lập các thuộc tính như trên, Power BI đã hiểu được rằng 2 bên trên có mối liên hệ với nhau và bây giờ là hình ảnh visual thể hiện doanh thu theo từng loại Category sau khi 2 bảng đã có liên kết

Sau khi mối quan hệ đã được xác lập, các dữ liệu đã được lọc từ bảng Product sang bảng Sales, các dữ liệu tính toán trong bảng Internet Sales sẽ được lọc theo trường Category và tính toán theo công thức Revenue để thể hiện kết quả ra visual.
Như vậy mọi người có thể thấy việc tạo mối quan hệ giúp chúng ta có thể filter dữ liệu giữa các bảng với nhau theo 1 chiều hoặc nhiều chiều phân tích.
3. Cách tạo ra các relationship
Để có thể tạo ra các mối quan hệ, có 3 cách thường dùng là:
- Cách 1: Tự động xây dựng Relationship trong lúc load dữ liệu
Trong phần Modeling, lựa chọn Manage relationships > Autodetect.\

Lưu ý:
Tuy nhiên, các bạn lưu ý việc tạo mối quan hệ bằng tính năng Autodetect có thể tạo ra các liên hệ không đúng hoặc không phù hợp với yêu cầu của mình nên hãy lưu ý để kiểm tra lại Data Model.
- Cách 2: Tạo quan hệ trong phần màn hình chính (report view)
Trên thẻ Modeling, trong nhóm Relationships, chọn Manage Relationships.

Trong cửa sổ Manage Relationships, chúng ta lựa chọn phần “New” ở bảng dưới.

Trong cửa sổ Create Relationship, trong danh sách thả xuống đầu tiên, chọn bảng Product, trong danh sách thả xuống thứ hai, chọn bảng Internet Sales.

Cách 3: Tạo Relationship ngay phần Model view
Bằng động tác kéo thả trực tiếp ở phần Model View, bạn có thể tạo mối quan hệ giữa hai bảng Product và Internet Sales bằng cách kéo cột Product Key từ bảng Product sang cột Product Key bảng Internet sales.
Tiếp tục thiết lập các thông tin về Cardinality và Filter Direction trước khi xác nhận OK.

4. Xác định thuộc tính cardinality trong relationship
Trong Power BI, cardinality là thuộc tính thể hiện mối quan hệ tương quan giữa hai bảng dữ liệu trong mô hình. Thuộc tính này mô tả số lượng các giá trị duy nhất (unique values) trong 1 cột dữ liệu của 1 bảng liên kết tới số lượng các gía trị duy nhất tại bảng khác.
Cardinality trong Power BI có ba loại chính:
Quan hệ 1-1 (one to one): Đây là loại quan hệ mà một giá trị duy nhất ở 1 cột của 1 bảng tương ứng với 1 giá trị duy nhất trong 1 cột của bảng liên quan. Ví dụ, nếu bạn có một bảng “Product ID” với mỗi sản phẩm có một mã ID duy nhất, và bảng “Product” cũng là mỗi sản phẩm có một mã ID duy nhất và giống với mã ID trong bảng Product Id thì cadinality từ bảng “ProductID” đến bảng “Product” là 1-1.

Quan hệ 1-n (one to many) hoặc n-1 (many to one): Đây là loại quan hệ phổ biến và được sử dụng nhất trong Power BI. Một giá trị duy nhất trong cột của bảng gốc tương ứng với nhiều giá trị trong cột của bảng liên quan. Ví dụ nếu bạn có một bảng “Khách hàng” với mỗi khách hàng có một mã duy nhất, trong khi ở bảng Internet Sales có nhiều đơn hàng liên quan đến mỗi khách hàng, thì cardinality từ bảng “Khách hàng” đến bảng “Đơn hàng” là một-nhiều.

Quan hệ n-n (many to many): Đây là loại quan hệ mà nhiều giá trị trong cột của 1 bảng tương ứng với nhiều giá trị trong cột của bảng liên quan. Đây là mối quan hệ cần phải đặc biệt lưu ý cần thân. Ví dụ điển hình là một đơn hàng có nhiều đợt giao hàng và mỗi đợt giao hàng giao nhiều kiện hàng.

5. Xác định được chiều (filter cross direction)
Mỗi data model khi xây dưng kết nối giữa 2 bảng với nhau phải xác định được chiều lọc phân tích (cross filter direction). Lựa chọn này sẽ quyết định hướng mà bộ lọc truyền đi từ bảng này sang bảng khác (được thể hiện bằng dấu mũi tên giữa đường line kết nối giữa 2 bảng.
Chúng ta vào tab “Modeling” phần “Manage Relationships”. Trong cửa sổ hiện thị “Edit Relationship” ở mục cuối “Cross filter direction”.

Sau khi tiến hành lựa chọn, Data model sẽ thể hiện một mũi tên thể hiện chiều lọc. Ở trong trường hợp ảnh dưới, loại hình lọc là 1 chiều “Single” với chiều lọc là từ bảng Customer lọc sang bảng Internet Sales.

“Cross filter direction” có 2 lựa chọn:
Hướng bộ lọc một chiều (Single): Đây là hướng lọc chủ yếu được khuyến khích sử dụng. Hướng lọc 1 chiều sẽ lọc từ 1 bảng tới bảng khác (từ bảng dim tới bảng fact) (với mối quan hệ 1-n, với lựa chọn hướng lọc một chiều, Power Bi sẽ mặc định chạy theo chiều từ bảng one tới bảng many). Ví dụ: Bảng Customer có quan hệ 1-n với bảng sales và hướng lọc sẽ là từ bảng Customer tới bảng Sales, tương tự với bảng Product.

Hướng bộ lọc hai chiều (Both hoặc BI-directional): Hướng lọc both hay Bi-directional là một hướng lọc không được khuyến khích sử dụng, do dễ gây ra sự mơ hồ trong data model. Hướng bộ lọc hai chiều là việc 2 bảng có thể linh hoạt lọc cho bảng còn lại. Ví dụ, bảng Customer có thể lọc thông tin trong bảng Sales và ngược lại bảng Sales cũng có thể lọc thông tin của bảng Customer.

Lưu ý:
- Đối với mối quan hệ 1-1: hướng bộ lọc luôn sẽ mặc định là 2 chiều (both filter).
- Đố với mối quan hệ 1-n hoặc n-n (one to many hay many to many): tùy thuộc vào mô hình doanh nghiệp cũng như các yêu cầu tính toán, chúng ta có thể chọn hướng chiều lọc là single hoặc both.
- Các mối quan hệ bi-directional có thể tác động tiêu cực tới hiệu suất tính toán của Power BI, đồng thời gây ra sự mơ hồ trong nhiều trường hợp nên mọi người lưu ý cẩn thận khi sử dụng. Tìm hiểu kỹ hơn về BI-directional relationship tại đây.
6. Active/Inactive relationship
Trong Power BI, thuộc tính Active/Inactive relationship là một thuộc tính sử dụng khi 2 bảng được liên kết với nhau thông quan nhiều mối liên hệ giữa các cột với nhau, trong đó có 1 mối liên hệ được hiểu là Active, các mối liên hệ còn lại là Inactive.
Ví dụ là bảng Date vs bảng Internet Sales liên kết với nhau theo 3 mối liên hệ (1-n). Trong đó:
- Sales | OrderDate to Date | Date <Active>
- Sales | ShipDate to Date | Date <Inactive>
- Sales | DueDate to Date | Date <Inactive>

Trong Data Model, Power BI yêu cầu các relationship giữa các bảng dữ liệu phải là duy nhất. Tuy nhiên, trong thực tế có những bài toán, nơi chúng ta cần phải tính toán dựa theo nhiều góc độ và dựa trên các mối liên hệ khác nhau. Ví dụ: Với ví dụ bên trên, chúng ta có thể lần lượt tính doanh thu theo các góc độ thời gian là Order Date; Tính doanh thu theo Shipped Date hoặc tính toanh thu theo Due Date
Thuộc tính Active/inactive relationship cho phép bạn giải quyết vấn đề này bằng cách cho phép bạn lựa chọn một mối quan hệ có thể được hoạt động hoặc không hoạt động tùy thuộc vào yêu cầu của bài toán.
Tuy nhiên, như mình đã nhấn mạnh ở trên, Power BI yêu cầu các quan hệ giữa các bảng dữ liệu phải là duy nhất, nên khi bạn muốn điều chỉnh active một liên hệ nào, điều đầu tiên cần phải làm là inactive mối liên hệ cũ đi, trước khi thiết lập mối liên hệ active.

Ngoài ra, có một cách khác nâng cao hơn để xử lý bài toán nhiều mối liên hệ giữa 2 bảng đó là tận dụng sức mạnh của hàm DAX: USERELATIONSHIP để linh hoạt tính toán và xử lý mối liên hệ giữa 2 bảng. Trong một bài viết khác, chúng mình sẽ cùng tìm hiểu về nó nhé.
Kết luận
Việc hiểu và áp dụng các mối quan hệ trong Data model là một yếu tố cực kỳ quan trọng để tạo ra một mô hình dữ liệu hiệu quả và tối ưu. Bằng cách liên kết các bảng dữ liệu và xác định rõ ràng các thuộc tính cho mỗi mối quan hệ, chúng ta có thể cùng nhau xây dựng được một data model linh hoạt và hiệu quả, mang lại lợi ích to lớn cho việc ra đánh giá và ra quyết định kinh doanh.
Vậy khi nào bạn muốn xây dựng mối quan hệ hiệu quả và tối ưu cho data model trong Power BI, hãy quay lại đọc bài viết này một lần nữa nhé. Bạn cũng có thể tìm đọc các bài viết khác về chủ đề này tại đây.
Chuỗi video hướng dẫn tạo data model từ Microsoft: https://learn.microsoft.com/en-us/training/modules/design-model-power-bi/