Custom Measure from Custom Dimension generates different Standard SQL and breaks query

I believe this is a bug.

I have a customer who has created a custom dimension which yields a variable integer value based on the result of a boolean expression which compares a datetime (dimension provided by the LookML model) to a static date. It looks something like this:

case(when(${order.order_date} > date(2024, 6, 1), 10700), 0)

Which when parsed, the Standard SQL generated by Looker is this:

CASE WHEN (TIMESTAMP(DATETIME_TRUNC(order.order_datetime , DAY))) > TIMESTAMP(CONCAT(CAST(2024 AS INT64), '-', LPAD(CAST(CAST(6 AS INT64) AS STRING), 2, '0'), '-', LPAD(CAST(CAST(1 AS INT64) AS STRING), 2, '0'), ' 00:00:00'), 'UTC') THEN 10700 ELSE 0 END

This works just as expected!

The problem comes when we then attempt to aggregate the results as a custom measure, where the Standard SQL generated by Looker is this:

COALESCE(SUM(CAST(CASE WHEN ( DATETIME_TRUNC(order.order_datetime , DAY) ) > TIMESTAMP(CONCAT(CAST(2024 AS INT64), '-', LPAD(CAST(CAST(6 AS INT64) AS STRING), 2, '0'), '-', LPAD(CAST(CAST(1 AS INT64) AS STRING), 2, '0'), ' 00:00:00'), 'UTC') THEN 10700 ELSE 0 END AS NUMERIC)), 0)

Note that the generated Standard SQL generated for the custom measure omits the `TIMESTAMP()` function around the `DATETIME_TRUNC(order.order_datetime , DAY)`. And this breaks the query since you can't compare a datetime to a timestamp. If I manually add the `TIMESTAMP()` function and execute the query myself in the BQ UI, there is no error.

I don't understand why the `TIMESTAMP()` function is part of the generated Standard SQL for the custom dimension but not for the custom measure.

If this is not a bug, could someone please explain why not. If it is a bug, could someone on Looker staff please open a ticket for it. Thank you!


In the meantime, I have my customer using this janky workaround:

case(when(
extract_year(${order.order_date}) * 100000
+ extract_month(${order.order_date}) * 100
+ extract_day(${order.order_date}) >
2024 * 10000 + 6 * 100 + 1, 10700)
, 0)

1 0 449