跳至主要内容

Tableau 唯一计数(Count Distinct):按部就班学会

了解如何通过“度量名称”搁架与“计算字段”在 Tableau 中进行唯一计数。探索 COUNTD() 与 FIXED LOD 表达式以执行更高级的计算。
· 10分钟 阅读

使用 AI 探索

Tableau 不仅仅是一个数据可视化工具。作为领先的商业智能平台之一,Tableau 提供强大的分析能力,既可通过用户界面完成,也可借助其全面的计算字段公式实现。

在本文中,我们将学习如何在 Tableau 中执行唯一计数操作。我们将解释什么是唯一计数、可采用的不同方法,并展示如何在此基础上构建示例来计算具有洞见的业务指标。

如果您是 Tableau 新手,不妨先阅读我们的Tableau 初学者教程以快速入门。也可以考虑参加我们的Tableau 入门课程,或探索我们的Tableau 基础技能路径。

在 Tableau 中导入数据

首先,我们需要获取一些数据。我们将使用 Tableau 著名的 “Superstore Sales(超级商店销售)” 数据集。要从 Tableau Public(或 Desktop)下载该数据集,请按照以下步骤操作:

  1. 在右侧窗格选择Explore sample data sets(探索示例数据集)。这将会在浏览器中打开一个网页。
  2. 在 “Superstore Sales” 数据集上点击Download(下载)。
  3. 将文件保存到您的计算机。

从 Tableau 下载示例数据集

下载示例数据集。作者制作的 GIF。

接下来,将数据集导入 Tableau:

  1. 在左侧的Connect(连接)窗格中选择Microsoft Excel。
  2. 选择 “Superstore Sales” 文件。这将打开Data Source 页面。
  3. 可以看到该文件包含三个工作表。我们将使用第一个 “Orders(订单)" 工作表。从左侧将其拖到上方中间区域。我们看到该表包含 22 个字段和 9,994 行。

将数据导入 Tableau

将数据导入 Tableau。作者制作的 GIF。

如何在 Tableau 中进行唯一计数

在 Tableau 中进行唯一计数有两种方式:通过度量名称(Measure Names)搁架,或通过计算字段(Calculated Field)。计算字段的优势在于可复用,且能扩展以创建更复杂的度量。与每次都需重新设置的“即用型”方法相比,从长远看效率更高。我们先从较简单的度量名称搁架开始。

使用度量名称搁架进行唯一计数 

在执行唯一计数前,我们先搭建一个简单可视化。从一个基础柱状图开始,按 Superstore 目录中各产品类别的购买客户数量进行对比。

首先,前往 “Sheet 1(工作表 1)",将 Category 拖到行区域,将 Customer ID 拖到列区域。由于 Customer ID 是维度列(分类数据),它将显示为蓝色。并且由于其不同值过多,Tableau 会询问您是否要添加该列的所有成员。此时请选择 Add all members(添加所有成员)。

现在,我们将把 Customer ID 作为度量来统计每个类别购买过商品的唯一客户数量。具体操作如下: 

  1. 前往 Columns(列) 搁架。
  2. 在下拉菜单中,转到 Measure(度量)。
  3. 注意选项包含 Count(计数) 和 Count (Distinct)(唯一计数)。我们选择 Count (Distinct)。

在 Tableau 中通过度量名称搁架进行唯一计数

通过度量名称搁架进行唯一计数。作者制作的 GIF。

大功告成!各产品类别的唯一客户数量就出来了。我们看到 Office Supplies 类别有 788 位客户。

包含唯一计数的 Tableau 柱状图

各产品类别的唯一客户。作者拍摄的图片。

Tableau 中的 Count 与 Count Distinct

在继续之前,让我们以 Customer ID 为例看看计数与唯一计数的区别。为展示差异,我们可以在列搁架上再添加一个 Customer ID 字段。重复之前的步骤,但这次从 Measures(度量) 菜单中选择 Count 而非 Count (Distinct)。

即使此时视图看起来有些奇怪也不必担心,我们马上就会调整。继续前往右上角的 Show Me 选项卡,并选择其中一个柱状图选项。

包含计数与唯一计数的 Tableau 柱状图

比较计数与唯一计数。作者制作的 GIF。

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

包含计数与唯一计数的 Tableau 柱状图

使用柱状图比较计数与唯一计数。作者拍摄的图片。

使用计算字段进行唯一计数

通过度量搁架创建唯一计数的方法简单快捷,但也有一个明显的缺点:如果我们需要在同一视图或新工作表中再次添加 Customer ID 的唯一计数,就必须重复相同步骤。此外,若想基于客户的唯一计数构建新的度量,也需要从头创建。换言之,使用度量名称搁架得到的是一次性聚合,而非永久度量。

要创建永久的唯一计数,我们需要创建一个使用 COUNTD() 函数的计算字段。接下来我们将用两种方式来实现:

  1. 简单的 COUNTD() 计算字段

  2. 结合 LOD 表达式的 COUNTD()

简单的 COUNTD() 计算字段

在我们通过度量名称搁架创建唯一计数的背后,Tableau 实际上调用了 COUNTD() 函数,它会对每个唯一的 Customer ID 只计一次。此前的方法是将聚合放在搁架上执行,而未将其作为度量存入字段列表。

要将其作为度量存入字段列表,我们需要创建一个计算字段。要为数据集中的客户创建一个简单的唯一计数计算字段,步骤如下:

  1. 在左侧 Data(数据) 窗格搜索栏旁点击小向下箭头。

  2. 在下拉菜单中选择 Create Calculated Field…(创建计算字段…)。

  3. 在弹出窗口中为字段命名:Unique Customers,并填写如下公式:COUNTD([Customer ID])。

  4. 注意完成公式后,底部会显示 “The calculation is valid(计算有效)”,这是好消息。点击OK(确定)。

  5. 现在该计算字段已永久列在度量列表中。我们将搁架中的 CNTD(Customer ID) 替换为新建的计算字段。结果相同,符合预期。

如何在 Tableau 中使用 COUNTD() 通过计算字段实现唯一计数

使用计算字段进行唯一计数。作者制作的 GIF。

结合 LOD 表达式的 COUNTD()

我们可以在明细级别(LOD)表达式中使用 COUNTD(),为每个产品类别创建客户的唯一计数。这将为类别客户基数提供一个永久度量,便于后续用于更复杂的度量。

为此,我们按照创建计算字段的相同步骤进行,但这次命名为 Category Customer Base,并编写以下公式:

{FIXED [Category]: COUNTD([Customer ID])}

使用 COUNTD() 与 LOD 表达式进行唯一计数

在 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 Salahuddin

Islam 是 The KPI Institute 的数据顾问。拥有新闻学背景的他兴趣广泛,涵盖写作、哲学、媒体、技术与文化。

常见问题

Count 与 Distinct Count 有何区别?

“计数”统计字段中的所有值,而“唯一计数”只统计不重复的唯一值。

何时应使用 Distinct Count 而不是 Count?

当数据集中的某列存在重复值且您只需统计其唯一值时,请使用唯一计数。

Tableau 中用于唯一计数的函数是什么?

您可以在 Tableau 的计算字段中使用 COUNTD() 函数实现唯一计数。

我可以在 Tableau 的 LOD 表达式中使用 `COUNTD()` 吗?

当然可以!

主题