Quan hệ & cardinality
Quan hệ (relationships) liên kết các bảng trong star schema và quyết định bộ lọc lan truyền thế nào — nền tảng để DAX tính đúng.
Cardinality (bản số)
Phần tiêu đề “Cardinality (bản số)”| Loại | Ý nghĩa | Khi nào |
|---|---|---|
| One-to-many (1:*) | Một dimension ↔ nhiều fact | Mặc định, phổ biến nhất |
| Many-to-one (*:1) | Như trên, ngược chiều | Tùy hướng tạo |
| One-to-one (1:1) | Hiếm | Tách bảng đặc biệt |
| Many-to-many (:) | Phức tạp, cẩn trọng | Khi không có khóa duy nhất |
→ Trong star schema, gần như luôn là 1 (dimension) : nhiều (fact).
Hướng lọc (cross-filter direction)
Phần tiêu đề “Hướng lọc (cross-filter direction)”- Single (một chiều): bộ lọc chảy từ dimension → fact (khuyến nghị).
- Both (hai chiều): lọc chảy cả hai chiều — mạnh nhưng dễ gây mơ hồ/sai; dùng có chủ đích.
Khi bạn lọc Product[Nhóm] = "A", bộ lọc lan từ dimension xuống bảng Sales, nên measure SUM(Sales[Amount]) chỉ tính các dòng thuộc nhóm A. Đây là cơ chế bộ lọc lan truyền cốt lõi.
Active vs Inactive
Phần tiêu đề “Active vs Inactive”- Giữa hai bảng chỉ một quan hệ active tại một thời điểm.
- Quan hệ thừa là inactive (nét đứt) — kích hoạt tạm bằng
USERELATIONSHIPtrong CALCULATE. - Ví dụ điển hình: bảng
SalescóOrderDatevàShipDatecùng trỏ tớiDate→ một active, một inactive.
Lỗi quan hệ thường gặp
Phần tiêu đề “Lỗi quan hệ thường gặp”- Quan hệ mơ hồ (nhiều đường nối) → engine từ chối hoặc tính sai.
- Both-direction lạm dụng → vòng lặp lọc, kết quả khó đoán.
- Khóa không duy nhất ở phía “one” → quan hệ không tạo được.