表达式列表

有关表达式的介绍,请查看自定义表达式概览

聚合

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

平均值

返回列中值的平均值。

语法:Average(列)

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

计数

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

语法:Count

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

条件计数

仅计算条件为真的行。

语法:CountIf(条件)

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

去重计数

此列中不同值的数量。

语法:Distinct(列)

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

最大值

返回列中找到的最大值。

语法:Max(列)

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

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

中位数

返回指定列的中位数。

语法:Median(列)

示例:Median([年龄]) 将找到年龄的中点值,其中一半年龄较大,一半年龄较小。

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

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

最小值

返回列中找到的最小值。

语法:Min(列)

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

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

百分位数

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

语法:Percentile(列, 百分位数值)

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

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

占比

以十进制形式返回数据中与条件匹配的行百分比。

语法:Share(条件)

示例:Share([颜色] = "蓝色") 将返回“颜色”字段设置为“蓝色”的行数,除以总行数。

标准差

计算列的标准差,它是衡量一组数值离散程度的指标。标准差低表示数值集中在均值附近,而标准差高表示数值分布在较宽的范围内。

语法: StandardDeviation(column)

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

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

总和

将列的所有值相加。

语法: Sum(column)

示例: Sum([Subtotal])Subtotal 列中的所有值相加。

条件求和

仅对条件为真的行,将指定列的值相加。

语法: SumIf(column, condition)

示例:SumIf([Subtotal], [Order Status] = "Valid") 将订单状态为“Valid”的所有小计相加。

方差

返回给定列的数值方差。

语法: Variance(column)

示例: Variance([Temperature]) 将返回该列中所有温度值相对于平均温度的离散程度。

相关函数: StandardDeviation, Average

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

函数

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

逻辑函数

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

介于

如果日期或数字列的值落在指定的范围内,则返回 true。否则返回 false。

语法: between(column, start, end)

示例: 如果您使用表达式 between([Created At], "2019-01-01", "2020-12-31") 进行过滤,Metabase 将返回该表达式返回 true 的行,在本例中,Created At 日期落在 2019 年 1 月 1 日和 2020 年 12 月 31 日的范围之内,包括开始日期 (2019-01-01) 和结束日期 (2020-12-31)。

相关函数: interval

条件

case (别名 if) 根据一系列情况测试表达式,并返回第一个匹配情况的对应值,如果所有情况都不匹配,则返回可选的默认值。

语法: case(condition, output, …)

示例: case([Weight] > 200, "Large", [Weight] > 150, "Medium", "Small") 如果 Weight 为 250,则表达式将返回“Large”。在本例中,默认值为“Small”,因此任何 Weight 小于等于 150 的值都将返回“Small”。

合并

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

语法: coalesce(value1, value2, …)

示例: coalesce([Comments], [Notes], "No comments")。如果 CommentsNotes 列在该行中都为空,则表达式将返回字符串“No comments”。

如果

ifcase 的别名。根据一系列条件测试表达式,并返回第一个匹配情况的对应值,如果所有情况都不匹配,则返回可选的默认值。

语法: if(condition, output, ...)

示例: if([Weight] > 200, "Large", [Weight] > 150, "Medium", "Small") 如果 Weight 为 250,则表达式将返回“Large”。在本例中,默认值为“Small”,因此任何 Weight 小于等于 150 的值都将返回“Small”。

为空

如果列为空,则返回 true。

语法: isnull(column)

示例: isnull([Tax]) 如果该行的列中没有值,则返回 true。

相关函数: notnull, isempty

非空

如果列包含值,则返回 true。

语法: notnull(column)

示例: notnull([Tax]) 如果该行的列中存在值,则返回 true。

相关函数: isnull, notempty

数学函数

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

绝对值

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

语法: abs(column)

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

向上取整

将小数向上舍入(ceil,如天花板)。

语法: ceil(column)

示例: ceil([Price])ceil(2.99) 将返回 3。

相关函数: floor, round

指数

返回 欧拉数 e 的指定次幂。(欧拉听起来像“Oy-ler”)。

语法: exp(column)

示例: exp([Interest Months])

相关函数: power

向下取整

将小数向下舍入。

语法: floor(column)

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

相关函数: ceil, round

对数

返回以 10 为底的对数。

语法: log(column)

示例: log([Value])

将数字提升到指数值的幂。

语法: power(column, exponent)

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

不支持 power 的数据库:SQLite。

相关函数: exp

四舍五入

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

语法: round(column)

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

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

平方根

返回值的平方根。

语法: sqrt(column)

示例: sqrt([Hypotenuse])

不支持 sqrt 的数据库:SQLite。

相关函数: Power

字符串函数

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

连接

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

语法: concat(value1, value2, …)

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

包含

检查 string1 是否包含 string2

默认执行区分大小写的匹配。您可以传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: contains(string1, string2) 用于区分大小写的匹配。

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

示例: contains([Status], "Class")

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

相关函数: doesNotContain, regexextract

不包含

检查 string1 是否包含 string2

默认执行区分大小写的匹配。您可以传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: doesNotContain(string1, string2) 用于区分大小写的匹配。

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

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

相关函数: contains, regexextract

域名

从 URL 或电子邮件中提取域名。

语法: domain(urlOrEmail)

示例: domain([Page URL])。如果 [Page URL] 列的值为 https://metabase.net.cn,则 domain([Page URL]) 将返回 metabasedomain([Email]) 将从 [email protected] 中提取 metabase

相关函数: host, subdomain

结尾为

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

默认执行区分大小写的匹配。您可以传递可选参数 "case-insensitive" 来执行不区分大小写的匹配。

语法: endsWith(text, comparison) 用于区分大小写的匹配。

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

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

相关函数: startsWith, contains, doesNotContain

主机

从 URL 或电子邮件中提取主机名,即域名和顶级域名。

语法: host(urlOrEmail)

示例: host([Page URL])。如果 [Page URL] 列的值为 https://metabase.net.cn,则 host([Page URL]) 将返回 metabase.comhost([Email]) 将从 [email protected] 中提取 metabase.com

相关函数: domain, subdomain

在列表中

如果 value1 等于 value2(或 value3 等,如果指定),则返回 true。

in(value1, value2, ...)

value1 是要检查的列或值。

value2, ... 是要检查的列或值列表。

相关函数: contains, startsWith, endsWith

为空

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

语法: isempty(column)

示例: isempty([Feedback]) 如果 Feedback 是空字符串 ('') 或不包含值,则返回 true。

相关函数: notempty, isnull

左侧裁剪

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

语法: ltrim(text)

示例: ltrim([Comment])。如果注释为 " 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。

相关函数: isempty, isnull, notnull

正则提取

⚠️ 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.”。

相关函数: 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。

相关函数: endsWith, contains, doesNotContain

子域名

从 URL 中提取子域名。忽略 www(返回空字符串)。

语法: subdomain(url)

示例: subdomain([Page URL])。如果 [Page URL] 列的值为 https://status.metabase.com,则 subdomain([Page URL]) 将返回 status

相关函数: host, domain

子字符串

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

语法: substring(text, position, length)

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

相关函数: regexextract, replace

裁剪

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

语法: trim(text)

示例: trim([Comment]) 将删除注释两侧的任何空格字符。

大写

返回所有大写文本的字符串。

语法: upper(text)

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

日期函数

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

转换时区

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

语法: convertTimezone(column, target, source)

示例: convertTimezone("2022-12-28T12:00:00", "Canada/Pacific", "Canada/Eastern") 将返回 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)。

相关函数: between, datetimeSubtract

日期时间差

返回两个日期时间之间的时间差,以某个时间单位表示。例如,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)。

相关函数: between, datetimeAdd

获取日期时间并返回月份中的日期,以整数形式表示。

语法: day([datetime column])

示例: day("2021-03-25T12:52:37") 将返回日期,以整数形式表示,25

日名称

给定星期几的数字 (1-7),返回星期几的本地化名称。遵循每周的第一天设置

语法: dayName(dayNumber)

示例: dayName(1) 将返回 Sunday,除非您更改每周的第一天设置

相关函数: quarterName, monthName

小时

获取日期时间并返回小时,以整数形式表示 (0-23)。

语法: hour([datetime column])

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

间隔

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

语法: interval(column, number, text)

示例: interval([Created At], -1, "month")

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

相关函数: between

分钟

获取日期时间并返回分钟,以整数形式表示 (0-59)。

语法: minute([datetime column])

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

获取日期时间并返回月份数字 (1-12),以整数形式表示。

语法: month([datetime column])

示例: month("2021-03-25T12:52:37") 将返回月份,以整数形式表示,3

月名称

返回给定月份的本地化短名称。

语法: monthName([Birthday Month])

示例: monthName(10) 将返回十月份的 Oct

相关函数: dayName, quarterName

现在

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

语法: now

季度

获取日期时间并返回一年中的季度数 (1-4),以整数形式表示。

语法: quarter([datetime column])

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

季度名称

给定季度数 (1-4),返回类似 Q1 的字符串。

语法: quarterName([Fiscal Quarter])

示例: quarterName(3) 将返回 Q3

相关函数: dayName, monthName

相对日期时间

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

语法: relativeDateTime(number, text)

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

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

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

示例: [Orders → Created At] < relativeDateTime(-30, "day") 将过滤出当前日期 30 天前创建的订单。

相关函数: datetimeAdd, datetimeSubtract

获取日期时间并返回分钟中的秒数 (0-59),以整数形式表示。

语法: second([datetime column])

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

timeSpan

获取指定长度的时间间隔。

语法: timeSpan(number, text)

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

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

示例: [Orders → Created At] + timeSpan(7, "day") 将返回 Created At 日期后 7 天的日期。

获取日期时间并返回周数,以整数形式表示。

语法: week(column, mode)

示例: week("2021-03-25T12:52:37") 将返回周数,以整数形式表示,12

  • column:日期或日期时间值列的名称。
  • mode:可选。
    • ISO:(默认)第 1 周从 1 月份第一个星期四之前的星期一开始。
    • US:第 1 周从 1 月 1 日开始。所有其他周从星期日开始。
    • Instance:第 1 周从 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([datetime column])

示例: year("2021-03-25T12:52:37") 将返回年份 2021,以整数形式表示,2021

窗口函数

窗口函数只能在汇总部分中使用。它们不能用于创建自定义列或自定义过滤器。

累计计数

有关更多信息,请查看我们关于累积函数的页面。

跨越分组的行的累加总数。

语法: CumulativeCount

示例: CumulativeCount

累计总和

有关更多信息,请查看我们关于累积函数的页面。

跨越分组的列的滚动总和。

语法: CumulativeSum(column)

示例: CumulativeSum([Subtotal])

相关函数: SumSumIf

偏移量

⚠️ Offset 函数目前不适用于 MySQL/MariaDB、MongoDB 和 Druid。

有关更多信息,请查看我们关于Offset的页面。

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

语法: Offset(expression, rowOffset)

expression 是要从不同行获取的值。

rowOffset 是相对于当前行的数字。例如,-1 表示上一行,或 1 表示下一行。

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

限制

数据库限制

上面针对每个聚合和函数都注明了限制,这里总结如下

H2(包括 Metabase 示例数据库): MedianPercentileconvertTimezoneregexextract

AthenaconvertTimezone

DatabricksconvertTimezone

DruidMedianPercentileStandardDeviationpowerlogexpsqrtOffset。函数 regexextract 仅适用于 Druid-JDBC 驱动程序。

MongoDBMedianPercentilepowerlogexpsqrtOffsetregexextract

MariaDBMedianPercentileOffset

MySQLMedianPercentileOffset

PrestoconvertTimezone。仅为 MedianPercentile 提供近似结果。

RedshiftAverage 将为整数列返回整数结果

SparkSQLconvertTimezone

SQL ServerMedianPercentileregexextract

SQLiteexplogMedianPercentilepowerregexextractStandardDeviationsqrtVariance

VerticaMedianPercentile

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

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

阅读其他Metabase 版本的文档。