Bài toán “Thống kê khách hàng mới và khách hàng quay lại” là một bài toán kinh điển, phổ biến trong mọi doanh nghiệp, giải quyết bài toàn này giúp doanh nghiệp hiểu được khả năng thu hút khách hàng mới cũng như khả năng giữ chân khách hàng quay lại. Tuy nhiên đối với người mới làm phân tích và mới sử dụng Power BI, việc triển khai bài toán này còn có thể gặp nhiều khó khăn, vì vậy trong bài viết này, Datapot sẽ hướng dẫn các bạn xử lý bài toàn này một cách đơn giản, dễ hiểu nhất.
Mục lục
Video hướng dẫn chi tiết cách thống kê khách mới và quay lại trong Power BI
Tải Power BI sample file trong video.
Giới thiệu Dataset

Trong ví dụ này, dữ liệu của chúng ta có tất cả 6 bảng.
Thực tế bài toán này của chúng ta có thể phức tạp nếu cần xét thêm các yếu tố khác. Ví dụ như địa lý, lúc này, chúng ta sẽ phải thêm các phần tính toán logic như khách hàng mới, khách hàng quay lại theo yếu tố địa lý như country, region. Nó có thể phức tạp ở điểm như một khách hàng có thể là mới với country này, nhưng lại là cũ với country.
Và để bài toán đơn giản, chúng ta sẽ quan tâm đến bảng:
- Sales – gồm các giao dịch bán hàng
- Customer – gồm các thông tin về khách hàng
- Date – bảng thời gian.
Cụ thể trong data model này, với bảng Sales và Customer được nối với nhau vơi nhau thông qua trường CusotmerKey.
Còn mối quan hệ giữa bảng Sales và bảng Date, trường Date trong bảng Date được nối với các trường trong bảng Sales gồm DueDateKey, ShipDateKey và OrderDateKey, trong bài toán này, chúng ta sẽ chỉ quan tâm tới mối quan hệ giữa Date và OrderDateKey.
Phát biểu bài toán
Bài toán của chúng ta sẽ được phát biểu như sau: trong một khoảng thời gian cho trước, hãy tính toán:
- Đếm số lượng khách hàng Active (có tối thiểu một gian dịch)
- Trong số lượng khách hàng Active này:
- Có bao nhiêu khách hàng mới (phát sinh giao dịch lần đầu)
- Có bao nhiêu khách hàng cũ/khách hàng quay lại (phát sinh giao dịch sau lần đầu mua hàng)
Xử lý bài toán
Đếm số lượng khách hàng Active
Để đếm số lượng khách hàng Active, chúng ta có thể tạo một bảng gồm cột Months (từ bảng Date) và cột # Active Customer. Cột # Active Customer được tạo bằng một measure, measure này sẽ đếm số lượng khách hàng Active bằng việc sử dụng hàm DISTINCOUNT để đếm giá trị duy nhất ở cột CusomterKey trong bảng Sales.

Sau đó thêm measure vào bảng, chúng ta sẽ có kết quả là số lượng khách hàng Active theo từng tháng.

Thống kê khách hàng mới và khách hàng quay lại
Trước khi đi vào giải quyết bài toán này, hãy cùng nhau làm rõ hai khái niệm:
- Khách hàng mới: mua hàng lần đầu tiên trong khoảng thời gian chỉ định
- Khách hàng quay lại: mua hàng nhiều hơn 1 lần trong khoảng thời gian chỉ định
Đầu tiên, chúng ta sẽ xác định ngày phát sinh giao dịch đầu tiên theo 2 góc độ đó là theo khoảng thời gian quan sát và theo cả vòng đời khách hàng.
Theo khoảng thời gian quan sát:

Note: trong cột CustomeKey sẽ có một giá trị là -1, bạn hãy bỏ qua giá trị này vì dataset vốn được thiết kế như vậy.
Theo cả vòng đời khách hàng:
Note: ở measure trên, hàm All() sẽ giúp chúng ta bỏ qua filter context về mặt thời gian.

Từ 2 measue trên, logic của chúng ta sẽ như sau, nếu thời điểm mua hàng trong toàn bộ vòng đời bằng với thời điểm đầu tiên mua hàng trong khoảng thời gian quan sát, thì khách hàng này sẽ được coi là khách hàng mới. Measure cho logic này có thể viết như sau:
Note:
- Hàm trên sẽ trả về 1 nếu thỏa mãn điều kiện, nếu không trả về 0
- Chúng ta có thêm 1 điều kiện && [1st order date] <> BLANK (), điều kiện này là để tránh rủi ro khi cả 1st order date đều BLANK, vì khi đó BLANK == BLANK sẻ trả về TRUE

Chúng ta có thể thấy, với CustomerKey là 11001, ngày 20170709 là khách hàng mới, nhưng từ ngày 20190619 thì không còn là khách hàng mới.
Tuy nhiên, với measure trên, chúng ta mới chỉ dừng lại ở việc xác định được đâu là khách hàng mới.
Thống kê số lượng khách hàng mới và khách hàng quay lại
Chúng ta sẽ có 2 cách để tính tổng số lượng khách hàng mới.
Cách 1: sử dụng Iterator Function – SUMX
Measure của chúng ta sẽ được viết như sau:
Với measure này, chúng ta sẽ ép công thức “is_new_customer” tính theo từng khách hàng trong bảng Customer.

Nếu là khách hàng mới, sẽ nhận được kết quả là 1, và hàm SUMX sẽ tính tổng số lượng khách hàng mới trong khoảng thời gian quan sát.

Cách 2: sử dụng hàm CALCULATE kết hợp với hàm FILTER
Chúng ta sẽ có measure để tính số lượng khách hàng mới như sau:
Trong đó:
- FILTER ( Customer, [is_new_customer] = 1 ): trả về 1 bảng chỉ chứ khách hàng mới
- COUNTROWS ( Customer ): đếm số dòng trong bảng sau khi bộ lọc được áp dụng
Phần còn lại, để tính số lượng khách hàng cũ/khách hàng quay lại, chúng ta có thể sử dụng lại công thức trên bằng cách thay điều kiện = 0. Một cách khác đó là chúng ta hoàn toàn có thể lấy:
# khách hang quay lại = # khách hàng Active – # khách hàng mới

Tạm kết
Như vậy, chúng ta đã xử lý xong bài toán phân loại và thống kê số lượng khách mới và khách hàng quay lại. Các bạn có thể thấy bài toán tưởng chừng như phức tạp, nhưng nếu chúng ta biết bóc tách nó và xử lý một cách logic thì cũng không cần dùng đến các công thức hay hàm DAX phức tạp.
Có điểm lưu ý rằng là các công thức được sử dụng để giải quyết bài toán này chưa thực sự tối ưu về mặt hiệu năng, tuy nhiên nó đủ đơn giản, dễ hiểu và bạn có thể điều chỉnh nó theo mong muốn của mình.
Cảm ơn ơn bạn đọc bài biết và hãy luôn theo dõi blog và kênh YouTube của Datapot để được cập nhật những bài toán điển hình trong nghiệp vụ phân tích và cùng nhau giải quyết nhé.
Bên dưới là các khóa học phần tích dữ liệu với Power BI của Datapot, nếu bạn là người đang tìm hiểu về ngành phân tích dữ liệu hoặc đang tìm khóa học phù hợp, mời bạn tìm hiểu thêm nhé!
PL-300 – Microsoft Power BI Data Analyst
ĐƯỢC YÊU THÍCH BỞI NHỮNG HỌC VIÊN TỪ CÁC TỔ CHỨC TRONG NƯỚC VÀ QUỐC TẾ Khóa học tiêu chuẩn của Microsoft cung cấp các phương pháp khác nhau và bài thực hành dựa trên các yêu cầu thực tế của Doanh nghiệp để lập mô hình, trực quan hóa và phân tích dữ liệu…
APBI – Power BI Advanced Data Modeling and Visualization
ĐƯỢC YÊU THÍCH BỞI NHỮNG HỌC VIÊN TỪ CÁC TỔ CHỨC TRONG NƯỚC VÀ QUỐC TẾ Khóa học Power BI nâng cao sẽ đi sâu vào nâng cao mô hình dữ liệu và trực quan hóa dữ liệu. Khóa học này giúp người học có được tư duy phân tích, kỹ thuật và quy trình…
Data Analyst


