Cách đếm giá trị phân biệt (Count Distinct) trong Tableau
Có hai cách để thực hiện distinct count trong Tableau: từ kệ Measure Names và thông qua một Calculated Field. Calculated Fields có ưu điểm là có thể tái sử dụng và mở rộng để tạo ra các thước đo phức tạp hơn, giúp hiệu quả lâu dài hơn so với cách làm trực tiếp, vốn nhanh hơn nhưng phải lặp lại mỗi lần. Hãy bắt đầu với cách dễ hơn - Measure Names shelf.
Count Distinct với Measure Names shelf
Trước khi đếm distinct, chúng ta sẽ bắt đầu xây dựng một biểu đồ đơn giản. Hãy tạo một biểu đồ cột cơ bản so sánh các danh mục sản phẩm dựa trên số lượng khách hàng đã mua mặt hàng từ mỗi danh mục trong danh mục của Superstore.
Để bắt đầu, vào "Sheet 1" và kéo thả Category vào khu vực hàng (rows) và Customer ID vào khu vực cột (columns). Vì Customer ID là một cột dimension (dữ liệu phân loại), nó sẽ có màu xanh lam. Ngoài ra, do có quá nhiều giá trị phân biệt, Tableau sẽ hỏi bạn có muốn thêm tất cả phần tử của cột hay không. Hiện tại, chọn Add all members.
Bây giờ, chúng ta sẽ dùng Customer ID như một measure để đếm có bao nhiêu khách hàng duy nhất mua sản phẩm của mỗi danh mục. Để thực hiện:
- Đi tới kệ Columns.
- Từ menu thả xuống, vào Measure.
- Lưu ý rằng các tùy chọn gồm Count và Count (Distinct). Chúng ta sẽ chọn Count (Distinct).

Distinct count từ Measure Names shelf. GIF bởi Tác giả.
Vậy là xong! Số lượng khách hàng duy nhất cho mỗi danh mục sản phẩm. Ta thấy có 788 khách hàng cho danh mục Office Supplies.

Khách hàng duy nhất của mỗi danh mục sản phẩm. Ảnh bởi Tác giả.
Count vs. Count Distinct trong Tableau
Trước khi đi tiếp, hãy xem sự khác biệt giữa count và distinct count trong trường hợp Customer ID. Để minh họa, ta có thể thêm một trường Customer ID thứ hai vào kệ cột. Thực hiện các bước trước đó, ngoại trừ lần này, ta chọn Count chứ không phải Count (Distinct) từ menu Measures.
Đừng lo nếu lúc này kết quả trông hơi kỳ. Chúng ta sẽ chỉnh lại ngay. Tiếp tục bằng cách vào thẻ Show Me ở góc phải và chọn một trong các tùy chọn biểu đồ cột.

So sánh Count và Distinct Count. GIF bởi Tác giả.
Ở chế độ xem kết quả, ta thấy sự so sánh giữa count (cột xám) và distinct count (cột xanh lá nhạt) cho mỗi danh mục sản phẩm. Chênh lệch giữa hai giá trị chính là số lượng Customer ID bị lặp. Chúng ta cũng phát hiện Office Supplies là danh mục có chênh lệch lớn nhất giữa hai phép đếm, do đó có tần suất mua hàng cao nhất trong tệp khách hàng của mình.

So sánh Count và Distinct Count bằng biểu đồ cột. Ảnh bởi Tác giả.
Count Distinct với Calculated Fields
Tạo distinct count từ kệ measures là một cách nhanh và dễ, nhưng có một hạn chế lớn. Nếu cần thêm một distinct count khác cho Customer ID trong cùng chế độ xem, hoặc ở một sheet mới, ta sẽ phải lặp lại các bước. Thêm nữa, nếu muốn xây dựng một measure mới dựa trên distinct count của khách hàng, ta sẽ cần tạo measure đó từ đầu. Nói cách khác, dùng Measure Names shelf chỉ cho ta một phép tổng hợp tạm thời, không phải vĩnh viễn.
Để tạo distinct count vĩnh viễn, ta cần tạo một Calculated Field dùng hàm COUNTD(). Chúng ta sẽ thực hiện theo một trong hai cách sau:
-
Calculated Field
COUNTD()đơn giản -
COUNTD()với biểu thức LOD
Calculated Field COUNTD() đơn giản
Đằng sau distinct count mà ta tạo từ Measure Names shelf, thực chất Tableau đã dùng hàm COUNTD(), hàm này chỉ đếm mỗi Customer ID duy nhất một lần. Ở phương pháp trước, phép tổng hợp được thực hiện trên shelf, chứ không được lưu như một measure trong danh sách trường của ta.
Để lưu nó thành một measure trong danh sách trường, ta cần tạo một Calculated Field. Để tạo một Calculated Field distinct count đơn giản cho khách hàng trong bộ dữ liệu, hãy làm như sau:
-
Nhấp vào mũi tên nhỏ hướng xuống, cạnh ô tìm kiếm, trong khung Data bên trái.
-
Từ menu thả xuống, chọn Create Calculated Field….
-
Trong cửa sổ bật lên, đặt tên trường:
Unique Customers, và nhập công thức:COUNTD([Customer ID]). -
Lưu ý khi hoàn thành công thức, ta nhận được thông báo ở dưới hộp “The calculation is valid,” là tín hiệu tốt. Nhấp OK.
-
Calculated Field giờ đã xuất hiện vĩnh viễn trong danh sách measures. Bây giờ, thay trường
CNTD(Customer ID)trên shelf bằng Calculated Field mới của chúng ta. Kết quả giống nhau, đúng như mong đợi.

Distinct Count với Calculated Field. GIF bởi Tác giả.
COUNTD() với biểu thức LOD
Chúng ta có thể dùng COUNTD() trong một biểu thức level of detail (LOD) để tạo distinct count cho khách hàng theo từng danh mục sản phẩm. Điều này cho ta một measure vĩnh viễn về quy mô khách hàng theo danh mục, có thể sử dụng cho các measure phức tạp hơn về sau.
Để làm vậy, ta sẽ lặp lại các bước tạo Calculated Field như trước, nhưng lần này đặt tên là Category Customer Base và viết công thức sau:
{FIXED [Category]: COUNTD([Customer ID])}

Distinct Count trong biểu thức LOD. GIF bởi Tác giả.
Nếu bạn mới làm quen với biểu thức LOD, tôi khuyên bạn đọc hướng dẫn LOD Expressions in Tableau của chúng tôi. Tuy nhiên, trong phạm vi bài viết này, hãy hiểu rằng công thức trên đơn giản là đếm số khách hàng duy nhất cho từng danh mục riêng biệt. Chúng ta dùng ngoặc nhọn {} để chỉ ra đây là biểu thức LOD, và dùng FIXED để chỉ định distinct count được tính ở mức độ chi tiết của cột Category.
Tạo KPI với Count Distinct trong Tableau
Một lợi ích của Calculated Fields là có thể dùng trong các measure khác mà không phải viết lại toàn bộ công thức từ đầu mỗi lần.
Vì lý do này, dùng COUNTD() với Calculated Fields là một kỹ thuật tuyệt vời giúp bạn tiến nhanh để khám phá insight mới. Nó có thể giúp ta tìm số lượng đơn hàng, khách hàng hoặc sản phẩm, vốn có thể là các thước đo kinh doanh độc lập, hoặc dùng để tính các KPI phức tạp hơn, như lợi nhuận trung bình trên mỗi khách hàng hoặc số lượng trung bình trên mỗi đơn hàng, chẳng hạn. Hãy xem một số cách chúng ta có thể dùng COUNTD() để thu được insight có giá trị và phù hợp kinh doanh.
Số đơn hàng trung bình trên mỗi khách hàng
Chúng ta có thể dùng measure Unique Customers cùng với một measure mới tính số đơn hàng trung bình trên mỗi khách hàng. Thực hiện bằng cách tạo một Calculated Field mới với công thức sau, đặt tên là Avg Orders per Customer:
COUNT([Order ID])/[Unique Customers]
Tỷ lệ khách hàng nhận chiết khấu
Tương tự, ta có thể nâng cao thêm để tính tỷ lệ khách hàng nhận mức chiết khấu cao (ví dụ trên 50%) trong bất kỳ đơn hàng nào của họ trên tổng số khách hàng của Superstore. Với mục đích này, ta sẽ dùng một công thức kết hợp hàm logic với hàm COUNTD().
COUNTD(IF [Discount] > 0.5 THEN [Customer ID] END)/[Unique Customers]
Tỷ lệ giữ chân khách hàng
Ta có thể dùng một tổ hợp khác giữa COUNTD() và IF để tạo các chỉ số phức tạp hơn, như tỷ lệ giữ chân. Vậy, để đếm tỷ lệ khách hàng đã đặt hàng trong năm gần nhất trên tổng số khách hàng trong bộ dữ liệu, ta tạo trường Customer Retention Rate với công thức sau:
COUNTD(IF YEAR([Order Date]) = {MAX(YEAR([Order Date]))} THEN [Customer ID] END)/[Unique Customers]
Ở đây, biểu thức LOD được dùng để lấy năm lớn nhất (mới nhất) trong toàn bộ dữ liệu và so sánh với năm của mỗi dòng. Nếu bằng nhau, khách hàng được giữ chân trong năm gần nhất và sẽ được tính. Nếu không, khách hàng đó sẽ không được hàm COUNTD() xét đến.
Tỷ lệ thâm nhập theo danh mục
Chúng ta có thể dùng cả Category Customer Base và Unique Customers trong một công thức để tính một KPI đo lường tỷ lệ khách hàng của mỗi danh mục trên tổng số khách hàng trong bộ dữ liệu. Hãy gọi chỉ số này là Category Penetration Ratio.
[Category Customer Base]/{[Unique Customers]}
Tương tự công thức trước, một biểu thức LOD, được đánh dấu bằng ngoặc nhọn {}, được dùng để tính số khách hàng duy nhất trên toàn bộ dữ liệu. Chúng ta cần làm vậy vì Calculated Field Category Customer Base có mức tổng hợp khác.
Lợi nhuận trung bình trên mỗi khách hàng trong từng danh mục
Để tìm lợi nhuận trung bình trên mỗi khách hàng trong từng danh mục, ta sẽ tạo Avg Profit per Customer in Each Category và định nghĩa như sau:
{FIXED [Category]: SUM([Profit])}/[Category Customer Base]
Ở đây, một biểu thức LOD FIXED đầy đủ được dùng để tính tổng lợi nhuận theo danh mục trước khi chia cho Category Customer Base. Phần mẫu số của công thức cũng có thể được tạo trước thành một measure riêng.
Gắn nhãn các danh mục có ít khách hàng
Một cách khác để dùng Category Customer Base như một trường LOD là gắn nhãn mỗi danh mục dựa trên quy mô tệp khách hàng của nó. Nếu một danh mục có số khách hàng ít hơn mức trung bình của ba danh mục, nó sẽ được gắn nhãn Limited Base. Ngược lại sẽ là Normal. Chúng ta có thể tạo trường này bằng công thức sau và đặt tên là Limited Categories.
IF [Category Customer Base] < {AVG([Category Customer Base])} THEN "Limited Base" ELSE "Normal" END
Tài nguyên và học thêm
Trong bài viết này, chúng ta đã thấy cách tạo distinct count qua cả Measure Names shelf, cũng như bằng Calculated Fields với hàm COUNTD(). Với Calculated Fields, ta dùng cả dạng đơn giản và cả biểu thức LOD. Cuối cùng, ta tận dụng kiến thức để minh họa cách một nhà phân tích kinh doanh có thể tạo ra các chỉ số và KPI phức tạp hơn.
Nếu bạn hứng thú với những gì đã thấy trong hướng dẫn này và đang bắt đầu với Tableau, bạn có thể xem lộ trình kỹ năng Những điều cơ bản về Tableau. Nếu bạn muốn được chứng nhận là nhà phân tích dữ liệu với Tableau, hãy xem lộ trình nghề nghiệp Data Analyst in Tableau có kèm chứng chỉ, và đón chờ thêm các hướng dẫn Tableau khác từ DataCamp!

Tác giả
Islam Salahuddin
Islam là một tư vấn dữ liệu tại The KPI Institute. Xuất thân từ ngành báo chí, Islam có nhiều mối quan tâm đa dạng, bao gồm viết lách, triết học, truyền thông, công nghệ và văn hóa.
Frequently Asked Questions
Sự khác nhau giữa Count và Distinct Count là gì?
Count đếm tất cả các giá trị trong trường, còn Distinct Count chỉ đếm các giá trị duy nhất.
Khi nào tôi nên dùng Distinct Count thay vì Count?
Hãy dùng distinct count khi một cột trong bộ dữ liệu có lặp lại và bạn cần chỉ đếm các giá trị duy nhất.
Hàm cho Distinct Count trong Tableau là gì?
Bạn có thể thực hiện distinct count với hàm COUNTD() trong calculation fields của Tableau.
Tôi có thể dùng hàm `COUNTD()` trong biểu thức LOD của Tableau không?
Chắc chắn là được!
Tableau không chỉ là một công cụ trực quan hóa dữ liệu. Là một trong những nền tảng business intelligence hàng đầu, Tableau cung cấp các khả năng phân tích mạnh mẽ có thể thực hiện qua giao diện người dùng hoặc bằng hệ thống công thức Calculated Fields toàn diện của nó.
Trong bài viết này, chúng ta sẽ tìm hiểu cách thực hiện phép đếm giá trị phân biệt (count distinct) trong Tableau. Chúng tôi sẽ giải thích distinct count là gì, các cách thực hiện, và trình bày cách phát triển từ đó để tính các chỉ số kinh doanh hữu ích làm ví dụ.
Nếu bạn mới làm quen với Tableau, bạn có thể thấy Hướng dẫn Tableau cho người mới bắt đầu của chúng tôi hữu ích để khởi đầu. Ngoài ra, hãy cân nhắc tham gia khóa học Giới thiệu về Tableau hoặc khám phá lộ trình kỹ năng Những điều cơ bản về Tableau.
Nhập dữ liệu vào Tableau
Trước tiên, chúng ta sẽ cần lấy một số dữ liệu. Chúng ta sẽ sử dụng bộ dữ liệu “Superstore Sales” nổi tiếng của Tableau. Để tải bộ dữ liệu từ Tableau Public (hoặc Desktop), hãy làm theo các bước sau:
Đang tải bộ dữ liệu mẫu. GIF bởi Tác giả.
Bây giờ, để nhập bộ dữ liệu vào Tableau:
Nhập dữ liệu vào Tableau. GIF bởi Tác giả.