添加自定义列

在 Metabase 中创建自定义列以计算新指标或清理数据

Metabase 允许您使用其他列的信息即时创建新字段。例如,您可以

  • 添加两列
  • 提取日期的一部分
  • 根据逻辑条件定义新列

Metabase 将这些新派生列称为“自定义列”。

要创建自定义列,您可以使用自定义表达式,它们类似于电子表格中的公式或 SQL 中的函数。例如,您可以使用 substring 函数提取文本的一部分,并使用 case 根据条件定义值。

在本教程中,我们将介绍自定义列的一些最常见用例。我们将使用示例数据库中的 Analytic Events 表,其中包含假想产品的事件数据。我们将构建可用于产品分析的自定义列示例。

添加自定义列

基于 Analytic Events 表开始一个新的查询构建器问题。

要添加自定义列,请单击“数据”块下方的灰色按钮。

您将看到 Metabase 表达式编辑器。您可以使用快捷方式组合或提取列中的数据,或编写自己的表达式。在开始之前,请注意以下几点

  • 在表达式编辑器中使用 [] 来引用列,例如 [Timestamp],或对于联接表中的列使用 [Accounts → Timestamp]。幸运的是,您无需自己输入完整的列名(或方括号),因为 Metabase 会在您开始输入时为您提供自动补全选项。
  • 您可以在自定义表达式中使用 ORAND<=!= 等运算符。
  • 某些自定义表达式存在数据库限制。请查阅我们的文档以获取完整列表。

SQL 专家注意事项

在 SQL 中,列操作(如 Total + TaxDateDiff(Created_At, Canceled_at, 'week'))和聚合(如 SUM(Total)AVG(Quantity))都在 SELECT 子句中定义。在 Metabase 查询构建器中,它们是不同的查询阶段:列上的运算符和函数在自定义列块中定义,但列上的聚合在单独的“汇总”块中定义。您无法在自定义列中使用 SumCount 等聚合,但可以在“汇总”块中定义自定义汇总。

请查看我们关于如何汇总数据的教程以了解更多信息。

提取和组合列

您可以提取日期或 URL 列的一部分,并将列连接在一起。

例如,您可能对事件活动在一天中的分布方式感兴趣:人们最活跃的时间是哪些小时?

  1. 要添加自定义列,请单击“数据”块下方的灰色按钮。

    您可以添加表达式,或提取或组合列。

  2. 快捷方式下的表达式编辑器中,选择提取列

    提取快捷方式适用于 URL 列或时间戳列。对于 URL 列,您可以选择提取主机、域或子域。对于时间戳列,您可以提取日期或时间的一部分。

  3. 选择 Timestamp 列并提取 Hour of day

    您将看到带有表达式 hour([Timestamp]) 的自定义表达式编辑器。所有快捷方式都只是为您预填充表达式。

  4. 单击完成以保存自定义列并关闭编辑器。
  5. 预览结果。

Hour of day

您将在结果中看到一个新列 Hour of day,其中 0 表示午夜 12 点到凌晨 1 点之间的时间戳,1 表示凌晨 1 点到凌晨 2 点之间的时间戳,依此类推。

处理文本

您可以使用自定义列来清理、格式化或操作文本。

例如,分析事件中的 URL 格式为 www.piespace.example/<path>。由于每个 URL 的域都相同,因此仅使用 path 部分进行分析是合理的。但是提取 URL 快捷方式只能提取主机、域或子域。对于路径,您需要编写自己的自定义表达式

  1. 通过单击自定义列块中的 + 创建一个新自定义列,并在表达式字段中输入表达式

    regexextract([Page URL], "/.*")
    

    regexextract 使用正则表达式抓取 Page URL 中以 / 开头的部分。在我们的文档中阅读更多关于 regexextract 表达式的信息。

  2. 将列命名为 URL Path 并单击完成
  3. 预览结果。

    URL custom col

其他有用的文本函数:replacesubstringconcat。请参阅字符串函数以获取完整列表。

处理日期

您可以使用日期自定义表达式来查找两个日期之间的差异、添加或减去时间段,或提取日期的一部分。

例如,如果您对新访客和旧访客的行为差异感兴趣,您可以创建一个包含帐户创建和事件之间经过天数的列。

  1. 通过单击自定义列块中的 + 创建一个新自定义列,并在表达式字段中输入表达式

    datetimeDiff([Account → Created At],[Timestamp], "day")
    

    Created At 列位于 Account 表中,而不是作为问题源的 Analytic Events 表中。但由于 Account 通过账户 ID 列与 Analytic Events 表连接,Metabase 可以在关于 Analytic Events 的问题中使用 Account 列中的数据。您只需使用 指定列来自不同的表即可。

    我们的文档中阅读更多关于 datetimeDiff 表达式的信息。

  2. 将列保存为 Days since creation(我们稍后会引用此名称)。
  3. 预览结果。

    Days since creation

其他有用的日期函数:datetimeAddconvertTimezonenow。请参阅日期函数以获取完整列表。

进行数学运算

您可以使用自定义表达式对列和数字执行常见的数学运算:例如,您可以将两列相加、将列乘以 100,或将值四舍五入为整数。

在之前的步骤中,您使用 datetimeDiff 表达式计算了分析事件与账户创建之间的天数。如果您需要以周为单位的数字,您可以使用相同的 datetimeDiff 自定义表达式并指定 "weeks" 周期,但这样您只能得到完整的周数。如果您想知道账户是 3.5 周大,可以将天数除以 7

  1. 通过单击自定义列块中的 + 创建一个新自定义列,并在表达式字段中输入表达式

    [Days since creation] / 7
    

    这里 [Days since creation] 是您在上一步中创建的自定义列的名称(您可以在定义新列时引用其他自定义列)。

  2. 将列保存为 Weeks since creation 并预览结果。

    Weeks since creation

请参阅数学函数以获取完整的数学函数列表。

添加 If-Then 逻辑

在之前的两个步骤中,您计算了事件发生时账户的周龄。假设您想使用此信息来查看新账户与现有账户的事件。为此,您需要首先根据事件发生时的年龄将账户分类为“新”或“现有”。在 Metabase 中,逻辑语句使用 case 语句定义(类似于 SQL 中的 CASE,但不同于电子表格,电子表格中使用 IF 函数)。

  1. 通过单击自定义列块中的 + 创建一个新自定义列,并在表达式字段中输入表达式

    case([Weeks since creation] < 52, "New", "Existing")
    

    新列对于不满一年(52 周)的账户事件显示 "New",否则显示 "Existing"

    我们的文档中阅读更多关于 case 表达式的信息。

  2. 将列保存为 Account status 并预览结果。

Account status

其他有用的逻辑函数:coalesceisnull。请参阅逻辑函数以获取完整的逻辑函数列表。

使用自定义列构建查询和图表

自定义列的作用与表列相同,因此您可以在筛选器、汇总和构建图表时使用它们。

例如,我们可以查看新账户在一天中不同事件的分布情况。

  1. 为新账户和非空 URL 路径添加筛选器

    您需要将筛选器操作从默认的“包含”更改。

    Filter operation

  2. 按小时统计每个 URL 路径的事件。

    自定义列应直接显示在分组依据块中。

    Summarize

  3. 可视化

    当您在查询构建器中单击“可视化”时,Metabase 将自动构建一个数据透视表。为了更好地可视化日常模式数据,您可以切换到折线图或面积图。

Final chart

顺便说一句,截图中的图表开启了一些额外的可视化设置,使其看起来更美观。您可以尝试数据选项卡中系列设置(数据选项卡中每个系列的三点菜单),看看是否能使您的图表看起来相同。

那么关于新账户事件,我们可以说些什么呢?我们看到所有事件都遵循相似的模式:大部分事件在早上和下午早些时候触发,午餐时间则有所下降。但对 /help 页面的访问在晚上 7 点左右出现了一个额外的峰值。

下一步

自定义表达式不仅可以用于创建新列,还可以用于构建复杂的筛选器或汇总。请查看关于自定义表达式的扩展教程。

下一步:使用仪表盘筛选器

如何使用筛选器使您的仪表盘更有用、更具交互性

下一篇文章
© . All rights reserved.