如何在 cognos 框架管理器中设置相关查询
How to set up correlated query in cognos framework manager
这里需要一些帮助。
我有如下查询。我应该如何在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)
我已经导入了物理模型,只需要看看如何在逻辑模型中导入
非常感谢!
我可以建议在 Framework 中采用分层方法吗?
例如第一层,我们称之为导入
将是 P、PC、E 之类的表以及它们的连接方式和任何过滤器
在此级别创建数据源查询主题
查询主题 PC 的 SQL 将是
Select * from PC
然后添加过滤器 -
X_Research = 'Y'
下一个命名空间层是计算层,我们可以称之为开发层
作者想要的所有数据项
在此级别创建模型源查询主题并从导入层添加数据项或创建计算
Name: Activity ID
Expression: Import.G.Activity_ID
我们可以添加第三层用于演示
它有来自开发层的快捷方式,使模型更耐用(设计语言与标签更改)
如果你喜欢这个想法,请告诉我我可以添加更多关于如何assemble这个
的细节
刚刚又看了一眼。我之前的评论不准确。
我可以将您的查询归结为更容易阅读的内容:
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
.
你会更幸运
当 P.EMP_ID = P.PR_EMP_ID
.
时,您的 X_RESEARCH
值只会是 Y
dbo.S_CONTACT
仍然不在 FROM 子句中,所以这仍然会失败。
我一般直接在项目的主命名空间下使用3个命名空间:
- 物理层
- 业务层
- 表示层
但这通常用于数据集市。您尝试做的事情可能会使用这种模式,但我不会在这里使用表示层。
右键单击物理层并使用 "Import Metadata Wizard..." 让 Cognos 从您的数据库(F、G、E、P、PC、CE)创建查询主题。看起来你已经完成了这一步。
在业务层,为每个物理查询主题创建一个查询主题。他们应该是 "model" 个查询主题。
创建业务查询主题之间的关系。
(后两步可能不需要。您可以使用物理层来满足相同的需求。但这样做可能会更容易从未来的数据库更改中恢复。)
创建一个结合了P、PC、CE的查询主题(上面我把子查询叫做XR)。将过滤器 PC.X_RESEARCH = 'Y'
添加到此过滤器。
创建 XR、F 和 E 之间的关系。
创建包含最终输出的查询主题。
这里需要一些帮助。 我有如下查询。我应该如何在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)
我已经导入了物理模型,只需要看看如何在逻辑模型中导入 非常感谢!
我可以建议在 Framework 中采用分层方法吗?
例如第一层,我们称之为导入 将是 P、PC、E 之类的表以及它们的连接方式和任何过滤器 在此级别创建数据源查询主题 查询主题 PC 的 SQL 将是
Select * from PC
然后添加过滤器 -
X_Research = 'Y'
下一个命名空间层是计算层,我们可以称之为开发层
作者想要的所有数据项 在此级别创建模型源查询主题并从导入层添加数据项或创建计算
Name: Activity ID
Expression: Import.G.Activity_ID
我们可以添加第三层用于演示
它有来自开发层的快捷方式,使模型更耐用(设计语言与标签更改)
如果你喜欢这个想法,请告诉我我可以添加更多关于如何assemble这个
的细节刚刚又看了一眼。我之前的评论不准确。
我可以将您的查询归结为更容易阅读的内容:
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
.
你会更幸运
当 P.EMP_ID = P.PR_EMP_ID
.
时,您的 X_RESEARCH
值只会是 Y
dbo.S_CONTACT
仍然不在 FROM 子句中,所以这仍然会失败。
我一般直接在项目的主命名空间下使用3个命名空间:
- 物理层
- 业务层
- 表示层
但这通常用于数据集市。您尝试做的事情可能会使用这种模式,但我不会在这里使用表示层。
右键单击物理层并使用 "Import Metadata Wizard..." 让 Cognos 从您的数据库(F、G、E、P、PC、CE)创建查询主题。看起来你已经完成了这一步。
在业务层,为每个物理查询主题创建一个查询主题。他们应该是 "model" 个查询主题。
创建业务查询主题之间的关系。
(后两步可能不需要。您可以使用物理层来满足相同的需求。但这样做可能会更容易从未来的数据库更改中恢复。)
创建一个结合了P、PC、CE的查询主题(上面我把子查询叫做XR)。将过滤器 PC.X_RESEARCH = 'Y'
添加到此过滤器。
创建 XR、F 和 E 之间的关系。
创建包含最终输出的查询主题。