3

此问题适用于 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')#

查询运行(不产生错误),但我得到一个空的结果集。我有一种感觉,我需要调整日期提示宏返回的日期格式,但是在经过数小时的试验后,我被困在如何调试这个问题上。

4

3 回答 3

3

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

#sq(prompt('DateParameterFromPromptPage', 'date'))#

于 2016-02-01T14:43:54.890 回答
0

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

您将采取的步骤是:

  1. 在报告中添加提示页面(如果不存在)
  2. 在提示页面添加2个日期提示控件
  3. 在第一个日期提示的“参数”属性中,使用:datePromptStartDate
  4. 在第二个日期提示的“参数”属性中,使用:datePromptEndDate

当您执行报表时,新的提示页面将替换由宏生成的提示页面,并且宏中的参数将绑定到日期控件。

编辑: 我忘了补充你的 SQL 中的宏应该如下所示:

SELECT enc.encounterID, enc.date 
FROM enc 
WHERE enc.date between #prompt('textPromptStartDate')# 
AND #prompt('textPromptEndDate')#
于 2010-02-27T02:07:17.787 回答
0

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

DECLARE @StartDate DATE = CONVERT(DATE, REPLACE(#prompt('StartDate')#, 'testValue', '1/1/2012'));
于 2012-08-27T22:33:25.947 回答