
Giới thiệu chung về ALL Functions
Về cơ bản các ALL Functions đều thuộc kiểu filter functions, tức là các kiểu hàm cho phép người dùng được lọc các điều kiện và thay đổi context xoay quanh bài toán để phù hợp với yêu cầu. Bản thân các hàm này không được sử dụng một mình mà đóng vai trò là một hàm trung gian có thể được sử dụng để thay đổi tập hợp các kết quả mà một số tính toán khác thực hiện.Các hàm trên đặc biệt hữu ích khi chúng ta muốn tạo ra một measure tính kết quả theo từng nhóm giá trị của một trường dữ liệu, ví dụ như tính số ngày có đơn đặt hàng theo từng tháng, tổng doanh thu theo từng dòng sản phẩm,… hoặc chỉ đơn giản là chúng ta muốn tạo ra một measure tĩnh không bị ảnh hưởng bởi các điều kiện lọc khác trong dashboard.Phân biệt sự khác nhau của các ALL Functions qua tính toán tổng doanh thu sử dụng DAX trong Power BI
Bộ dữ liệu được sử dụng trong bài viết này được lấy từ Adventure Works DW 2020 Power BI Desktop SampleTính toán tổng doanh thu sử dụng ALL
ALL trả về tất cả các hàng trong bảng hoặc tất cả các giá trị trong một cột, bỏ qua bất kỳ bộ lọc nào có thể đã được áp dụng. Chức năng này hữu ích để xóa bộ lọc và tạo phép tính trên tất cả các hàng trong bảng.Trạng thái bình thường đối với các biểu thức DAX có chứa hàm ALL () là bất kỳ bộ lọc nào được áp dụng sẽ bị bỏ qua. Tuy nhiên, có một số trường hợp không đúng như vậy vì cơ chế auto-exist của DAX, DAX tối ưu hóa việc lọc để giảm số lượng xử lý cần thiết cho các truy vấn DAX nhất định. Một ví dụ trong đó auto-exist và ALL () cung cấp kết quả không mong muốn là khi lọc trên hai hoặc nhiều cột của cùng một bảng (như khi sử dụng slicer) và có một số đo trên cùng bảng đó sử dụng ALL (). Trong trường hợp này, tính năng tự động tồn tại sẽ hợp nhất nhiều bộ lọc thành một và sẽ chỉ lọc trên các kết hợp giá trị hiện có. Do sự hợp nhất này, số đo sẽ được tính toán trên các kết hợp giá trị hiện có và kết quả sẽ dựa trên các giá trị đã lọc thay vì tất cả các giá trị như mong đợi.
Ở đây chúng ta đều dễ dàng thấy dù chúng ta thay đổi các điều kiện lọc như thế nào thì cột measure SumSales_ALL cũng đều chỉ trả về một kết quả cho tất cả các category, vì chúng ta đã áp dụng hàm ALL cho cột category khi viết measure.
Tính toán tổng doanh thu sử dụng ALLSELECTED
ALLSELECTED loại bỏ các bộ lọc theo context khỏi các cột và hàng trong truy vấn hiện tại, trong khi vẫn giữ lại tất cả các bộ lọc theo context khác hoặc bộ lọc từ các slicer.Hàm này khác với ALL () vì nó giữ lại tất cả các bộ lọc được đặt rõ ràng trong truy vấn và nó giữ lại tất cả các bộ lọc ngữ cảnh ngoài bộ lọc hàng và cột.Ở đây chúng ta viết thêm một measure nữa đó là SumSales_ALLSELECTED để so sánh với measure SumSales_ALL. Rất dễ nhận ra được sự khác nhau giữa 2 measure khi mà chúng ta thay đổi điều kiện lọc ở slicer thì measure SumSales_ALL vẫn giữ nguyên giá trị thì measure SunSales_ALLSELECTED đã bị thay đổi khi chúng ta bỏ đi category bikes, và chỉ còn tính tổng sales của 3 category còn lại.
Tính toán tổng doanh thu sử dụng ALLEXCEPT
ALLEXCEPT loại bỏ tất cả các bộ lọc ngữ cảnh trong bảng ngoại trừ các bộ lọc đã được áp dụng cho các cột được chỉ định.
Cuối cùng, hàm ALLEXCEPT được sử dụng trong measure SumSales_ALLEXCEPT. Giống như định nghĩa, hàm ALLEXCEPT chính là phần bù của hàm ALL khi ngoại trừ các cột được truyền vào trong hàm, thì nó sẽ loại bỏ hết các điều kiện lặp dành cho các cột và các bảng khác.
Tổng kết
Hiểu và áp dụng được các ALL Functions trong các trường hợp và bối cảnh khác nhau sẽ rất hữu ích và tiện lợi trong quá trình làm việc với Dax của bạn. Ba hàm đơn giản nhưng sẽ giúp bạn tiết kiệm rất nhiều thời gian tính toán các measures. Hãy lưu nhanh ba hàm này về cẩm nang kiến thức của mình để có thể áp dụng mọi lúc mọi nơi nhé!- Tham gia group ôn thi PL-300/DA-100 tại: https://www.facebook.com/groups/da100vn
- Chuỗi Video Hướng dẫn thực hành Lab và sử dụng các tài nguyên của Microsoft: https://www.youtube.com/c/Datapotvn/videos
- Update tài nguyên từ Microsoft, DA-100 exam questions và exam topics tại Fanpage của Datapot: https://www.facebook.com/DatapotAnalytics/