Quan hệ và Cardinality trong Power BI: 1-1, 1-nhiều, nhiều-nhiều và hướng lọc

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
  1. Cardinality là gì?
  2. Hướng lọc (Cross filter direction)
  3. Quan hệ active và inactive
  4. Xử lý nhiều-nhiều: bảng cầu nối
  5. Số bị nhân đôi – nguyên nhân và cách sửa
  6. Checklist mô hình
  7. Cần người làm giúp?

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.

Các loại quan hệ cardinality trong Power BI

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ĩaVí dụ nhà máy
1-1 (One to one)Mỗi dòng bảng A khớp đúng 1 dòng bảng BMáy ↔ Hồ sơ kỹ thuật máy
1-nhiều (One to many)1 dòng ở A khớp nhiều dòng ở B1 sản phẩm ↔ nhiều phiếu kiểm
Nhiều-1 (Many to one)Chiều ngược của 1-nhiềuNhiề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ặpKế 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:

  1. 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).
  2. Tạo Dim_NhomSP (danh sách nhóm duy nhất); Dim_SanPham nối Dim_NhomSP; Fact_KeHoach nối Dim_NhomSP.
  3. 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ứngNguyên nhân thường gặpCách sửa
Tổng lớn hơn thực tếDim có khoá trùng → thành nhiều-nhiềuLoạ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ổngKhông có quan hệ giữa bảng trên trục và FactTạ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ềuKéo trường từ Dim, không từ Fact
Ô trống “(Blank)” xuất hiệnFact có mã không tồn tại trong DimBổ 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ụ.

Bản tin Industrial Knowledge

Mỗi tuần một công cụ, đọc trong 5 phút

Đăng ký nhận bản tin và checklist 8D miễn phí (PDF). Không spam, hủy bất cứ lúc nào.