首页 > 解决方案 > Report Studio 过滤器中的 CASE 语句

问题描述

CASE我在 Report Studio 过滤器(在 DB2 上运行的 Cognos 8)中编写了以下语句:

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。请注意,WHENandTHENELSEall下的表达式计算结果为布尔值。此外,这些表达式在单独放入过滤器时都有效。所以我认为问题在于 CASE 语句本身。另请注意,我CASE在其他报告中编写了其他过滤器,它们按我预期的方式工作。因此,我怀疑日期函数与CASE.

我找到了这个答案,但它并没有解决问题:正如你在我的代码中看到的那样,我已经把所有的括号都放好了。

请不要建议我避免使用该CASE语句并单独使用 AND 和 OR;这实际上可行,但我想了解如何使其CASE正常工作。

标签: filterdb2case-statementcognos-8

解决方案


不需要任何 [if] 或 [case] 语句。只需使用逻辑运算符编写过滤条件。


推荐阅读