我正在使用Cognos Report Studio进行报告,而且我很难得到我需要的数据。我需要做的是计算部门的ID数量。但我需要在启动和完成之间分配计数。如果ID出现多次,则将其视为已完成。当然,其他人将会启动。所以我试图计算不同ID的ID出现次数。以下是我在SQl Developer中所做的查询:
SELECT
COUNT((CASE WHEN COUNT(S.RFP_ID) > 8 THEN MAX(CT.GCT_STATUS_HISTORY_CLOSE_DT) END)) AS "Sales Admin Completed"
,COUNT((CASE WHEN COUNT(S.RFP_ID) = 8 THEN MIN(CT.GCT_STATUS_HISTORY_OPEN_DT) END)) as "Sales Admin Initiated"
FROM
ADM.B_RFP_WC_COVERAGE_DIM S
JOIN ADM.B_GROUP_CHANGE_REQUEST_DIM CR
ON S. RFP_ID = CR.GCR_RFP_ID
JOIN ADM.GROUP_CHANGE_TASK_FACT CT
ON CR.GROUP_CHANGE_REQUEST_KEY = CT.GROUP_CHANGE_REQUEST_KEY
JOIN ADM.B_DEPARTMENT_DIM D
ON D.DEPARTMENT_KEY = CT.DEPARTMENT_RESP_KEY
WHERE CR.GCR_CHANGE_TYPE_ID = '20'
AND S.RFP_LOB_IND = 'WC'
AND S.RFP_AUDIT_IND = 'N'
AND CR.GCR_RECEIVED_DT BETWEEN '01-JAN-13' AND '31-DEC-13'
AND D.DEPARTMENT_DESC = 'Sales'
AND CT.GCT_STATUS_IND = 'C'
GROUP BY S.RFP_ID ;
现在这个有效。但我不确定如何将这些转换成Cognos。我试过做一个CASE taht看起来像这个(这个代码使用的是基本名称,如dept而不是D.DEPARTMENT_DESC):
CASE WHEN dept = 'Sales' AND count(ID for {DISTINCT ID}) > 1 THEN count(distinct ID)END)
我使用count(不同的ID)而不是count(maximum(close_date))。但无论如何,结果都是一样的。 “AND”是我认为它丢失的地方。它显然不是计算出现次数的正确方法。但我希望我能够亲近。有没有办法用CASE做到这一点?或者根本没有?
- EDIT-- 为了使我的问题更清楚,这是一个例子:
说我在表格中有这些数据
ID
---
1
2
3
4
2
5
5
6
2
我想要的计数输出是:
Initiated Completed
--------- ---------
4 2
这是因为两个不同的ID(2和5)出现不止一次。因此他们被视为已完成。仅发生一次的那些被计为启动。我能够在SQl Dev中执行此操作,但我无法弄清楚如何在Cognos Report Studio中执行此操作。我希望这有助于更好地解释我的问题。
答案 0 :(得分:0)
哦,我最初并没有得到它,修改答案。
但在Report Studio中使用2个查询仍然是最简单的。关键时刻是您可以使用查询作为另一个查询的来源,保证正确的分组和计算。
因此,如果您在Report Studio的表中有ID列表,则创建:
使用dataitems查询1:
之后,使用查询1作为源创建一个查询2,只有2个数据项:
这将为您提供您所追求的结果。
这是一个关于如何嵌套查询的doco链接:
http://pic.dhe.ibm.com/infocenter/cx/v10r1m0/topic/com.ibm.swg.ba.cognos.ug_cr_rptstd.10.1.0.doc/c_cr_rptstd_wrkdat_working_with_queries_rel.html?path=3_3_10_6#cr_rptstd_wrkdat_working_with_queries_rel