Я написал следующий оператор CASE
в фильтре Report Studio (Cognos 8 работает в DB2):
CASE
WHEN (
_WEEK_OF_YEAR(?paramDate?) > _WEEK_OF_YEAR(_ADD_MONTHS(?paramDate?; -3))
)
THEN (
[BusinessView].[QueryItem].[Week] <= _WEEK_OF_YEAR(?paramDate?)
AND [BusinessView].[QueryItem].[Week] >= _WEEK_OF_YEAR(_ADD_MONTHS(?paramDate?; -3))
AND [BusinessView].[QueryItem].[Year] = _YEAR(?paramDate?)
)
ELSE (
([BusinessView].[QueryItem].[Week] <= _WEEK_OF_YEAR(?paramDate?)
AND [BusinessView].[QueryItem].[Year] = _YEAR(?paramDate?))
OR ([BusinessView].[QueryItem].[Week] >= _WEEK_OF_YEAR(_ADD_MONTHS(?paramDate?; -3))
AND [BusinessView].[QueryItem].[Year] = _YEAR(_ADD_MONTHS(?paramDate?; -3)))
)
END
Но я получаю ошибку XQE-PLN-0312: Filter expressions must evaluate to Boolean
. Обратите внимание, что выражения под WHEN
и THEN
и ELSE
all do оцениваются как логические. Кроме того, такие выражения все работают, когда помещены индивидуально в фильтр. Поэтому я утверждаю, что проблема заключается в самом утверждении CASE.
Также обратите внимание, что я написал другие фильтры CASE
в других отчетах, и они работают, как я ожидаю. Поэтому я подозреваю некоторые проблемы с функциями даты, взаимодействующими с CASE
.
Я узнал этот ответ, но это не решило проблему: как вы можете видеть в моем коде, я уже поставил все скобки на место.
Пожалуйста, не предлагайте мне избегать выражения CASE
и использовать вместо И и ИЛИ только; это на самом деле работает, но я хотел бы понять, как заставить CASE
работать также.