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

Другие вопросы по тегам