如何在Cognos Framework Manager中设置相关查询

时间:2018-11-16 01:56:16

标签: cognos correlated-subquery

这里需要一些帮助。 我有如下查询。我应该如何在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)

我已经导入了物理模型,只需要了解如何在逻辑模型中进行操作即可 非常感谢!

2 个答案:

答案 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之间的关系。

创建一个包含最终输出的查询主题。