Cognos日期提示宏错误

时间:2010-01-20 16:59:38

标签: cognos

此问题适用于Cognos Report Studio版本8.3到10.1.1。

在Report Studio 8.3中,我有一个针对MySQL 5.1数据源运行的原始SQL查询:

SELECT enc.encounterID, enc.date
FROM enc
WHERE enc.date between #prompt('textPromptStartDate')# AND #prompt('textPromptEndDate', 'date')#

这会为用户生成文本提示。如果用户以“YYYY-MM-DD”的格式在这些提示中输入日期,例如'2010-01-15',查询工作正常。但我想用适当的日期提示替换文本提示。当我尝试用

替换上面的提示时
#prompt('datePromptStartDate', 'date') AND #prompt('datePromptEndDate', 'date')#

查询运行(没有生成错误),但我得到一个空的结果集。我有一种感觉,我需要调整日期提示宏返回的日期格式,但经过几个小时的实验后,我仍然坚持如何调试它。

3 个答案:

答案 0 :(得分:1)

对于日期,您需要围绕值的单引号。我使用“sq”函数执行此操作:

#sq(提示('DateParameterFromPromptPage','date'))#

答案 1 :(得分:0)

您可以使用日期提示控件创建提示页面,然后将它们绑定到提示宏中的参数。我使用上面的查询使用MySQL 5.1(ODBC)在8.4中对此进行了测试,并且它工作正常。在创建单独的提示页面并绑定控件之前,我也遇到了同样的问题,没有返回数据。

您要采取的步骤是:

  1. 在报告中添加提示页面(如果不存在)
  2. 将2个日期提示控件添加到提示页面
  3. 在第一个日期提示的“参数”属性中,使用:datePromptStartDate
  4. 在第二个日期提示的“参数”属性中,使用:datePromptEndDate
  5. 执行报告时,新的提示页面将替换从宏生成的提示页面,宏中的参数将绑定到日期控件。

    修改 我忘了添加SQL中的宏应如下所示:

    SELECT enc.encounterID, enc.date 
    FROM enc 
    WHERE enc.date between #prompt('textPromptStartDate')# 
    AND #prompt('textPromptEndDate')#
    

答案 2 :(得分:0)

可以在不使用提示页面的情况下为日期提示创建没有提示页面的提示。我在SQL Server上遇到了这个问题,直到我运行了一个配置文件跟踪。配置文件跟踪显示Cognos未在日期值周围传递引号。我通过将提示作为字符串传递,将默认验证测试字符串(testValue)替换为实际日期,在变量中构建字符串,然后将其传递给实际查询来解决此问题。这是我用来将日期提示转换为普通DATE数据类型的内容。

DECLARE @StartDate DATE = CONVERT(DATE, REPLACE(#prompt('StartDate')#, 'testValue', '1/1/2012'));