无法将外部 SQL 查询的数据项列提取到数据源中

Unable to fetch data item columns of external SQL query into Data source in congons

我是 Cognos 新手。我想在 'Cognos-bi' 中为外部 SQL 查询创建一个报告,该查询具有多个参数和多个值。对于 "each" 参数,我需要使用值提示,它应该像下拉列表一样显示每个参数值。

当我过去创建值提示时,它只会创建数据源中预先存在的包项,而不是数据项列。

是否有办法将这些数据项列提取到数据源包项中?

为每个提示创建一个单独的查询。使每个查询成为自定义 sql,与外部 sql 查询进入相同的目标数据库。您确实不能对提示和主要报告数据使用相同的自定义 sql 查询,因为理想情况下您希望通过提示 selections.

过滤主要报告数据

比如我要查询薪水的主查询:

Select e.last_name, e.first_name, s.salary
from salary_table s
join employee_table e on s.employee_id = s.employee_id

如果我想提示报告用户 select 一名员工,我将创建另一个对外部 sql 的查询(自定义 sql):

select e.last_name||', '||e.first_name "Employee Name", e.employee_id
from employee_table e
where termination_date is null

我将该查询命名为 pEmployees。我在提示页面上创建了一个值提示,并将其源查询设置为 pEmployees。 employee_id 是 'Use value',"Employee Name" 是 'Display value'。我会按员工姓名对其进行排序。将提示链接到的参数设置为 'pEmployeeSelected' 或您想要的任何变量名称。

在主报表查询中,添加一行以根据提示过滤它 selected。

Select e.last_name, e.first_name, s.salary
from salary_table s
join employee_table e on s.employee_id = s.employee_id
where e.employee_id = #prompt('pEmployeeSelected')#

现在主报表查询项中不需要过滤器,因为您是在 sql 中进行过滤。如果您改为在查询项中进行过滤,Cognos 会在每次报告为 运行 时提取所有员工,然后找到一名员工并对其进行报告。效率很低。

如果您按提示过滤 sql,则不能使用相同的查询来生成值提示下拉列表。这就是为什么我们使用两个单独的查询项,一个用于获取员工列表,一个用于实际查询薪水(和员工详细信息)。