Hàm Earlier trong DAX Power BI

Cách dùng hàm EARLIER trong Power BI (DAX Function)

Ngày đăng: 03/07/2023

Nếu bạn nào đã làm quen với SQL thì chắc chắn sẽ không lạ lẫm gì về nhóm hàm Window Function. Có thể hiểu đơn giản đây là một loại hàm giúp chúng ta tính toán, làm việc trên một tập hợp dữ liệu được xác định cụ thể. Trong Power BI, nhiều hàm DAX có chức năng tương tự như vậy, một trong số đó là hàm EARLIER.

Tổng quan về hàm Earlier

Hàm EARLIER là một hàm DAX hay được sử dụng cho các phép tính toán lồng nhau (nested calculations). Khi bạn có nhu cầu tính toán cho một tập data nhỏ hơn trong toàn bộ table, thì bạn có thể sử dụng hàm này. Một số use case hay được sử dụng hàm EARLIER như: Phân tích giao dịch đầu tiên của khách hàng, đánh giá tần suất giao dịch của khách hàng, so sánh tỷ trọng doanh thu của của nhân viên trong cùng một team, tính tổng doanh số trước khi xuất hiện order mới nhất… 

Hàm EARLIER thường được sử dụng với Row Context. Cụ thể hơn, việc tính toán sẽ được lặp lại lần lượt qua từng dòng trong table sử dụng.

Cú pháp của hàm EARLIER

EARLIER(<column>, <number>) 

Trong đó:  

Column: Cột chứa giá trị dùng để xem xét và filter. 

Number: Số lần lặp lại việc quét data trong table. Khi bỏ qua biến này thì giá trị mặc định là 1 (Thường sử dụng giá trị mặc định). 

Giá trị trả về

Giá trị hiện tại của hàng, từ cột được chỉ định (ColumnName), tại một số lần đánh giá bên ngoài cụ thể (Biến Number trong hàm, thường là 1).

Ví dụ về hàm EARLIER

Chúng ta cùng nhau đi qua một ví dụ thực tế để hiểu rõ hơn cách hoạt động của hàm EARLIER cũng như các trường hợp có thể sử dụng.

Bài toán đặt ra: 

Chúng ta cần tính tổng doanh số trước khi xuất hiện order mới nhất của một nhân viên. 

Mô tả bộ dữ liệu: 

Chúng ta sẽ load data từ file excel có các thông tin như sau: 

  • Ngày bán hàng 
  • Mã NV. 
  • Tên NV. 
  • Doanh số. 

Output mong muốn: 

Chúng ta sẽ có được doanh số các ngày trước đó của từng nhân viên. 

Các bước thực hiện: 

Bước 1

Load bộ dữ liệu mẫu từ file excel sau vào Power BI. 

Mẫu dataset

Bước 2: 

Chọn vào bảng cần tạo thêm cột thông tin ranking, chọn “New Column”. 

Bước 3: 

Nhập đúng công thức DAX bên dưới để tạo cột “Tổng doanh số trước đó”. 

Tổng doanh số trước đó = CALCULATE ( SUM ( SALE[Doanh số] ), FILTER ( SALE, SALE[Mã NV] = EARLIER ( SALE[Mã NV] ) ), FILTER ( SALE, SALE[Ngày bán hàng] < EARLIER ( SALE[Ngày bán hàng] ) ) )[/daxcode]

Vậy là chúng ta đã hoàn thành việc tạo thêm cột thông tin doanh số trước đó của nhân viên. Kết quả chúng ta nhận được như sau:

Cách hàm EARLIER hoạt động: 

Chúng ta cùng nhau phân tích từng bước thực hiện của hàm DAX phía trên nhé. 

Tổng doanh số trước đó = CALCULATE ( SUM ( SALE[Doanh số] ), FILTER ( SALE, SALE[Mã NV] = EARLIER ( SALE[Mã NV] ) ), FILTER ( SALE, SALE[Ngày bán hàng] < EARLIER ( SALE[Ngày bán hàng] ) ) )[/daxcode]
  • Khi tạo Calculated Column, tức là chúng ta đang dùng Row Context. Power BI sẽ đi lần lượt qua từng dòng trong bảng từ trên xuống dưới và thực hiện hàm DAX tính toán. Dòng đầu tiên trong data của chúng ta là nhân viên Nguyễn Văn A, ngày bán hàng là 1/1/2023 và có doanh số là 1.000.000. 
  • Power BI sẽ thực hiện hàm DAX tại dòng đầu tiên. 
  • Hàm CALCULATE sẽ trả về kết quả được tính toán lại từ 1 biểu thức khi kết hợp thêm các bộ lọc. Biểu thức tính toán của hàm CALCULATE ở trên là SUM(SALE[Doanh số]) (Tính tổng giá trị đơn hàng). 
  • Trong hàm CALCULATE ở đây có 2 bộ lọc: (1) Lọc ra các đơn hàng của nhân viên Nguyễn Văn A; (2) Lọc ra các đơn hàng có ngày bán hàng trước ngày 1/1/2023. 
  • Kết quả của hàm DAX là: Không có đơn hàng nào của Nguyễn Văn A tạo ra trước ngày 1/1/2023, nên kết quả tính toán trả về là 0. 
  • Sau khi kết thúc tính toán tại dòng đầu tiên, Power BI tiếp tục lặp lại việc này tại các dòng tiếp theo. Tại dòng 2, có 1 đơn hàng của nhân viên A tạo trước ngày 2/1/2023 (Có giá trị 1.000.000) nên kết quả tính toán trả về là 1.000.000. 
  • Mục đích của hàm EARLIER(SALE[Mã NV])EARLIER(SALE[Ngày bán hàng]) là để lấy ra thông tin Nhân viênNgày bán hàng của đơn hàng tại dòng đang tính toán, rồi sau đó hàm Filter sẽ làm phần việc còn lại.

Lưu ý khi sử dụng hàm EARLIER

  • Về lý thuyết, hiệu năng của hàm EARLIER có thể bị chậm. Nguyên nhân là do nó phải lặp lại qua tất cả các dòng trong bảng, tại mỗi dòng thì nó có thể phải thực hiện số bước tương ứng với số dòng. Ví dụ nếu bàng có 1000 dòng thì có thể sẽ có 1000 x 1000 = 1.000.000 bước được thực hiện. 
  • Hàm này không được hỗ trợ sử dụng trong chế độ DirectQuery khi sử dụng trong calculated columns hoặc row-level security (RLS)
  • Ta có thể sử dụng cấu trúc VAR – RETURN để tường minh hơn về mặt công thức: 
Tổng doanh số trước đó =
VAR TRANSACTION_OF_SALEMAN =
    FILTER ( SALE, SALE[Mã NV] = EARLIER ( SALE[Mã NV] ) )
VAR TRANSACTION_BEFORE_DATE =
    FILTER ( SALE, SALE[Ngày bán hàng] < EARLIER ( SALE[Ngày bán hàng] ) )
RETURN
    CALCULATE (
        SUM ( SALE[Doanh số] ),
        TRANSACTION_OF_SALEMAN,
        TRANSACTION_BEFORE_DATE
    )

Bạn có thể download file thực hành trên Power BI của chúng mình tại đây để tham khảo.

Kết luận

Thông qua bài viết trên đây, chúng ta đã hiểu rõ hơn về cú pháp, những trường hợp sử dụng hàm EARLIER và đặc biệt là nắm rõ được cách nó hoạt động trong một ngữ cảnh cụ thể.

Hy vọng bài viết này đã mang lại những kiến thức có giá trị cho bạn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *