Bạn có thể nối các bảng (join tables) bằng cách sử dụng mối quan hệ many-many trong Power BI Desktop. Bạn dễ dàng và trực quan hơn trong việc tạo các mô hình dữ liệu chứa hai hoặc nhiều nguồn dữ liệu. Mối quan hệ với bản chất (cardinality) là many-many là một phần của tính năng của composite models trong Power BI Desktop.
Một mối quan hệ với bản chất many-many trong Power BI Desktop là tập hợp của một trong ba tính năng:
- Composite models: Một composite model cho phép một báo cáo (report) có nhiều hơn hai kết nối dữ liệu. Trong đó, bao gồm các kết nối DirectQuery hoặc Import, trong bất kỳ kết hợp nào.
Tham khảo: Sử dụng composite models trong Power BI Desktop
- Mối quan hệ many-many: Với composite models, bạn có thể thiết lập mối quan hệ với bản chất many-many giữa các bảng. Cách tiếp cận này loại bỏ các yêu cầu đối với các giá trị duy nhất trong bảng. Nó cũng loại bỏ các cách giải quyết trước đó, chẳng hạn như chỉ giới thiệu các bảng mới để thiết lập mối quan hệ.
- Chế độ lưu trữ: Bạn có thể chỉ định trực quan nào yêu cầu truy vấn đến các nguồn dữ liệu back-end. Các trực quan không yêu cầu một truy vấn được nhập ngay cả khi chúng dựa trên DirectQuery. Tính năng này giúp cải thiện hiệu suất và giảm tải back-end. Trước đây, ngay cả những hình ảnh đơn giản như slicer cũng bắt đầu các truy vấn được gửi đến các nguồn back-end.
1. Mối quan hệ many-many giải quyết được điều gì?
Trước khi mối quan hệ many-many xuất hiện, các bảng đã được xác định mối quan hệ trong Power BI. Ít nhất một trong các cột của bảng liên quan đến mối quan hệ phải chứa các giá trị duy nhất. Tuy nhiên, thường không có cột nào chứa giá trị duy nhất.
Ví dụ, hai bảng có thể có cùng một cột là Country nhưng giá trị của Country không phải là duy nhất trong hai bảng. Để nối các bảng như vậy, bạn phải có một giải pháp như giới thiệu các bảng bổ sung có chứa các giá trị duy nhất. Với các mối quan hệ many-many, bạn có thể nối nhiều bảng như vậy
2. Sử dụng mối quan hệ many-many cardinality
Khi xác định một mối quan hệ giữa hai bảng trong Power BI, bạn cần xác định cardinality giữa hai bảng. Ví dụ, mối quan hệ giữa ProductSales và Product – sử dụng các cột ProductSales[ProductCode] và Product[Product[Code] sẽ được xác định là Many-1. Bởi vì mỗi sản phẩm sẽ có nhiều doanh số (sales) và cột trong bảng Product (ProductCode) là duy nhất. Khi bạn xác định cardinality của một bảng là Many-1, 1-Many hoặc 1-1, Power BI xác thực nó do đó cardinality bạn chọn sẽ khớp với dữ liệu thực tế. Dưới đây là ví dụ về một mô hình đơn giản.
Bây giờ, hãy hình dung bảng Product hiển thị hai dòng như sau:
Tiếp theo là bảng Sales chứa 4 dòng, gồm 1 dòng cho sản phẩm C. Do lỗi tham chiếu toàn vẹn, hàng sản phẩm C không tồn tại trong bảng Product.
ProductName và Price (từ bảng Product), cùng với tổng số lượng (Qty) cho mỗi sản phẩm (từ bảng ProductSales), sẽ được hiển thị như sau:
Trong hình ảnh trước, hàng ProductName trống được liên kết với doanh số bán sản phẩm C. Hàng trống này được giải thích như sau:
- Bất kỳ hàng nào trong ProductSales mà không có hàng tương ứng nào tồn tại trong bảng Product. Có một vấn đề về tính toàn vẹn tham chiếu, như đối với sản phẩm C.
- Bất kỳ hàng nào trong bảng ProductSales có cột khóa ngoại là rỗng.
Vì những lý do này, hàng trống trong cả hai trường hợp đều tính đến doanh số bán hàng trong đó ProductName và Price không xác định.
Đôi khi, các bảng được nối với nhau bằng hai cột, nhưng không cột nào là duy nhất. Ví dụ như hai bảng dưới đây:
- Bảng Sales hiển thị dữ liệu doanh số theo tiểu bang (State) và mỗi hàng chứa số tiền bán hàng cho loại bán hàng ở tiểu bang đó. Các tiểu bang bao gồm CA, WA và TX.
- Bảng CityData hiển thị dữ liệu trên mỗi thành phố, bao gồm dân số và tiểu bang (như CA, WA và New York).
Một cột cho State hiện có trong cả hai bảng. Thật hợp lý khi bạn muốn báo cáo về tổng doanh số bán hàng theo tiểu bang và tổng dân số của mỗi bang. Tuy nhiên, vấn đề là cột State không phải là duy nhất trong cả hai bảng.
3. Giải pháp “cũ”
Trước bản cập nhật tháng 7 năm 2018 của Power BI Desktop, bạn không thể tạo mối quan hệ trực tiếp giữa các bản. Giải pháp được sử dụng lúc đó là:
- Tạo một bảng thứ ba chỉ chứa duy nhất State IDs. Bảng có thể là bất kỳ hoặc tất cả:
- Một calculated table (được xác định bằng cách dùng DAX).
- Một bảng dựa trên một truy vấn được xác định trong DirectQuery, có thể hiển thị IDs duy nhất được rút ra từ một trong các bảng.
- Bộ kết hợp đầy đủ.
- Sau đó liên kết hai bảng gốc với bảng mới bằng cách dùng mối quan hệ Many-1.
Bạn có thể để bảng giải pháp hiển thị hoặc ẩn nó đi để nó không xuất hiện trong danh sách Fields. Nếu bạn ẩn bảng, các mối quan hệ Many-1 sẽ thường được đặt để lọc trong cả hai hướng và bạn có thể dùng trường State từ một trong hai bảng. Lọc chéo sau đó được truyền sang bảng khác, như hình ảnh sau:
Một hình ảnh hiển thị State (từ bảng CityData) cùng với tổng dân số (Population) và tổng doanh số (Sales) như dưới đây:
Lưu ý: bởi vì state từ bảng CityData được sử dụng trong giải pháp này, chỉ có states trong bảng được liệt kê, nên nó sẽ không có TX. Ngoài ra, không giống như mối quan hệ Many-1, trong khi tổng hàng bao gồm tất cả doanh số bán hàng (Sales) bao gồm cả TX, chi tiết không bao gồm hàng trống bao gồm các hàng không khớp. Tương tự, không có hàng trống nào bao gồm Sales có giá trị rỗng cho State.
Giả sử bạn thêm City vào trực quan, dù biết dân số mỗi thành phố (City) nhưng Sales hiển thị cho City chỉ đơn giản lặp lại Sales cho State tương ứng. Kịch bản này thường xảy ra khi nhóm cột không liên quan đến một số measure tổng hợp như dưới đây:
Hình dung bạn xác định bảng Sales mới là sự kết hợp của tất cả các States ở đây và chúng tôi hiển thị bảng này trong danh sách Fields. Hình ảnh tương tự sẽ hiển thị State (trên bảng mới), tổng doanh số (Population) và tổng doanh số (Sales):
Như bạn thấy, TX với dữ liệu Sales nhưng không biết dữ liệu Population và New York biết dữ liệu Population nhưng không có dữ liệu Sales. Giải pháp này không tối ưu và có nhiều vấn đề, đây là lý do mà chúng ta cần đến mối quan hệ many-many sẽ được nhắc đến trong phần tiếp theo.
Kết thúc phần đầu tiên, bạn đã biết được mối quan hệ many-many giải quyết điều gì, cách sử dụng mối quan hệ many-many và giải pháp được dùng trước đây. Tuy nhiên, đáng tiếc là giải pháp cũ tồn tại nhiều vấn đề và không thật sự tối ưu. Đừng quên theo dõi phần tiếp tại website bacs.vn để biết cách sử dụng mối quan hệ many-many thay cho giải pháp cũ.
Nguồn tham khảo:
Đọc tiếp phần 2 tại đây nhé: Áp dụng mối quan hệ many-many trong Power BI Desktop (Phần 2)
Nhu cầu đào tạo doanh nghiệp
BAC là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của IIBA quốc tế. Ngoài các khóa học public, BAC còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Các bài viết liên quan Power BI:
- Power BI cơ bản cho người mới bắt đầu
- Chỉnh sửa và định hình dữ liệu trong Power BI Desktop
- Kết hợp dữ liệu trong Power BI Desktop
- Hướng dẫn kết nối dữ liệu trong Power BI Desktop
- Hướng dẫn tải & cài đặt Power BI trên máy tính
- Khóa học Phân tích và trực quan hóa dữ liệu với Power BI
- Power BI là gì?
Các bài viết liên quan:
- TABLEAU – Giải pháp BUSINESS INTELLIGENCE (BI) – click vào đây
- Hướng dẫn cài đặt và Sử dụng TABLEAU – click vào đây
- Tính năng mới trên tableau – verion 2019.1 – click vào đây
BAC – Biên soạn và tổng hợp nội dung