Cognos 10 фиксированный MM/dd, но переменный год
Хотите установить 01 июля как месяц и день, но иметь переменную для года. Всегда хотите установить по умолчанию год самого последнего прошлого июля 01.
Должен работать в пределах параметров, присутствующих в Cognos 10.2. Пробовал несколько операторов If с функциями date2strings и string2date. Также пробовал ряд столбцов, предназначенных для рекурсивной фильтрации данных.
логика Если current_month <= 6, то год (current_date, -1), в противном случае год (current_date). Хотите соединить год с xxxx-06-01 или предпочтительно с 06/01/xxxx. Продолжайте получать ошибки времени выполнения, а не ошибки в вычислении запросов.
На данный момент не видно леса за деревьями. Продолжайте исследовать, опубликуйте решение, если оно будет достигнуто.
2 ответа
Вы хотите сохранить даты в формате даты и избегать преобразования в строку и конкатенации, если это возможно. Cognos предоставляет вам несколько встроенных функций для манипулирования датами без необходимости конвертации.
Вот ваше выражение:
_add_years(
_add_months(
_first_of_month(
current_date
),
7 - extract(
month,
current_date
)
),
floor(
extract(
month,
current_date
)
/ 7
) - 1
)
Это легче понять, если вы исследуете это наизнанку.
Функция _first_of_month() возвращает первый день текущего месяца. Затем мы используем некоторую математику для определения смещения для передачи в функцию _add_months(), которая превратит первое число текущего месяца в первое июля текущего года для каждого возможного значения месяца. Наконец, мы снова используем математику, чтобы добавить 0 или 1 год к полученной дате, используя функцию _add_years(). Для всех месяцев меньше 7 мы добавляем -1, а для месяцев 7 и выше - 0.
Это работает. Все еще пытаетесь понять, как _make_timestamp () волшебным образом знает дату начала текущего финансового года?
if (month (current_date) <7) then (_make_timestamp ([Year of Today] - 1, 7, 1)) иначе if ( month( current_date) > 6) then ( _make_timestamp ( [Year of Today] + 0, 7, 1)) иначе NULL