我有查询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中是否存在条件连接功能?
1 回答
我对你的问题有一个新颖的解决方案 . 您可以通过操作连接列来获取一个页面,而不是创建三个页面 .
让我们将您的示例简化为由单选按钮确定的两种情况:
您想加入一列([Level1])
您想加入两列([Level1]和[Level2])
对于您始终想要加入的列,我们不会更改任何内容 . 对于第二个连接列,我们创建一个仅用于连接的新数据项 . 对于此示例,我们将其称为“Join2” . 对于我们放入CASE语句的表达式(或者如果你愿意的话,如果......):
在要加入的两个查询中创建相同的数据项 . 显然,应调整名称以匹配您的列 . 此外,我假设水平是一个字符串,因此上面的'1' . 它应该与可选连接列的类型匹配,否则将出现类型不匹配错误 . 除了您始终要加入的[Level1]列之外,还要更改连接表达式以加入此第二列 .
让我们来研究一下效果 .
如果用户选择1,则连接条件为:
a . [Level1] = b . [Level1]和a . [Join2] = b . [Join2]
......但有效的加入将是:
a . [Level1] = b . [Level1]和a.'1'= b.'1'
我们已经使第二个连接条件变得多余,正是我们想要的 .
如果用户选择2,则连接条件为:
a . [Level1] = b . [Level1]和a . [Join2] = b . [Join2]
......但有效的加入将是:
a . [等级1] = b . [等级1]和a . [等级2] = b . [等级2]
在这种情况下,我们强制执行第二级连接条件 .
该技术假定使用内连接 . 可以以类似的方式添加其他连接条件 .