自定义表达式

自定义表达式就像电子表格软件(例如 Excel、Google Sheets 和 LibreOffice Calc)中的公式一样。它们是查询构建器编辑器中的强大工具,可让您提出更复杂的问题。
您也可以直接跳到完整的表达式列表。
自定义表达式用于创建过滤器、指标和自定义列
要使用自定义表达式编辑器,请创建自定义列(其中自定义表达式用作字段公式来计算新列的值),或者单击过滤器或汇总,然后选择自定义表达式。
在使用查询构建器时,您可以使用表达式来创建新的
- 自定义列。您可以使用
[Subtotal] / [Quantity]来创建一个名为“Item price”的新列。 - 过滤器。表达式
contains([comment], "Metabase")将过滤comment字段包含“Metabase”一词的行。 - 汇总。也称为指标或聚合。
Share([Total] > 50)将返回总金额大于 50 美元的订单的百分比。
键入您的表达式,为其命名,然后单击完成。如果“完成”按钮变灰,请检查您的表达式是否有效,并且您已为表达式命名(您在表达式编辑器底部输入)。
此页面涵盖了表达式的基础知识。您可以查看 Metabase 中的完整表达式列表,或通过教程了解如何在笔记本编辑器中使用自定义表达式。
表达式类型
表达式有两种基本类型:聚合和函数。查看完整的表达式列表。
聚合
聚合从多行中获取值以执行计算,例如查找列中所有值的平均值。聚合函数只能在笔记本编辑器的汇总部分使用,因为聚合使用该列所有行中的值。因此,虽然您可以创建一个自定义列,公式为 [Subtotal] + [Tax],但您不能编写 Sum([Subtotal] + [Tax]),除非您正在创建自定义指标表达式(该表达式将加总所有的小计和税金)。
函数
相比之下,函数对列中的每个值执行操作,例如在每个值中搜索单词(contains)、将每个值向上舍入到最接近的整数(ceil 函数)等。
函数浏览器

表达式编辑器包含一个函数浏览器,可帮助您查找所需的函数。要查看浏览器,请打开表达式编辑器右侧的f。另请参阅函数和聚合列表。
自动格式化

要格式化表达式,请单击表达式编辑器右侧的自动格式化按钮(花括号中环绕的闪电符号)。
基本数学运算符
对具有数值(例如整数、浮点数和双精度数)的数值列使用 +、-、*(乘法)、/(除法)。您可以使用括号 ( 和 ) 来分组表达式的各个部分。
例如,您可以创建一个计算订单总计和小计之间差值的新列:[Total] - [Subtotal]。
要对时间戳列进行数学运算,您可以使用日期函数,例如dateDiff。
条件和布尔逻辑运算符
比较运算符
>>=(大于或等于)<<=(小于或等于)=!=(不等于)
用于逻辑联集、析取和否定的布尔运算符
ANDORNOT
例如,您可以创建一个过滤器,用于加利福尼亚州或佛蒙特州的客户:[State] = "CA" OR [State] = "VT"。
您还可以将条件与 case 函数(别名 if)结合使用。
case([Size] = "L", "LARGE", [SIZE] = "M", "MEDIUM", "SMALL")
请参阅case。
引用其他列
您可以引用当前表中的列,或通过外键关系连接的列。列名应包含在方括号中,如下所示:[列名]。连接表的列可以这样引用:[ConnectedTableName.Column]。
引用细分和指标
您可以引用当前选定表中存在的已保存指标和细分。编写方式与引用列相同,如下所示:[Valid User Sessions]。
过滤器表达式和条件
关于过滤器表达式和条件的一些注意事项
- 过滤器表达式的不同之处在于它们必须返回布尔值(真或假)。例如,您可以编写
[Subtotal] + [Tax] < 100。Metabase 将查看每一行,计算其小计和税金的总和,然后检查该总和是否小于 100。如果是,则该语句评估为真,Metabase 将在结果中包含该行。但是,如果您(错误地)编写[Subtotal] + [Tax],Metabase 将不知道该如何处理,因为该表达式不评估为真或假。 AND和OR等逻辑运算符的参数必须是布尔值。例如,“[Subtotal] < 100 AND [Tax] > 12`。”- 您可以在
CountIf和SumIf聚合的条件部分中使用函数,如下所示:CountIf( round([Subtotal]) > 100 OR floor([Tax]) < 10 )。
在过滤器表达式中使用日期
如果您想在过滤器表达式中使用日期,日期必须遵循格式 "YYYY-MM-DD" — 即,年份四个字符,月份两个字符,日期两个字符,用引号 " 括起来,并用连字符 - 分隔。
示例
between([Created At], "2020-01-01", "2020-03-31") OR [Received At] > "2019-12-25"
此表达式将返回 Created At 在 2020 年 1 月 1 日至 2020 年 3 月 31 日之间,或 Received At 在 2019 年 12 月 25 日之后的行。
表达式列表
查看完整的表达式列表。
有关表达式的教程,请参阅查询构建器中的自定义表达式。
阅读其他版本的 Metabase 的文档。