SWITCH thay cho IF lồng nhau
Khi có nhiều hơn hai nhánh điều kiện, chồng IF lên nhau nhanh chóng thành thứ không ai đọc nổi:
-- Khó đọc, khó sửa
Xếp loại = IF([Doanh thu] > 100000000, "Kim cương",
IF([Doanh thu] > 50000000, "Vàng",
IF([Doanh thu] > 20000000, "Bạc", "Đồng")))
SWITCH viết cùng logic đó phẳng và dễ sửa hơn nhiều.
Hai kiểu dùng SWITCH
Kiểu 1 — so khớp giá trị
Tên tháng = SWITCH(
MONTH(Lich[Ngay]),
1, "Tháng 1",
2, "Tháng 2",
3, "Tháng 3",
"Khác"
)
Tham số cuối không có cặp là giá trị mặc định khi không khớp nhánh nào. Nên luôn đặt giá trị mặc định — thiếu nó thì trường hợp ngoài dự kiến trả về trống và bạn không biết vì sao.
Kiểu 2 — SWITCH(TRUE()) cho điều kiện khoảng
Đây mới là cách dùng phổ biến nhất trong thực tế. Khi điều kiện là khoảng giá trị chứ không phải giá trị cụ thể:
Xếp loại khách = SWITCH(
TRUE(),
[Doanh thu] > 100000000, "Kim cương",
[Doanh thu] > 50000000, "Vàng",
[Doanh thu] > 20000000, "Bạc",
"Đồng"
)
Cách đọc: SWITCH đi từ trên xuống, tìm điều kiện đầu tiên đúng, trả về giá trị tương ứng rồi dừng.
Thứ tự các nhánh quyết định kết quả
Vì SWITCH dừng ở nhánh đúng đầu tiên, viết sai thứ tự là sai kết quả mà không hề báo lỗi:
-- SAI: mọi khách trên 20 triệu đều thành "Bạc"
SWITCH(TRUE(),
[Doanh thu] > 20000000, "Bạc",
[Doanh thu] > 100000000, "Kim cương",
"Đồng"
)
Khách 150 triệu khớp ngay nhánh đầu (150 > 20) nên bị gán "Bạc", không bao giờ tới nhánh Kim cương. Quy tắc: với điều kiện lớn hơn, xếp từ ngưỡng cao xuống thấp; với nhỏ hơn thì ngược lại.
Ba tình huống dùng thật
Đổi tên nhóm hiển thị
Nhóm hiển thị = SWITCH(
SanPham[MaNhom],
"DT", "Điện tử",
"GD", "Gia dụng",
"TP", "Thực phẩm",
"Chưa phân loại"
)
Phân nhóm tuổi nợ
Nhóm tuổi nợ = SWITCH(TRUE(),
CongNo[SoNgayQuaHan] <= 0, "Trong hạn",
CongNo[SoNgayQuaHan] <= 30, "1-30 ngày",
CongNo[SoNgayQuaHan] <= 60, "31-60 ngày",
CongNo[SoNgayQuaHan] <= 90, "61-90 ngày",
"Trên 90 ngày"
)
Đổi chỉ số theo lựa chọn của người xem
Kết hợp với một bảng tham số, cho phép người xem chọn xem chỉ số nào trên cùng một biểu đồ:
Chỉ số động = SWITCH(
SELECTEDVALUE(ThamSo[ChiSo]),
"Doanh thu", [Doanh thu],
"Lợi nhuận", [Lợi nhuận],
"Số đơn", [Số đơn],
BLANK()
)
Cột tính toán hay số đo?
Nếu kết quả dùng để nhóm, lọc hoặc đặt lên trục — như xếp loại khách, nhóm tuổi nợ — thì tạo cột tính toán. Nếu chỉ để hiển thị một con số thay đổi theo lựa chọn — như chỉ số động ở trên — thì tạo số đo. Đặt nhầm sẽ dẫn tới không lọc được, hoặc mô hình phình ra không cần thiết.
Hai lỗi hay gặp
- Quên giá trị mặc định — dòng ngoài dự kiến trả về trống, biểu đồ hiện khoảng trắng không rõ nguyên nhân.
- Trộn kiểu dữ liệu giữa các nhánh — nhánh này trả về chữ, nhánh kia trả về số. DAX yêu cầu mọi nhánh cùng kiểu.
Xem thêm các hàm DAX cơ bản để nắm tổng thể, hoặc hàm FILTER nếu điều kiện của bạn cần lọc bảng.
Sẵn sàng xây dựng dashboard Power BI?
Kết nối với freelancer Power BI đã kiểm duyệt, xem báo cáo nhúng ngay trên trình duyệt và tải file .pbix về sau khi thanh toán.
Đào Ngọc Tú
Tư vấn Power BI cho doanh nghiệp Việt. Viết về dựng mô hình dữ liệu, DAX và kết nối các nguồn dữ liệu phổ biến trong nước.

