这里需要一些帮助。 我有如下查询。我应该如何在cognos框架中进行设置?或者,如何将其变成(多个)简单查询。因此,我可以像其他查询一样进行设置吗?
SELECT
isnull((SELECT distinct 'Y'
FROM
PC WITH(NOLOCK)
join P WITH(NOLOCK) on PC.POSTN_ID = P.ROW_ID and P.PR_EMP_ID=E.PER_ID
join CE WITH(NOLOCK) on CE.PAR_ROW_ID=P.EMP_ID and E.PER_ID=CE.PAR_ROW_ID
where PC.X_RESEARCH='Y' and PC.CON_ID=F.ROW_ID
) ,'N') X_RESEARCH,
F.ROW_ID,
E.ROW_ID A
FROM
F INNER JOIN G ON (G.CON_ID=dbo.S_CONTACT.ROW_ID)
INNER JOIN E ON (E.ROW_ID=G.ACTIVITY_ID)
我已经导入了物理模型,只需要了解如何在逻辑模型中进行操作即可 非常感谢!
答案 0 :(得分:0)
我可以建议在Framework中使用分层方法吗?
例如第一层,我们称之为导入 将是诸如P,PC,E之类的表以及它们如何联接以及任何过滤器 在此级别创建数据源查询主题 Query Subject PC的SQL为
Select * from PC
然后添加过滤器-
X_Research = 'Y'
下一个名称空间层将是计算,我们可以将其称为开发层
作者想要的所有数据项 在此级别创建模型源查询主题,并从导入层添加数据项或创建计算
Name: Activity ID
Expression: Import.G.Activity_ID
我们可以添加用于演示的第三层
在开发层中有哪些快捷方式可以使模型更持久(设计语言与标签更改)
如果您喜欢这个想法,请告诉我,我可以添加更多有关如何组装此组件的详细信息
答案 1 :(得分:0)
我又看了一眼。我以前的评论不正确。
我可以将您的查询简化为更易于阅读的内容:
SELECT coalesce(XR.X_RESEARCH, 'N') as X_RESEARCH
, F.ROW_ID
, E.ROW_ID A
FROM F
INNER JOIN G ON G.CON_ID = dbo.S_CONTACT.ROW_ID
INNER JOIN E ON E.ROW_ID = G.ACTIVITY_ID
LEFT OUTER JOIN (
select DISTINCT PC.X_RESEARCH
, P.PR_EMP_ID as E_PER_ID
, PC.CON_ID AS F_ROW_ID
FROM PC
INNER JOIN P ON PC.POSTN_ID = P.ROW_ID
AND P.EMP_ID = P.PR_EMP_ID
INNER JOIN CE ON CE.PAR_ROW_ID = P.EMP_ID
--AND CE.PAR_ROW_ID = P.PR_EMP_ID
WHERE PC.X_RESEARCH = 'Y'
) XR ON XR.E_PER_ID = E.PER_ID
AND XR.F_ROW_ID = F.ROW_ID
Cognos在使用ISNULL
时遇到问题。 COALESCE
会给您带来更多的运气。
当X_RESEARCH
时,您的Y
值将仅为P.EMP_ID = P.PR_EMP_ID
。
dbo.S_CONTACT
仍不在FROM子句中,因此仍然会失败。
我通常直接在项目的主要名称空间下使用3个名称空间:
但这通常用于数据集市。您尝试执行的操作可能会使用此模式,但是在这里我不会使用“表示层”。
右键单击“物理层”,然后使用“导入元数据向导...”使Cognos从您的数据库(F,G,E,P,PC,CE)创建查询主题。看来您已经执行了此步骤。
在业务层中,为每个物理查询主题创建一个查询主题。它们应该是“模型”查询主题。
创建业务查询主题之间的关系。
(可能不需要最后两个步骤。您也许可以使用物理层来满足相同的需求。但是这样做可以使将来更容易从数据库更改中恢复。)
创建一个结合了P,PC和CE的查询主题(我在上面将其称为子查询XR)。将过滤器PC.X_RESEARCH = 'Y'
添加到此过滤器中。
创建XR,F和E之间的关系。
创建一个包含最终输出的查询主题。