在配置数据库中使用日期参数的默认值

Using default value for a date parameter in metabase

在配置数据库中,我想要一个获取两个日期类型参数的查询,但如果未提供它们,则使用一些默认值。这是我用来实现但失败的 between 子句的示例。似乎当没有值作为参数传递时,除了 null 之外的其他内容被设置为查询中的变量。

BETWEEN COALESCE(date({{start_date}}),subdate(current_date, interval 1 month))
AND COALESCE(date({{end_date}}),subdate(current_date, 1))

我想出了解决办法。 首先,我用字段过滤器替换了整个 between 子句。然后我重写了元数据库生成的整个查询。由于某些奇怪的原因,我使用的 MariaDB 驱动程序无法 运行 由具有大量别名的元数据库生成的查询。 按配置数据库自动生成的查询:

SELECT count(*) AS `count`, `orders`.`city` AS `city`, `orders`.`status` AS `status`, `orders`.`transport_type` AS `transport_type`,
date(`orders`.`launched_at`) AS `launched_at`
FROM `orders`
WHERE (date(`orders`.`deleted_at`) IS NULL
   AND {{filter_date}}
GROUP BY `orders`.`city`, `orders`.`status`, `orders`.`transport_type`, date(`orders`.`launched_at`)
ORDER BY `orders`.`city` ASC, `orders`.`status` ASC, `orders`.`transport_type` ASC, date(`orders`.`launched_at`) ASC

然后可以将此问题添加到仪表板。在仪表板编辑模式中,过滤器小部件(或在此处键入日期)可用于过滤问题结果。让我恼火的一件事是必须保存仪表板才能刷新卡片中的数据。 这是我的最终查询:

select count(*), orders.city, orders.status, orders.transport_type, date(orders.launched_at)
from orders
where (date(orders.deleted_at)) is NULL
        AND {{filter_date}}
GROUP BY orders.city, orders.status, orders.transport_type, date(orders.launched_at)
ORDER BY orders.city, orders.status, orders.transport_type, date(orders.launched_at)