Недавно у меня была задача по визуализации данных в Google Data Studio. Много графиков и таблиц с данными, сгруппированными по месяцам. Но из дашборда нужно было убрать данные за текущий месяц.
Я захотел решить эту задачу без изменения SQL запросов, созданий представлений и т. д. Короче, сделать все силами Google Data Studio.
Итак, месяц указан в виде даты — первого числа каждого месяца:
И нужно убрать при выводе из таблицы дату, относящуюся к текущему месяцу.
Первое, что пришло в голову — создать дополнительное поле (cur_date), которое содержит в себе дату первого числа текущего месяца в виде формулы:
DATE(YEAR(CURRENT_DATE()), MONTH(CURRENT_DATE()), 1)
И сделать еще одно поле, которое будет определять с помощью выражения CASE, равна ли дата в поле period дате в поле текущего месяца cur_date. Выглядеть это должно так:
CASE
WHEN period = cur_date THEN 1
ELSE 0
END
Но такой способ не подошел, потому что в CASE нельзя использовать условия со сравнением двух полей друг с другом.
Тогда мне пришла другая идея — взять разницу между датой указанного period и датой текущего месяца cur_date:
ABS(YEAR(CURRENT_DATE())-YEAR(period))+ABS(MONTH(CURRENT_DATE())-MONTH(period))
Если разница равна нулю, то запись относится к текущему месяцу, и ее можно отфильтровать. Если больше нуля — это данные за прошлые периоды, и мы выводим их на график или в таблицу дашборда.