现在
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 返回一个 timestamp with time zone,否则 now 返回一个 timestamp without time zone。
有关这些数据类型在 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 的文档。