添加自定义列

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

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

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

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

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

在本教程中,我们将介绍自定义列的一些常见用法。我们将使用 Sample Database 中的 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. 选择时间戳列,并提取一天中的小时

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

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

Hour of day

您将看到一个新列一天中的小时,其时间戳在午夜到凌晨1点之间为0,在凌晨1点到2点之间为1,依此类推。

处理文本

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

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

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

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

    regexextract使用正则表达式抓取以/开头的页面URL部分。有关regexextract表达式的更多信息,请参阅我们的文档

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

    URL custom col

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

处理日期

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

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

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

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

    Created At列位于Account表中,而不是用作问题源的Analytic Events表。但AccountAnalytic Events表(通过Account ID列)连接,因此Metabase可以使用关于Analytic Events的问题中的Account列中的数据。您只需指定列来自不同的表即可使用

    更多关于 datetimeDiff 表达式的信息,请查看我们的文档。点击这里

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

    Days since creation

其他有用的日期函数:datetimeAddconvertTimezonenow。完整列表请见日期函数

进行数学运算

您可以使用自定义表达式进行常规的数学运算,包括对列和数字进行操作:例如,可以将两个列相加,将列乘以100,或使用round将值四舍五入到整数。

在上一个步骤中,您使用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周)的账户的事件,否则为“现有”。

    更多关于 case 表达式的信息,请查看我们的文档。点击这里

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

Account status

其他有用的逻辑函数:coalesceisnull。完整列表请见逻辑函数

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

自定义列与表列的工作方式相同,因此您可以在过滤器、摘要和构建图表中使用它们。

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

  1. 添加新账户和非空URL路径的过滤器

    您需要将过滤器操作更改为默认的“包含”。

    Filter operation

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

    自定义列应该会自动出现在分组块中。

    Summarize

  3. 可视化

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

Final chart

顺便说一下,截图中的图表开启了一些额外的可视化设置,使其看起来更美观。在“数据”标签页中尝试调整系列设置(每个系列旁边的三个点菜单)看看是否能让你的图表看起来一样。

关于新账户事件,我们可以说什么呢?我们发现所有事件都遵循类似的模式:大多数事件在上午和下午早些时候触发,午餐期间有所下降。但是访问 /help 页面的访问量在晚上7点左右有一个额外的峰值。

下一步

除了新列之外,还可以使用自定义表达式来构建复杂的过滤器或摘要。查看关于自定义表达式的扩展教程。

下一步:使用仪表板过滤器

如何使用过滤器让你的仪表板更有用和互动

下一篇文章