现在

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

使用当前日期或时间创建条件逻辑

假设您有一些项目数据,并且您想为每个任务添加一个状态列。我们假设今天的日期和时间是 2022 年 11 月 22 日,12:00:00。

任务 开始 截止日期 状态
草稿 2022 年 11 月 1 日,12:00:00 2022 年 11 月 30 日,12:00:00 进行中
审核 2022 年 11 月 15 日,12:00:00 2022 年 11 月 19 日,12:00:00 需要延期
编辑 2022 年 11 月 22 日,12:00:00 2022 年 11 月 22 日,12:00:00 立即截止!

要将任务标记为进行中,您可以使用表达式

now() >= [Start] AND now() < [Deadline]

要检查是否需要申请延期

now() >= [Start] AND now() >= [Deadline]

如果您追求刺激(并且拥有实时数据),您可以标记那些 *此刻* 截止的任务

now() = [Deadline]

要设置结合上述三种情况的状态列,您需要将所有内容包装在一个 case 表达式中

case(now() >= [Start] AND now() < [Deadline], "In progress",
     now() >= [Start] AND now() >= [Deadline], "Needs extension",
     now() = [Deadline], "DUE RIGHT NOW!")

数据类型

数据类型 now() 返回
字符串
数字
时间戳
布尔值
JSON

now 如果您的数据库支持时区,则返回 带时区的时间戳,否则返回 无时区的时间戳

有关这些数据类型在 Metabase 中行为的更多信息,请参阅时区

限制

如果您的 Metabase 报告时区与您所在的本地时区不同,那么 now 可能不是 *当前* 时间(您的本地时间)。

如果您需要将 now 与不同时区的列进行比较,请使用 convertTimezone 将两个列都转换为同一时区。例如

convertTimezone(now, 'UTC', <report timezone>) >= convertTimezone([Deadline], 'UTC', <source time zone>)

实现相同功能的不同方法,因为尽管您很想更多地使用自定义表达式,但现在还不是时候。

SQL

当您使用查询构建器运行问题时,Metabase 会将您的查询构建器设置(筛选器、汇总等)转换为 SQL 查询,并针对您的数据库运行该查询以获取结果。

默认情况下,now 使用您的 Metabase 报告时区。如果您的管理员未设置报告时区,now 将使用您的数据库时区。

假设您正在使用 Postgres 数据库。如果您的 Metabase 报告时区设置为 EST,您将获得 EST 中的 now

SELECT CURRENT_TIMESTAMP AT TIME ZONE 'EST'

如果您没有设置报告时区,您将获得 Postgres 数据库时区(通常是 UTC)中的 now

SELECT CURRENT_TIME

电子表格

电子表格函数 NOW() 获取您操作系统时区(您计算机或移动设备上的时间)的当前日期和时间。

Python

您可以使用 pandas 模块中的 pd.Timestamp.now()。这将为您提供一个 Timestamp 对象,其中包含您操作系统时区的当前日期和时间。

延伸阅读

阅读其他 Metabase 版本的文档。

© . All rights reserved.