表达式列表

有关表达式的介绍,请参阅自定义表达式概述

聚合

聚合表达式考虑字段中的所有值。它们只能在查询构建器的“汇总”部分使用。

平均值

返回列中值的平均值。

语法:Average(column)

示例:Average([数量])将返回数量字段的平均值。

计数

返回所选数据中的行数(也称为记录)。

语法:Count

示例:如果表或结果返回10行,则Count将返回10

如果计数

仅计算条件为真的行。

语法:CountIf(condition)

示例:CountIf([小计] > 100)将返回小计大于100的行数。

不同的

此列中不同值的数量。

语法:Distinct(column)

Distinct([姓氏])。返回列中唯一姓氏的数量。重复(例如姓氏“Smith”)不计入。

最大值

返回列中找到的最大值。

语法:Max(column)

示例:Max([年龄])将返回年龄列中所有值中的最大年龄。

相关:最小值平均值中位数

中位数

返回指定列的中位数值。

语法:Median(column)

示例:Median([年龄])将找到中点年龄,其中一半的年龄更高,一半的年龄更低。

不支持median的数据库:Druid、MariaDB、MongoDB、MySQL、SQLite、Vertica和SQL Server。Presto仅提供近似结果。

相关:最小值最大值平均值

最小值

返回列中最小值。

语法:Min(column)

示例:Min([薪水])将找到薪水列中所有薪水中的最低薪水。

相关:最大值中位数平均值

百分位数

返回列在百分位数处的值。

语法:Percentile(column, percentile-value)

示例:Percentile([分数], 0.9)将返回该列90百分位数的值。

不支持百分位数的数据库:Druid、H2、MariaDB、MySQL、MongoDB、SQL Server、SQLite、Vertica。Presto只提供近似结果。

分享

返回满足条件的数据行所占的百分比,以小数形式表示。

语法:Share(condition)

示例:Share([Color] = "Blue")将返回将Color字段设置为Blue的行数,除以总行数。

标准差

计算列的标准差,它是衡量一组值变异程度的指标。低标准差表示值围绕平均值聚集,而高标准差表示值在较宽的范围内分散。

语法:StandardDeviation(column)

示例:StandardDeviation([Population])将返回Population列中值的SD。

不支持StandardDeviation的数据库:Druid、SQLite。

总和

计算列中所有值的总和。

语法:Sum(column)

示例:Sum([Subtotal])将计算Subtotal列中的所有值。

如果总和

仅对条件为真的行计算指定的列的总和。

语法:SumIf(column, condition)

示例:SumIf([Subtotal], [Order Status] = "Valid")将计算状态为“Valid”的所有订单的子总金额。

方差

返回给定列的数值方差。

语法:Variance(column)

示例:Variance([Temperature])将返回该列中所有温度值的平均值偏差的度量。

相关:StandardDeviationAverage

不支持Variance的数据库:Druid、SQLite。

函数

函数表达式适用于每个单独的值。它们可以用来更改或过滤列中的值,或创建新的、自定义的列。

逻辑函数

逻辑函数确定一个条件是否满足,或根据条件确定要返回的值。

between

检查日期或数字列的值,看它们是否在指定的范围内。

语法:between(column, start, end)

示例:between([Created At], "2019-01-01", "2020-12-31")将返回Created At日期在2019年1月1日至2020年12月31日范围内的行。

相关:interval

case

将表达式与一系列情况进行比较,并返回第一个匹配情况的对应值,如果没有任何其他情况,则可选默认值。

语法:case(condition, output, …)

示例:case([Weight] > 200, "Large", [Weight] > 150, "Medium", "Small")如果重量为250,表达式将返回“Large”。在这种情况下,默认值为“Small”,因此任何重量150或更小的都将返回“Small”。

coalesce

按顺序查看每个参数中的值,并为每一行返回第一个非空值。

语法:coalesce(value1, value2, …)

示例:coalesce([评论], [备注], "无评论")。如果该行的评论备注列都是空值,表达式将返回字符串“无评论”。

isnull

如果列是空值则返回true。

语法:isnull(列)

示例:isnull([税])将返回true,如果该行该列没有值。

相关:notnullisempty

notnull

如果列包含一个值则返回true。

语法:notnull(列)

示例:notnull([税])将返回true,如果该行该列有一个值。

相关:isnullnotempty

数学函数

数学函数实现了常见的数学运算。

abs

返回指定列的绝对值(正值)。

语法:abs(列)

示例:abs([债务])。如果债务为-100,abs(-100)将返回100。

ceil

向上舍入小数(向上取整)。

语法:ceil(列)

示例:ceil([价格])。如果ceil(2.99),将返回3。

相关:floorround

exp

返回欧拉数 e,以提供的数字为幂。 (Euler听起来像“Oy-ler”)。

语法:exp(列)

示例:exp([利息月数])

相关:power

floor

向下舍入小数。

语法:floor(列)

示例:floor([价格])。如果价格为1.99,表达式将返回1。

相关:ceilround

日志

返回数字的10为底的对数。

语法:log(列)

示例:log([值])

功率

将一个数字提升为指数值的幂。

语法:power(列, 指数)

示例:power([长度], 2)。如果长度为3,表达式将返回9(3的平方是3*3)。

不支持power的数据库:SQLite。

相关:exp

舍入

将小数四舍五入到最接近的整数。

语法:round(列)

示例:round([温度])。如果温度为13.5摄氏度,表达式将返回14

示例:round([温度] * 10) / 10。如果温度为100.75,表达式将返回100.8

平方根

返回一个值的平方根。

语法:sqrt(列)

示例:sqrt([斜边])

不支持sqrt的数据库:SQLite。

相关: 电力

字符串函数

字符串函数用于操作或验证字符串数据。

连接

将两个或多个字符串组合在一起。

语法: concat(value1, value2, …)

示例: concat([姓氏], ", ", [名字]) 将生成格式为“姓氏, 名字”的字符串,例如“Palazzo, Enrico”。

包含

检查 string1 是否包含 string2

默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: contains(string1, string2) 用于大小写敏感匹配。

contains(string1, string2, "case-insensitive") 用于不区分大小写匹配。

示例: contains([状态], "Class")

如果 状态 为“Classified”,则表达式将返回 true。如果 状态 为“classified”,则表达式将返回 false,因为大小写不匹配。

相关: doesNotContainregexextract

不包含

检查 string1 是否包含 string2

默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: doesNotContain(string1, string2) 用于大小写敏感匹配。

doesNotContain(string1, string2, "case-insensitive") 用于不区分大小写匹配。

示例: doesNotContain([状态], "Class")。如果 状态 为“Classified”,则表达式将返回 false

相关: containsregexextract

以...结束

如果文本的末尾与比较文本匹配,则返回 true。

默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: endsWith(text, comparison) 用于大小写敏感匹配。

endsWith(text, comparison, "case-insensitive") 用于不区分大小写匹配。

示例: endsWith([Appetite], "hungry")

相关: startsWithcontainsdoesNotContain

是否为空

如果 字符串列 包含空字符串或为 null,则返回 true。在非字符串列上调用此函数将导致错误。您可以使用 isnull 来处理非字符串列。

语法: isempty(column)

示例: isempty([反馈]) 如果 反馈 是一个空字符串('')或者没有值,则返回 true。

相关: notemptyisnull

去除左空格

从文本字符串中删除前导空格。

语法: ltrim(text)

示例: ltrim([评论])。如果评论是 " I'd prefer not to",则 ltrim 将返回 "I'd prefer not to"

相关: trimrtrim

长度

返回文本中的字符数。

语法: length(text)

示例: length([Comment])。如果 comment 为“wizard”,则 length 返回 6(“wizard”有六个字符)。

小写

返回所有小写字母的字符串。

语法: lower(text)

示例: lower([Status])。如果 Status 为“QUIET”,则表达式返回“quiet”。

相关: upper

非空

如果字符串列包含非空字符串值,则返回 true。对非字符串列调用此函数将导致错误。您可以在非字符串列上使用 notnull

语法: notempty(column)

示例: notempty([Feedback]) 如果 Feedback 包含非空字符串值('')则返回 true。

相关: isemptyisnullnotnull

正则提取

⚠️ regexextract 在 MongoDB、SQLite 和 SQL Server 中不可用。对于 Druid,regexextract 仅在 Druid-JDBC 驱动程序中可用。

根据正则表达式提取匹配的子字符串。

语法: regexextract(text, regular_expression)

示例: regexextract([Address], "[0-9]+")

不支持 regexextract 的数据库:H2、SQL Server、SQLite。

相关: containsdoesNotContainsubstring

替换

将输入文本中所有出现的搜索文本替换为替换文本。

语法: replace(text, find, replace)

示例: replace([Title], "Enormous", "Gigantic")

去除右空格

从字符串文本中删除尾随空格。

语法: rtrim(text)

示例: rtrim([Comment])。如果评论为“Fear is the mindkiller. “,则表达式返回“Fear is the mindkiller。”

相关: trimltrim

以...开始

如果文本的开头与比较文本匹配,则返回 true。默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: startsWith(text, comparison) 用于大小写敏感匹配。

startsWith(text, comparison, "case-insensitive") 用于不区分大小写的匹配。

示例: startsWith([Course Name], "Computer Science") 对于以“Computer Science”开头的课程名称(如“Computer Science 101: An introduction”)将返回 true。

对于“Computer science 201: Data structures”,将返回 false,因为“science”的大小写与比较文本中的大小写不匹配。

startsWith([Course Name], "Computer Science", "case-insensitive") 对于“Computer Science 101: An introduction”和“Computer science 201: Data structures”都将返回 true。

相关: endsWithcontainsdoesNotContain

子串

返回由起始位置和长度指定的文本部分。

语法: substring(text, position, length)

示例:substring([标题], 1, 10) 返回字符串的前10个字母(字符串索引从位置1开始)。

相关:regexextractreplace

去除空格

从文本字符串中删除前后空白字符。

语法:trim(text)

示例:trim([注释]) 将删除注释两侧的所有空白字符。

大写

将文本全部转换为大写。

语法:upper(text)

示例:upper([状态])。如果状态是“hyper”,则 upper("hyper") 将返回“HYPER”。

日期函数

日期函数用于操作、提取或创建日期和时间值。

转换时区

将日期或时间戳值转换为指定的时区。

语法:convertTimezone(column, target, source)

示例:convertTimezone("2022-12-28T12:00:00", "加拿大/太平洋", "加拿大/东部") 将返回值 2022-12-28T09:00:00,显示为 2022年12月28日,上午9:00

请参阅 数据库限制 以了解 convertTimezone

日期时间增加

向日期或时间戳值添加一些时间单位。

语法:datetimeAdd(column, amount, unit)

示例:datetimeAdd("2021-03-25", 1, "month") 将返回值 2021-04-25,显示为 2021年4月25日

amount 必须是整数,不能是分数。例如,您不能添加“半年”(0.5)。

相关:betweendatetimeSubtract

日期时间差

返回两个日期时间之间的时间差。例如,datetimeDiff(d1, d2, "day") 将返回 d1d2 之间的天数。

语法:datetimeDiff(datetime1, datetime2, unit)

示例:datetimeDiff("2022-02-01", "2022-03-01", "month") 将返回 1

请参阅 数据库限制 以了解 datetimediff

日期时间减去

从日期或时间戳值中减去一些时间单位。

语法:datetimeSubtract(column, amount, unit)

示例:datetimeSubtract("2021-03-25", 1, "month") 将返回值 2021-02-25,显示为 2021年2月25日

amount 必须是整数,不能是分数。例如,您不能减去“半年”(0.5)。

相关:betweendatetimeAdd

天数

将日期时间转换为月份的天数整数。

语法:day([日期时间列])

示例:day("2021-03-25T12:52:37") 将返回天数作为整数,25

小时数

将日期时间转换为小时(0-23)整数。

语法:hour([日期时间列])

示例:hour("2021-03-25T12:52:37") 将返回 12

间隔

检查日期列的值是否在相对范围内。

语法:interval(column, number, text)

示例:interval([创建时间], -1, "month")

number 必须是整数。您不能使用分数值。

相关:between

分钟数

接受一个日期时间并返回作为整数的分钟(0-59)。

语法:minute([日期时间列])

示例:minute("2021-03-25T12:52:37")会返回52

月份

接受一个日期时间并返回月份(1-12)作为整数。

语法:month([日期时间列])

示例:month("2021-03-25T12:52:37")会返回月份作为整数,3

现在

使用您的Metabase 报告时区返回当前日期和时间。

语法:now

季度

接受一个日期时间并返回作为整数的年份中的季度数(1-4)。

语法:quarter([日期时间列])

示例:quarter("2021-03-25T12:52:37")会返回第一季度,即1

相对日期时间

获取相对于当前时间的相对时间戳。

语法:relativeDateTime(number, text)

number:间隔的周期,负值表示过去的时间。该number必须是整数。您不能使用小数。

text:间隔类型,如"day""month""year"

relativeDateTime只能作为条件表达式的一部分使用。

示例:[订单 → 创建时间] < relativeDateTime(-30, "day")将筛选出当前日期前30天创建的订单。

相关:datetimeAdddatetimeSubtract

秒数

接受一个日期时间并返回作为整数的分钟中的秒数(0-59)。

语法:second([日期时间列])

示例:second("2021-03-25T12:52:37")会返回整数37

timeSpan

获取指定长度的时段。

语法:timeSpan(number, text)

number:间隔的周期,负值表示过去的时间。该number必须是整数。您不能使用小数。

text:间隔类型,如"day""month""year"

示例:[订单 → 创建时间] + timeSpan(7, "day")将返回创建时间日期后的7天。

周数

接受一个日期时间并返回作为整数的周数。

语法:week(column, mode)

示例:week("2021-03-25T12:52:37")会返回周数作为整数,12

  • column:日期或日期时间值的列名。
  • mode:可选。
    • ISO:(默认)第一周从一月第一个星期四之前的星期一开始。
    • US:第一周从1月1日开始,其他所有周从星期日开始。
    • Instance:第一周从1月1日开始。其他所有周从您的Metabase本地化设置中定义的天开始。

星期数

接受一个日期时间并返回一个表示星期天数的整数(1-7)。

语法:weekday(column)

  • column:日期时间列。

示例

case(
  weekday([Created At]) = 1, "Sunday",
  weekday([Created At]) = 2, "Monday",
  weekday([Created At]) = 3, "Tuesday",
  weekday([Created At]) = 4, "Wednesday",
  weekday([Created At]) = 5, "Thursday",
  weekday([Created At]) = 6, "Friday",
  weekday([Created At]) = 7, "Saturday")

年份

接受一个日期时间并返回作为整数的年份。

语法:year([日期时间列])

示例:year("2021-03-25T12:52:37")会返回年份2021作为整数,2,021

窗口函数

窗口函数只能用于“总结”部分。不能用于创建自定义列或自定义过滤器。

累计计数

更多详情,请查看我们关于累积函数的页面。

在分组中行数的累加总和。

语法:CumulativeCount

示例:CumulativeCount

累计总和

更多详情,请查看我们关于累积函数的页面。

在分组中一列的滚动总和。

语法:CumulativeSum(column)

示例:CumulativeSum([Subtotal])

相关:求和求和条件

偏移量

⚠️ 目前Offset函数在MySQL/MariaDB、MongoDB和Druid中不可用。

更多详情,请查看我们关于偏移的页面。

返回不同行表达式的值。《偏移》只能在查询构建器的“总结”步骤中使用(您不能使用Offset来创建自定义列)。

语法:Offset(expression, rowOffset)

《表达式》是从不同行获取的值。

《行偏移》是相对于当前行的数字。例如,-1为上一行,1为下一行。

示例:`Offset(Sum([Total]), -1)`将从上一行获取`Sum([Total])`的值。

限制

  • 《聚合表达式》只能在查询构建器的“总结”部分中使用。

数据库限制

每个聚合和函数的限制已在上面注明,以下为总结:

Hydro2(包括Metabase Sample Database):`Median`、`Percentile`、`convertTimezone`和`regexextract`。

Athena:`convertTimezone`。

Databricks:`convertTimezone`。

Druid:`Median`、`Percentile`、`StandardDeviation`、`power`、`log`、`exp`、`sqrt`、`Offset`。函数`regexextract`仅适用于Druid-JDBC驱动程序。

MongoDB:`Median`、`Percentile`、`power`、`log`、`exp`、`sqrt`、`Offset`、`regexextract`。

MariaDB:`Median`、`Percentile`、`Offset`。

MySQL:`Median`、`Percentile`、`Offset`。

Presto:`convertTimezone`。仅对`Median`和`Percentile`提供近似结果。

Redshift:`Average`将为整数列返回整数结果

SparkSQL:`convertTimezone`。

SQL Server:支持MedianPercentileregexextract

SQLite:支持explogMedianPercentilepowerregexextractStandardDeviationsqrtVariance

Vertica:支持MedianPercentile

如果您正在使用或维护第三方数据库驱动程序,请查阅维基百科以了解您的驱动程序可能受到的影响。

查看我们在查询构建器中的自定义表达式教程,了解更多信息。

阅读关于其他Metabase版本的文档。

想要改进这些文档? 提出更改。