表达式列表
有关表达式的介绍,请参阅自定义表达式概述。
-
函数
聚合
聚合表达式考虑字段中的所有值。它们只能在查询构建器的“汇总”部分使用。
平均值
返回列中值的平均值。
语法: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])
将返回该列中所有温度值的平均值偏差的度量。
不支持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,如果该行该列没有值。
notnull
如果列包含一个值则返回true。
语法:notnull(列)
示例:notnull([税])
将返回true,如果该行该列有一个值。
数学函数
数学函数实现了常见的数学运算。
abs
返回指定列的绝对值(正值)。
语法:abs(列)
示例:abs([债务])
。如果债务
为-100,abs(-100)
将返回100。
ceil
向上舍入小数(向上取整)。
语法:ceil(列)
。
示例:ceil([价格])
。如果ceil(2.99)
,将返回3。
exp
返回欧拉数 e,以提供的数字为幂。 (Euler听起来像“Oy-ler”)。
语法:exp(列)
。
示例:exp([利息月数])
相关:power。
floor
向下舍入小数。
语法:floor(列)
示例:floor([价格])
。如果价格
为1.99,表达式将返回1。
日志
返回数字的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
,因为大小写不匹配。
相关: doesNotContain,regexextract。
不包含
检查 string1
是否包含 string2
。
默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive"
来执行不区分大小写的匹配。
语法: doesNotContain(string1, string2)
用于大小写敏感匹配。
doesNotContain(string1, string2, "case-insensitive")
用于不区分大小写匹配。
示例: doesNotContain([状态], "Class")
。如果 状态
为“Classified”,则表达式将返回 false
。
相关: contains,regexextract。
以...结束
如果文本的末尾与比较文本匹配,则返回 true。
默认情况下执行大小写敏感匹配。您可以通过传递可选参数 "case-insensitive"
来执行不区分大小写的匹配。
语法: endsWith(text, comparison)
用于大小写敏感匹配。
endsWith(text, comparison, "case-insensitive")
用于不区分大小写匹配。
示例: endsWith([Appetite], "hungry")
相关: startsWith,contains,doesNotContain。
是否为空
如果 字符串列 包含空字符串或为 null,则返回 true。在非字符串列上调用此函数将导致错误。您可以使用 isnull 来处理非字符串列。
语法: isempty(column)
示例: isempty([反馈])
如果 反馈
是一个空字符串(''
)或者没有值,则返回 true。
去除左空格
从文本字符串中删除前导空格。
语法: ltrim(text)
示例: ltrim([评论])
。如果评论是 " I'd prefer not to"
,则 ltrim
将返回 "I'd prefer not to"
。
长度
返回文本中的字符数。
语法: 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。
正则提取
⚠️
regexextract
在 MongoDB、SQLite 和 SQL Server 中不可用。对于 Druid,regexextract
仅在 Druid-JDBC 驱动程序中可用。
根据正则表达式提取匹配的子字符串。
语法: regexextract(text, regular_expression)
。
示例: regexextract([Address], "[0-9]+")
。
不支持 regexextract
的数据库:H2、SQL Server、SQLite。
相关: contains、doesNotContain、substring。
替换
将输入文本中所有出现的搜索文本替换为替换文本。
语法: replace(text, find, replace)
。
示例: replace([Title], "Enormous", "Gigantic")
。
去除右空格
从字符串文本中删除尾随空格。
语法: rtrim(text)
。
示例: rtrim([Comment])
。如果评论为“Fear is the mindkiller. “,则表达式返回“Fear is the mindkiller。”
以...开始
如果文本的开头与比较文本匹配,则返回 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。
相关: endsWith、contains、doesNotContain。
子串
返回由起始位置和长度指定的文本部分。
语法: substring(text, position, length)
。
示例:substring([标题], 1, 10)
返回字符串的前10个字母(字符串索引从位置1开始)。
相关:regexextract、replace。
去除空格
从文本字符串中删除前后空白字符。
语法: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)。
日期时间差
返回两个日期时间之间的时间差。例如,datetimeDiff(d1, d2, "day")
将返回 d1
和 d2
之间的天数。
语法: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)。
相关:between、datetimeAdd。
天数
将日期时间转换为月份的天数整数。
语法: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天创建的订单。
相关:datetimeAdd、datetimeSubtract。
秒数
接受一个日期时间并返回作为整数的分钟中的秒数(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:支持Median
、Percentile
和regexextract
。
SQLite:支持exp
、log
、Median
、Percentile
、power
、regexextract
、StandardDeviation
、sqrt
和Variance
。
Vertica:支持Median
和Percentile
。
如果您正在使用或维护第三方数据库驱动程序,请查阅维基百科以了解您的驱动程序可能受到的影响。
查看我们在查询构建器中的自定义表达式教程,了解更多信息。
阅读关于其他Metabase版本的文档。