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

时间:2018-01-11 06:35:14

标签: sql cognos cognos-bi

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

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

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

1 个答案:

答案 0 :(得分:0)

为每个提示创建单独的查询。使每个查询成为与外部sql查询相同的目标数据库的自定义sql。您实际上无法对提示和主报表数据使用相同的自定义sql查询,因为理想情况下,您希望通过提示选择过滤主报表数据。

例如,我想查询主查询的工资:

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

如果我想提示报表用户选择一个员工,我会创建另一个查询外部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是“使用价值”,“员工名称”是“显示价值”。我会按员工姓名对其进行排序。设置参数,提示链接为“pEmployeeSelected”或您想要的任何变量名称。

在主报表查询中,添加一行以根据所选的提示对其进行过滤。

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,则不能使用相同的查询来生成值提示下拉列表。这就是为什么我们使用两个单独的查询项,一个用于获取员工列表,另一个用于查询工资(以及员工详细信息)。