如何在 Tableau 中进行唯一计数
在 Tableau 中进行唯一计数有两种方式:通过度量名称(Measure Names)搁架,或通过计算字段(Calculated Field)。计算字段的优势在于可复用,且能扩展以创建更复杂的度量。与每次都需重新设置的“即用型”方法相比,从长远看效率更高。我们先从较简单的度量名称搁架开始。
使用度量名称搁架进行唯一计数
在执行唯一计数前,我们先搭建一个简单可视化。从一个基础柱状图开始,按 Superstore 目录中各产品类别的购买客户数量进行对比。
首先,前往 “Sheet 1(工作表 1)",将 Category 拖到行区域,将 Customer ID 拖到列区域。由于 Customer ID 是维度列(分类数据),它将显示为蓝色。并且由于其不同值过多,Tableau 会询问您是否要添加该列的所有成员。此时请选择 Add all members(添加所有成员)。
现在,我们将把 Customer ID 作为度量来统计每个类别购买过商品的唯一客户数量。具体操作如下:
- 前往 Columns(列) 搁架。
- 在下拉菜单中,转到 Measure(度量)。
- 注意选项包含 Count(计数) 和 Count (Distinct)(唯一计数)。我们选择 Count (Distinct)。

通过度量名称搁架进行唯一计数。作者制作的 GIF。
大功告成!各产品类别的唯一客户数量就出来了。我们看到 Office Supplies 类别有 788 位客户。

各产品类别的唯一客户。作者拍摄的图片。
Tableau 中的 Count 与 Count Distinct
在继续之前,让我们以 Customer ID 为例看看计数与唯一计数的区别。为展示差异,我们可以在列搁架上再添加一个 Customer ID 字段。重复之前的步骤,但这次从 Measures(度量) 菜单中选择 Count 而非 Count (Distinct)。
即使此时视图看起来有些奇怪也不必担心,我们马上就会调整。继续前往右上角的 Show Me 选项卡,并选择其中一个柱状图选项。

比较计数与唯一计数。作者制作的 GIF。
在结果视图中,我们看到每个产品类别的计数(灰色柱)与唯一计数(浅绿色柱)的对比。二者的差值就是重复客户 ID 的数量。我们还发现 Office Supplies 是两种计数差距最大的类别,因此其客户群的购买频率最高。

使用柱状图比较计数与唯一计数。作者拍摄的图片。
使用计算字段进行唯一计数
通过度量搁架创建唯一计数的方法简单快捷,但也有一个明显的缺点:如果我们需要在同一视图或新工作表中再次添加 Customer ID 的唯一计数,就必须重复相同步骤。此外,若想基于客户的唯一计数构建新的度量,也需要从头创建。换言之,使用度量名称搁架得到的是一次性聚合,而非永久度量。
要创建永久的唯一计数,我们需要创建一个使用 COUNTD() 函数的计算字段。接下来我们将用两种方式来实现:
-
简单的
COUNTD()计算字段 -
结合 LOD 表达式的
COUNTD()
简单的 COUNTD() 计算字段
在我们通过度量名称搁架创建唯一计数的背后,Tableau 实际上调用了 COUNTD() 函数,它会对每个唯一的 Customer ID 只计一次。此前的方法是将聚合放在搁架上执行,而未将其作为度量存入字段列表。
要将其作为度量存入字段列表,我们需要创建一个计算字段。要为数据集中的客户创建一个简单的唯一计数计算字段,步骤如下:
-
在左侧 Data(数据) 窗格搜索栏旁点击小向下箭头。
-
在下拉菜单中选择 Create Calculated Field…(创建计算字段…)。
-
在弹出窗口中为字段命名:
Unique Customers,并填写如下公式:COUNTD([Customer ID])。 -
注意完成公式后,底部会显示 “The calculation is valid(计算有效)”,这是好消息。点击OK(确定)。
-
现在该计算字段已永久列在度量列表中。我们将搁架中的
CNTD(Customer ID)替换为新建的计算字段。结果相同,符合预期。

使用计算字段进行唯一计数。作者制作的 GIF。
结合 LOD 表达式的 COUNTD()
我们可以在明细级别(LOD)表达式中使用 COUNTD(),为每个产品类别创建客户的唯一计数。这将为类别客户基数提供一个永久度量,便于后续用于更复杂的度量。
为此,我们按照创建计算字段的相同步骤进行,但这次命名为 Category Customer Base,并编写以下公式:
{FIXED [Category]: COUNTD([Customer ID])}

在 LOD 表达式中进行唯一计数。作者制作的 GIF。
如果您刚接触 LOD 表达式,建议阅读我们的Tableau 中的 LOD 表达式教程。不过在本文范围内,您只需知道上述公式的作用是分别统计每个类别的唯一客户。我们用花括号 {} 表示 LOD 表达式,用 FIXED 指定唯一计数的明细级别为 Category 列。
在 Tableau 中用唯一计数创建 KPI
创建计算字段的一个好处是:它们可以在其他度量中复用,而无需每次从零编写完整公式。
因此,将 COUNTD() 与计算字段结合使用是一种非常实用的技巧,能帮助您快速推进并发现新洞见。它可以帮助我们统计订单、客户或产品数量,这些本身就是业务指标,或用于计算更复杂的 KPI,例如人均客户利润或单笔订单的平均数量等。下面看看我们可以如何利用 COUNTD() 获取有价值且与业务相关的洞见。
人均订单数
我们可以将 Unique Customers 与一个计算“人均订单数”的新度量配合使用。新建一个计算字段,命名为 Avg Orders per Customer,其公式如下:
COUNT([Order ID])/[Unique Customers]
获得折扣客户的占比
类似地,我们可以更进一步,计算在其任一订单中获得较高折扣(例如超过 50%)的客户占 Superstore 全部客户的比例。为此,我们将使用一个将逻辑函数与 COUNTD() 函数结合的公式。
COUNTD(IF [Discount] > 0.5 THEN [Customer ID] END)/[Unique Customers]
客户留存率
我们可以再将 COUNTD() 与 IF 结合,计算更复杂的指标,例如留存率。因此,要计算数据集中最近一年内下过单的客户占全部客户的比例,我们创建一个 Customer Retention Rate 字段,公式如下:
COUNTD(IF YEAR([Order Date]) = {MAX(YEAR([Order Date]))} THEN [Customer ID] END)/[Unique Customers]
此处使用 LOD 表达式获取整个数据集的最大(最近)年份,并与每行的年份比较;若相等,则该客户在最近一年仍有下单,应被计入;否则不会被 COUNTD() 计算。
类别渗透率
我们可以在一个公式中同时使用 Category Customer Base 与 Unique Customers,来计算一个 KPI:各类别客户数占数据集总体客户数的比例。将其命名为 Category Penetration Ratio(类别渗透率)。
[Category Customer Base]/{[Unique Customers]}
与前一个公式类似,这里用花括号 {} 标识的 LOD 表达式用于计算整个数据集的唯一客户数。之所以需要这样做,是因为 Category Customer Base 计算字段的聚合层级不同。
各类别人均利润
要计算各类别的人均利润,我们可以创建 Avg Profit per Customer in Each Category,其定义如下:
{FIXED [Category]: SUM([Profit])}/[Category Customer Base]
此处使用完整的 FIXED LOD 表达式先计算每个类别的总利润,再除以 Category Customer Base。该公式中的分母部分也可以先单独创建为一个度量。
标注客户有限的类别
我们也可以将 Category Customer Base 作为 LOD 字段来标注各类别的客户规模。如果某一类别的客户数低于三个类别的平均值,则标注为 Limited Base;否则标注为 Normal。我们可以使用以下公式创建该字段,并命名为 Limited Categories。
IF [Category Customer Base] < {AVG([Category Customer Base])} THEN "Limited Base" ELSE "Normal" END
资源与进阶学习
本文介绍了如何通过度量名称搁架以及使用带有 COUNTD() 函数的计算字段来创建唯一计数。在计算字段部分,我们既展示了简单形式,也展示了 LOD 表达式。最后,我们利用所学展示了一名业务分析师如何创建更复杂的指标与 KPI。
如果您对本教程感兴趣,且正开始学习 Tableau,可查看我们的Tableau 基础技能路径。若您希望获得 Tableau 数据分析师认证,请查看我们的Tableau 数据分析师职业路径(提供认证)。敬请关注 DataCamp 即将推出的更多 Tableau 教程!

作者
Islam Salahuddin
Islam 是 The KPI Institute 的数据顾问。拥有新闻学背景的他兴趣广泛,涵盖写作、哲学、媒体、技术与文化。
常见问题
Count 与 Distinct Count 有何区别?
“计数”统计字段中的所有值,而“唯一计数”只统计不重复的唯一值。
何时应使用 Distinct Count 而不是 Count?
当数据集中的某列存在重复值且您只需统计其唯一值时,请使用唯一计数。
Tableau 中用于唯一计数的函数是什么?
您可以在 Tableau 的计算字段中使用 COUNTD() 函数实现唯一计数。
我可以在 Tableau 的 LOD 表达式中使用 `COUNTD()` 吗?
当然可以!
Tableau 不仅仅是一个数据可视化工具。作为领先的商业智能平台之一,Tableau 提供强大的分析能力,既可通过用户界面完成,也可借助其全面的计算字段公式实现。
在本文中,我们将学习如何在 Tableau 中执行唯一计数操作。我们将解释什么是唯一计数、可采用的不同方法,并展示如何在此基础上构建示例来计算具有洞见的业务指标。
如果您是 Tableau 新手,不妨先阅读我们的Tableau 初学者教程以快速入门。也可以考虑参加我们的Tableau 入门课程,或探索我们的Tableau 基础技能路径。
在 Tableau 中导入数据
首先,我们需要获取一些数据。我们将使用 Tableau 著名的 “Superstore Sales(超级商店销售)” 数据集。要从 Tableau Public(或 Desktop)下载该数据集,请按照以下步骤操作:
下载示例数据集。作者制作的 GIF。
接下来,将数据集导入 Tableau:
将数据导入 Tableau。作者制作的 GIF。