The Power of SWITCH (TRUE()) in DAX
- AutoReport
- Jul 23, 2023
- 3 min read
(Tác giả: Brian Julius)

Câu lệnh DAX SWITCH rất hữu ích khi bạn muốn đánh giá > 2 tình huống của một biểu thức đã cho mà không cần viết các câu lệnh IF lồng nhau. Nhưng với một thay đổi rất đơn giản, bạn có thể gia tăng sức mạnh một cách ẤN TƯỢNG và tiện ích của chức năng này...
Thông thường, tham số đầu tiên của câu lệnh SWITCH là biểu thức bạn muốn đánh giá. Ví dụ: khi sử dụng Produt[Color], bạn có thể đặt các tỷ lệ chiết khấu khác nhau dựa trên màu sắc của (các) sản phẩm được bán.
Sử dụng theo cách này, SWITCH có hai hạn chế chính:
Nó chỉ hoạt động để tính toán một biểu thức duy nhất - ví dụ: có thể chúng ta muốn đặt tỷ lệ chiết khấu không chỉ dựa trên màu sắc mà còn dựa trên kích thước và tổng số hàng tồn kho hiện có.
Nó chỉ hoạt động với dấu bằng (=) - điều này tốt cho màu sắc, nhưng có lẽ chúng ta cũng muốn đặt chiết khấu 20 nếu đơn giá lớn hơn 100 đô la, chiết khấu 10% nếu đơn giá từ 50 đến 100 đô la và 0% cho phần còn lại.
Cả hai trường hợp này đều không thể được xử lý bằng câu lệnh SWITCH cơ bản.
NHƯNG...nếu bạn thay thế TRUE( ) như là biểu thức được tính toán thay vì column hoặc measure, thì cả hai điều này đều dễ dàng.
Cấu trúc SWITCH( TRUE( ) ) hoạt động như sau - DAX sẽ đánh giá từng điều kiện theo thứ tự được cung cấp và "loại bỏ" ở câu lệnh đầu tiên trong danh sách đánh giá là TRUE hoặc nếu không có câu lệnh nào đánh giá là TRUE thì nó sẽ trả về giá trị cuối cùng trong điều kiện "của tất cả".
Trong ví dụ bên dưới, chúng ta muốn đặt "cờ đỏ" theo nghĩa đen trên Tên khách hàng của mình nếu họ đáp ứng BẤT KỲ điều kiện nào trong bốn điều kiện sau:
Tổng doanh số dưới 500.000
Một sản phẩm chiếm hơn 30% tổng doanh thu
Khách hàng đã mua từ 10 sản phẩm riêng biệt trở xuống
Lần mua hàng gần đây nhất của khách hàng cách đây hơn 60 ngày
Bạn sẽ thấy rằng cả hai điều kiện SWITCH cơ bản đều bị vi phạm ở đây - mọi kích hoạt cờ đỏ liên quan đến giá trị lớn hơn hoặc nhỏ hơn và cờ của chúng ta dựa trên bốn measure khác nhau, thay vì một biểu thức duy nhất. Nhưng như bạn có thể thấy, SWITCH( TRUE( ) ) xử lý tình huống này một cách dễ dàng và tinh tế.
Một lưu ý quan trọng - thứ tự của các câu lệnh được đánh giá có thể rất quan trọng. Ví dụ: giả sử chúng ta muốn thêm cờ màu tím nếu CẢ HAI điều kiện 1 và 2 được đánh giá là TRUE. Chúng ta cần đưa câu lệnh đó vào danh sách trước, vì nếu không thì câu lệnh đó sẽ "bắt đầu" với một lá cờ màu cà chua ngay khi nó đạt đến điều kiện 1 được đánh giá là ĐÚNG. (Quy tắc chung: sắp xếp các điều kiện của bạn theo thứ tự hạn chế giảm dần).
Comments