添加自定义列
在Metabase中创建自定义列以计算新的指标或清理你的数据
Metabase 允许您利用其他列的信息即时创建新字段。例如,您可以选择
- 添加两列
- 提取日期的一部分
- 根据逻辑条件定义新列
Metabase 将这些新派生列称为“自定义列”。
要创建自定义列,您可以使用 自定义表达式,它们类似于电子表格中的公式或 SQL 中的函数。例如,您可以使用 substring
函数提取文本部分,并使用 case
根据条件定义值。
在本教程中,我们将介绍自定义列的一些常见用法。我们将使用 Sample Database 中的 Analytic Events
表,该表包含一个虚构产品的事件数据。我们将构建一些有助于产品分析的自定义列示例。
添加自定义列
基于 Analytic Events
表启动一个新的查询构建器问题。
要添加自定义列,请单击“数据”块下方的灰色按钮。
您将看到 Metabase 表达式编辑器。您可以使用快捷键组合或提取列中的数据,或编写自己的表达式。在开始之前,请注意以下几点:
- 在表达式编辑器中使用
[]
来引用列,如[Timestamp]
,或[Accounts → Timestamp]
用于联合表的列。幸运的是,您不需要亲自输入完整的列名(或括号),因为 Metabase 会提供自动完成选项。 - 您可以在自定义表达式中使用操作符,如
OR
、AND
、<
、=
、!=
。 - 某些自定义表达式受到数据库限制。请参阅我们的文档以获取完整列表。
SQL 专家注意
在 SQL 中,列操作(如 Total + Tax
或 DateDiff(Created_At, Canceled_at, 'week')
)和聚合(如 SUM(Total)
或 AVG(Quantity)
)都在 SELECT
子句中定义。在 Metabase 查询构建器中,这些是不同的查询阶段:列上的操作符和函数在自定义列块中定义,但列上的聚合在单独的汇总块中定义。您无法在自定义列中使用类似 Sum
、Count
的聚合,但您可以在汇总块中定义自定义汇总。
请参阅我们关于如何汇总数据的教程以了解更多信息。
提取和组合列
您可以从日期或 URL 列中提取部分,并将列连接在一起。
例如,您可能对事件活动在一天中的分布情况感兴趣:人们最活跃的小时是哪些?
-
要添加自定义列,请单击“数据”块下方的灰色按钮。
您可以添加表达式、提取或组合列。
-
在“快捷方式”下的表达式编辑器中,选择提取列。
提取快捷方式与URL列或时间戳列一起使用。对于URL列,您可以选择提取主机、域名或子域名。对于时间戳列,您可以提取日期或时间的部分。
-
选择
时间戳
列,并提取一天中的小时
您将看到一个带有表达式
hour([Timestamp])
的自定义表达式编辑器。所有快捷方式所做的只是预先填充表达式。 - 单击完成以保存自定义列并关闭编辑器。
- 预览结果。
您将看到一个新列一天中的小时
,其时间戳在午夜到凌晨1点之间为0,在凌晨1点到2点之间为1,依此类推。
处理文本
您可以使用自定义列来清理、格式化或操作文本。
例如,分析事件中的URL形式为www.piespace.example/<path>
。因为每个URL的域名都相同,所以只使用路径部分进行分析是有意义的。但是,提取URL 快捷方式只能提取主机、域名或子域名。对于路径,您需要编写自己的自定义表达式
-
通过单击“自定义列”块中的+创建新的自定义列,并在“表达式”字段中输入表达式
regexextract([Page URL], "/.*")
regexextract
使用正则表达式抓取以/
开头的页面URL
部分。有关regexextract
表达式的更多信息,请参阅我们的文档。 - 将列命名为
URL路径
并单击完成。 -
预览结果。
其他有用的文本函数:replace
、substring
、concat
。有关完整列表,请参阅字符串函数。
处理日期
您可以使用日期自定义表达式来查找两个日期之间的差异、添加或减去时间段或提取日期的部分。
例如,如果您对新旧访客的行为差异感兴趣,可以创建一个包含账户创建和事件之间经过的天数的列。
-
通过单击“自定义列”块中的+创建新的自定义列,并在“表达式”字段中输入表达式
datetimeDiff([Account → Created At],[Timestamp], "day")
Created At
列位于Account
表中,而不是用作问题源的Analytic Events
表。但Account
与Analytic Events
表(通过Account ID列)连接,因此Metabase可以使用关于Analytic Events
的问题中的Account
列中的数据。您只需指定列来自不同的表即可使用→
。更多关于
datetimeDiff
表达式的信息,请查看我们的文档。点击这里。 - 将列保存为
Days since creation
(稍后我们将使用此名称)。 -
预览结果。
其他有用的日期函数:datetimeAdd
、convertTimezone
、now
。完整列表请见日期函数。
进行数学运算
您可以使用自定义表达式进行常规的数学运算,包括对列和数字进行操作:例如,可以将两个列相加,将列乘以100,或使用round
将值四舍五入到整数。
在上一个步骤中,您使用datetimeDiff
表达式计算了分析事件和账户创建之间相隔的天数。如果您需要以周为单位显示这个数字,您可以使用相同的datetimeDiff
自定义表达式,并将周期设置为“weeks”,但这样只能得到完整周数。如果您想知道账户是3.5周大,可以将天数除以7。
-
通过单击“自定义列”块中的+创建新的自定义列,并在“表达式”字段中输入表达式
[Days since creation] / 7
这里
[Days since creation]
是您在上一个步骤中创建的自定义列的名称(您可以在定义新列时引用其他自定义列)。 -
将列保存为
Weeks since creation
并预览结果。
有关数学函数的完整列表,请见数学函数。
添加if-then逻辑
在前两个步骤中,您计算了事件发生时账户的年龄(以周为单位)。假设您想使用这些信息来查看新账户与现有账户的事件。为此,您首先需要根据事件发生时账户的年龄将账户分类为“新”或“现有”。在Metabase中,使用case
语句定义逻辑语句(类似于SQL中的CASE
,但与电子表格不同,电子表格中使用IF
函数来完成此目的)。
-
通过单击“自定义列”块中的+创建新的自定义列,并在“表达式”字段中输入表达式
case([Weeks since creation] < 52, "New", "Existing")
新的列将包含“新”,对于小于一年(52周)的账户的事件,否则为“现有”。
更多关于
case
表达式的信息,请查看我们的文档。点击这里。 -
将列保存为
Account status
并预览结果。
其他有用的逻辑函数:coalesce
、isnull
。完整列表请见逻辑函数。
使用自定义列构建查询和图表
自定义列与表列的工作方式相同,因此您可以在过滤器、摘要和构建图表中使用它们。
例如,我们可以查看新账户在整个一天中不同事件的分布。
-
添加新账户和非空URL路径的过滤器
您需要将过滤器操作更改为默认的“包含”。
-
按小时计算每个URL路径的事件数。
自定义列应该会自动出现在分组块中。
-
可视化
当您在查询构建器中点击“可视化”时,Metabase将自动构建一个交叉表。为了更好地可视化每日模式数据,您可以将图表切换为折线图或面积图。
顺便说一下,截图中的图表开启了一些额外的可视化设置,使其看起来更美观。在“数据”标签页中尝试调整系列设置(每个系列旁边的三个点菜单)看看是否能让你的图表看起来一样。
关于新账户事件,我们可以说什么呢?我们发现所有事件都遵循类似的模式:大多数事件在上午和下午早些时候触发,午餐期间有所下降。但是访问 /help
页面的访问量在晚上7点左右有一个额外的峰值。
下一步
除了新列之外,还可以使用自定义表达式来构建复杂的过滤器或摘要。查看关于自定义表达式的扩展教程。
下一步:使用仪表板过滤器
如何使用过滤器让你的仪表板更有用和互动