首页 > 解决方案 > CASE / IF 表达式中的 IBM COGNOS 不兼容数据类型

问题描述

我已经尝试了几个小时来获得我认为的一个简单的 if-then-else 语句,以便在 IBM Cognos / Report Studio 10.0 中工作。我只是想在查询中创建一个数据项,以确定日期是星期几,然后返回计算日期。

if (cast(_day_of_week([Expected Delivery Date],1), integer) = 1) 
then (_add_days([Expected Delivery Date],2))
else (current_date)

后端数据库是 Informix。我收到错误“ Corresponding data types must be compatible in CASE expression or DECODE”

我已经尝试了所有我能想到的变体:有/无演员表,使用 case/when/then。我还创建了一个单独的数据项:

[计算星期几](数据项 - 计算正确)

cast(_day_of_week([Expected Delivery Date],1), integer)

[计算到期发货日期](数据项)

if ([Calc Day of Week] = 1) 
then (_add_days([Expected Delivery Date],2))
else (current_date)

即使在我的下一个数据项中使用该数据项,我也会收到相同的错误。

我只能认为它不理解我将比较基于整数并尝试返回日期 - 但如果是这种情况,我如何创建数据项来执行这样的计算?

任何帮助是极大的赞赏。

标签: informixsqldatatypescognos-10

解决方案


错误是说 THEN 和 ELSE 部分的数据类型不同。第一步是确定数据类型。你没有提到你是否用你提到的计算做到了这一点。他们似乎专注于函数的 IF 部分。

基本技术称为分而治之。更优雅的措辞是,控制变量或隔离组件。

_day_of_week 返回一个 int 所以我不知道你为什么要进行强制转换。(_day_of_week([Expected Delivery Date] = 1 ) 应该足够了,但那是以后的事了。

取 _add_days([预计交货日期],2)。将其放入表达式并找出返回的数据类型。

将该数据类型与 current_date 进行比较。

Current_date 返回一个日期。预计交货日期的数据类型是什么?日期或日期时间?

如果数据类型不同,那么您的方法是修改一个或另一个以匹配另一个。例如,如果是日期时间,则将 _add_days([Expected Delivery Date],2) 转换为 date。或者使用 current_timestamp 但我不使用它所以我不能多说。

如果您使用 1=1 和 1<>1 代替您的 if 部分,那么您可以控制表达式的流程并验证错误来自 then 和 else 位。

这是另一个应用程序的内容,但在概述测试技术时有效。

https://www.ibm.com/support/pages/corresponding-types-must-be-compatible-case-expression


推荐阅读