我有查询A和查询B,两者都有数据项1级,2级和3级。
我使用查询A和查询B有三个已加入的查询,如下所示。
Joined Query 1 ---- a.level 1 = b.level 1
Joined Query 2 ---- a.level 1 = b.level 1 and a.level 2 = b.level 2
Joined Query 3 ---- a.level 1 = b.level 1 and a.level 2 = b.level 2 and a.level 3 = b.level 3
当用户在提示页面上选择级别1时,报表将使用“加入的查询1”来检索数据。
当用户在提示页面上选择级别2时,报表将使用“加入的查询2”来检索数据。
当用户在提示页面上选择级别3时,报表将使用“加入的查询3”来检索数据。
但是,通过这种方式,我必须创建3个页面和3个列表,并使用不同的连接查询。当需求发生变化时,维护工作量太高,因为我必须修改三次。
有没有想过在这种情况下重用查询和页面?我想知道Cognos Report Studio中是否有条件连接功能?
答案 0 :(得分:1)
我对你的问题有一个新颖的解决方案。而不是创建三个页面,您可以通过操纵连接列来逃脱。
让我们将您的示例简化为由单选按钮确定的两种情况:
对于您始终想要加入的列,我们不会更改任何内容。对于第二个连接列,我们创建一个仅用于连接的新数据项。对于此示例,我们将其称为“Join2”。对于我们放入CASE语句的表达式(或者,如果您愿意,如果......):
CASE ?radioButton?
WHEN 1 THEN '1'
WHEN 2 THEN [Level2]
END
在要加入的两个查询中创建相同的数据项。显然,应调整名称以匹配您的列。此外,我假设水平是一个字符串,因此上面的'1'。它应该与可选连接列的类型匹配,否则将出现类型不匹配错误。除了您想要加入的[Level1]列之外,更改连接表达式以加入第二列。
让我们检查一下效果。
如果用户选择1,则连接条件为:
a。[Level1] = b。[Level1]和a。[Join2] = b。[Join2]
...但有效的加入将是:
a。[等级1] = b。[等级1]和a.'1'= b.'1'
我们已经使第二个连接条件变得多余,正是我们想要的。
如果用户选择2,则连接条件为:
a。[Level1] = b。[Level1]和a。[Join2] = b。[Join2]
...但有效的加入将是:
a。[等级1] = b。[等级1]和a。[等级2] = b。[等级2]
在这种情况下,我们强制执行第二级连接条件。
此技术假定使用内部联接。可以以类似的方式添加其他连接条件。