Quan hệ và Cardinality trong Power BI: 1-1, 1-nhiều, nhiều-nhiều và hướng lọc
Nội dung bài viết 7 mục
Tóm tắt nhanh
- Cardinality mô tả một dòng ở bảng này tương ứng với bao nhiêu dòng ở bảng kia.
- Chuẩn nên dùng: 1-nhiều từ bảng danh mục (Dim) sang bảng dữ kiện (Fact), lọc một chiều.
- Nhiều-nhiều và lọc hai chiều chỉ dùng khi thật cần, vì dễ cho kết quả sai hoặc khó đoán.
- Một cặp bảng chỉ có một quan hệ active; các quan hệ khác kích hoạt bằng USERELATIONSHIP.
Bài này đi sâu một phần của mô hình dữ liệu dạng sao.
Cardinality là gì?
| Loại | Ý nghĩa | Ví dụ nhà máy |
|---|---|---|
| 1-1 (One to one) | Mỗi dòng bảng A khớp đúng 1 dòng bảng B | Máy ↔ Hồ sơ kỹ thuật máy |
| 1-nhiều (One to many) | 1 dòng ở A khớp nhiều dòng ở B | 1 sản phẩm ↔ nhiều phiếu kiểm |
| Nhiều-1 (Many to one) | Chiều ngược của 1-nhiều | Nhiều phiếu kiểm ↔ 1 sản phẩm |
| Nhiều-nhiều (Many to many) | Cả hai phía đều có giá trị lặp | Kế hoạch theo tháng-nhóm SP ↔ thực tế theo ngày-SP |
Quan hệ 1-1 thường là dấu hiệu nên gộp hai bảng làm một.
Hướng lọc (Cross filter direction)
- Một chiều (Single): chọn sản phẩm ở Dim → lọc phiếu kiểm ở Fact. Đây là mặc định và an toàn.
- Hai chiều (Both): lọc Fact cũng lọc ngược Dim. Hữu ích trong vài trường hợp (ví dụ slicer chỉ hiện sản phẩm có dữ liệu), nhưng nhiều quan hệ hai chiều tạo ra đường lọc vòng, kết quả mơ hồ, mô hình chậm.
Mẹo: thay vì bật hai chiều cho cả mô hình, dùng CROSSFILTER() bên trong một measure cụ thể.
Quan hệ active và inactive
Bảng sản xuất có Ngày bắt đầu và Ngày hoàn thành, cả hai cùng nối với bảng lịch. Power BI chỉ cho một quan hệ active (đường liền), quan hệ còn lại là inactive (đường nét đứt):
SL theo ngày hoàn thành =
CALCULATE (
SUM ( Fact_SX[SanLuong] ),
USERELATIONSHIP ( Fact_SX[NgayHoanThanh], Dim_Ngay[Ngay] )
)
Xử lý nhiều-nhiều: bảng cầu nối
Ví dụ: kế hoạch sản lượng lập theo tháng × nhóm sản phẩm, còn thực tế theo ngày × mã sản phẩm. Không nối trực tiếp hai bảng này. Cách đúng:
- Cả hai Fact cùng nối vào Dim_Ngay (kế hoạch nối qua ngày đầu tháng hoặc cột Tháng).
- Tạo Dim_NhomSP (danh sách nhóm duy nhất); Dim_SanPham nối Dim_NhomSP; Fact_KeHoach nối Dim_NhomSP.
- Báo cáo so sánh kế hoạch – thực tế ở cấp tháng × nhóm, cấp chung của hai bảng.
Số bị nhân đôi – nguyên nhân và cách sửa
| Triệu chứng | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
| Tổng lớn hơn thực tế | Dim có khoá trùng → thành nhiều-nhiều | Loại trùng trong Power Query, kiểm tra bằng đếm dòng |
| Mọi dòng hiện cùng một tổng | Không có quan hệ giữa bảng trên trục và Fact | Tạo quan hệ hoặc dùng cột từ Dim đúng |
| Slicer không lọc biểu đồ | Hướng lọc ngược chiều | Kéo trường từ Dim, không từ Fact |
| Ô trống “(Blank)” xuất hiện | Fact có mã không tồn tại trong Dim | Bổ sung danh mục, chuẩn hoá mã |
Checklist mô hình
- Mỗi Dim có khoá duy nhất, không trống.
- Mọi quan hệ Dim → Fact là 1-nhiều, một chiều.
- Có bảng lịch đánh dấu Date Table.
- Ẩn cột khoá ở Fact khỏi người dùng báo cáo, chỉ để cột của Dim.
- Không nối Fact với Fact.
Cần người làm giúp?
Mô hình đang cho số “lạ”? Industrial Knowledge rà soát và sửa mô hình dữ liệu Power BI, Excel Data Model. Xem dịch vụ.