Автоматический фильтр для текущего месяца и года в Cognos Report Studio ver 10
У меня есть элемент запроса, который фильтрует записи по столбцу даты в формате 'YYYYMM
". На данный момент я жестко закодировал значение [DateCol] = '201406'
в Detail filters
чтобы получить текущий месяц и год записи. Но я хочу динамически изменить это значение. В следующем месяце он должен отфильтровать записи по "201407". Как мне этого добиться? Я попробовал это, перетаскивая [DateCol]
в Detail filters
:
[DateCol] = extract(year, current_date) + extract(month, current_date)
Но он вернул ошибку:
UDA-SQL-0460 The operation "equal" is invalid for the following combination of data types: Character and Integer
Пожалуйста, руководство
3 ответа
Другая формула
[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date) as varchar(6))
Самое простое решение - создать то, что я называю "ключом месяца", представляющим собой целочисленное представление года и месяца. Затем вы можете преобразовать это в символ для сравнения. Это на самом деле довольно просто:
extract(year, current_date) * 100 + extract(month, current_date)
Умножение любого числа на 100 приводит к добавлению двух нулей в конец. Текущий год - 2014, поэтому 2014 умножить на 100 равен 201400. После этого вы можете добавить месяц, чтобы получить "ключ месяца". 201400 + 6 = 201406. Затем вы можете преобразовать это целое число в символ и сравнить. Окончательное выражение фильтра становится:
[DateCol] = cast(extract(year, current_date) * 100 + extract(month, current_date), char(6))
Примечание. Техника создания целочисленных "ключей" для дат также может быть расширена до дней и имеет множество применений, а именно сортировку. Следующее выражение даст вам целое число "ключ дня", в котором сохранены числовой порядок и иерархия исходной даты:
extract(year, current_date) * 10000 + extract(month, current_date) * 100 + extract(day, current_date)
Две проблемы. Тип данных для вашего DateCol является символьным. Функция извлечения возвращает целые числа. Во-вторых, вы неправильно строите свой YYYYMM со своими выдержками. Таким образом, вы извлекаете год как число и добавляете к нему месяц. В итоге вы получите что-то вроде "201406" = 2020, что не сработает. Так что вам нужно будет привести оба экстракта и объединить их:
[DateCol] = cast(extract(year, current_date) as varchar(4)
+ cast (выдержка (месяц, current_date) как varchar(2))
РЕДАКТИРОВАТЬ: На самом деле, это, вероятно, будет более сложным, чем это. Извлечение не вернет 06 за июнь, только 6. Так что вам нужно будет определить, является ли это извлечение одним или двумя символами. Если он один, вам нужно прикрепить "0" к передней части после того, как вы разыгрываете его. Точный синтаксис будет зависеть от вашей базы данных, но примерно так:
[DateCol] = cast(extract(year, current_date) as varchar(4)
+ case when cast (extract(month, current_date) as varchar(2) = 1
then '0' + cast (extract(month, current_date) as varchar(2)
else cast (extract(month, current_date) as varchar(2)
end