0

我有一份 Cognos 报告,如果可能,我想尝试加快速度。当我将输出定向到 HTML 时,报告需要 4 分钟(包括跳转到最后一页以确保创建整个报表),将输出定向到 EXCEL 时需要 7 分钟,PDF 需要 8 分钟。

该报告使用与数据库 VIEW 关联的单个查询主题。当我从视图中选择 * 时,视图会在 28 秒内返回 200 行。这是我报告中的唯一查询。

我有 2 个交叉表,它们都绑定到这个 Cognos 查询。第一个交叉表在“FUNDING REPORT NAME”列上有分节符,第二个交叉表没有,而是汇总了所有 FUNDING REPORT NAMES。

然后,我将报告页面分为两列,“报告组”和“法律实体”。这导致为每对不同的值创建一个单独的选项卡。在每个选项卡上,Cognos 都会自动过滤和汇总 REPORT GROUP/LEGAL ENTITY 的当前值的数据。

在此处输入图像描述

我相信报告花费的时间比预期的要长,因为 Cognos 正在对视图执行多个查询,而不是只执行一次。出于性能原因,我希望 Cognos 执行的操作是返回视图中的所有 200 行,在本地存储结果,然后查询这些行以识别 REPORT GROUP 和 LEGAL ENTITY 的 DISTINCT 值,并且在这个分组中,总结当前 FUNDING REPORT NAME 中的本地数据。相反,它针对视图发出多个查询以获取此信息,而不是对小型结果集进行本地处理。

为了让 Cognos 识别不同的值以在本地中断和汇总,我尝试使用以下属性设置进行试验:

Set "RollUPProcessing" property on Query = Local 

Set "Use Local cache" property On Query = Yes

Set the "Query Process" property on the Data Source object in the Model to "Limited Local"

但是,这些更改似乎对执行时间没有影响。

有什么办法可以让这份报告执行得更快吗?HTML 相当快,但 Excel 是必需的。当转向 Excel 时,我可以做些什么来加快报告的生成速度?

以下是 Cognos 说它正在执行的 4 个 Cognos 语法查询。我的报告中只有一个查询,再次返回所有行 200 条记录,在一个视图中。

select distinct 
	  "MLR_ROLL_FWD"."REPORT_GROUP" 		"Report_group" 
	, "MLR_ROLL_FWD"."LEGAL_ENTTY_NAME" 	"Legal_Entity_Name" 
from 
	MYSCHEMA."MLR_ROLL_FWD_V" 					"MLR_ROLL_FWD"
 order by 
 	  "Report_group" asc 
 	, "Legal_Entity_Name" asc  
FOR FETCH ONLY

select distinct 
	 "MLR_ROLL_FWD"."FUNDNG_RPT_NM" 	"Funding_Report_Name" 
	,"MLR_ROLL_FWD"."REPORT_GROUP" 		"Report_group" 
	,"MLR_ROLL_FWD"."LEGAL_ENTTY_NAME" 	"Legal_Entity_Name" 
 from 
 	MYSCHEMA."MLR_ROLL_FWD_V" 				"MLR_ROLL_FWD"
 order by 
 	"Funding_Report_Name" asc  
FOR FETCH ONLY

select 
	 "MLR_ROLL_FWD"."REPORT_GROUP" 			"Report_groupkey" 
	,"MLR_ROLL_FWD"."LEGAL_ENTTY_NAME" 		"Legal_Entity_Namekey" 
	
	,case  
		when "MLR_ROLL_FWD"."SERVICE_YEAR" <> 9999 then 
			'Service Year ' || "MLR_ROLL_FWD"."SERVICE_YEAR" 
		else 'Total' 
	end  "levelkey" 

	,"MLR_ROLL_FWD"."YEAR_QUARTER" 						"Year_Quarterkey" 
	,sum("MLR_ROLL_FWD"."BEG_BAL_AMT") 					"Beginning_Gross_Balance" 
	,sum("MLR_ROLL_FWD"."REBATE_CSH_AMT") 				"Cash_Collection" 
	,sum("MLR_ROLL_FWD"."REBATE_BILLD_AMT") 			"Current_Billing_AMT" 
	,sum("MLR_ROLL_FWD"."REBATE_UNDR_OVR_PAYMT_AMT") 	"Over_Under_Payment_AMT" 
	,sum("MLR_ROLL_FWD"."REBATE_RECVBL_MANL_ADJ_AMT") 	"RXP_Adjustment_AMT"  
	,sum ("MLR_ROLL_FWD"."REBATE_RECVBL_BUMP_UP_AMT") 	"RXP_Bump_Up_Adjustment_AMT" 
	,sum("MLR_ROLL_FWD"."PYE_RECVBL_BUMP_UP_REVSL_AMT") "RXP_Bump_Up_Reversal_AMT" 
	,sum("MLR_ROLL_FWD"."GL_REBATE_RECVBL_AMT") 		"Ending_Balance__Net_" 
 
 from 
 	MYSCHEMA."MLR_ROLL_FWD_V" "MLR_ROLL_FWD"
 
 group by 
 		 "MLR_ROLL_FWD"."REPORT_GROUP"
 		,"MLR_ROLL_FWD"."LEGAL_ENTTY_NAME", 

 		case  
 			when "MLR_ROLL_FWD"."SERVICE_YEAR" <> 9999 
 				then 'Service Year ' || "MLR_ROLL_FWD"."SERVICE_YEAR" 
			else 'Total' 
		end 

		,"MLR_ROLL_FWD"."YEAR_QUARTER" 

FOR FETCH ONLY

select 
	 "MLR_ROLL_FWD"."REPORT_GROUP" "		Report_groupkey" 
	,"MLR_ROLL_FWD"."LEGAL_ENTTY_NAME" 		"Legal_Entity_Namekey" 

	, case  when "MLR_ROLL_FWD"."SERVICE_YEAR" <> 9999
		 then 'Service Year ' || "MLR_ROLL_FWD"."SERVICE_YEAR" 
	 else 
	 	'Total' 
 	end  "levelkey" 

 	, "MLR_ROLL_FWD"."YEAR_QUARTER" 						"Year_Quarterkey" 
 	, sum("MLR_ROLL_FWD"."BEG_BAL_AMT") 					"Beginning_Gross_Balance" 
 	, sum("MLR_ROLL_FWD"."REBATE_CSH_AMT") 					"Cash_Collection" 
 	, sum("MLR_ROLL_FWD"."REBATE_BILLD_AMT") 				"Current_Billing_AMT" 
 	, sum("MLR_ROLL_FWD"."REBATE_UNDR_OVR_PAYMT_AMT") 		"Over_Under_Payment_AMT" 
 	, sum("MLR_ROLL_FWD"."REBATE_RECVBL_MANL_ADJ_AMT") 		"RXP_Adjustment_AMT" 
 	, sum("MLR_ROLL_FWD"."REBATE_RECVBL_BUMP_UP_AMT") 		"RXP_Bump_Up_Adjustment_AMT" 
 	, sum("MLR_ROLL_FWD"."PYE_RECVBL_BUMP_UP_REVSL_AMT") 	"RXP_Bump_Up_Reversal_AMT" 
 	, sum("MLR_ROLL_FWD"."GL_REBATE_RECVBL_AMT") 			"Ending_Balance__Net_" 
 
 from 
 	MYSCHEMA."MLR_ROLL_FWD_V" "MLR_ROLL_FWD"
 
 group by 
 	  "MLR_ROLL_FWD"."REPORT_GROUP"
 	, "MLR_ROLL_FWD"."LEGAL_ENTTY_NAME"

 	, case  when "MLR_ROLL_FWD"."SERVICE_YEAR" <> 9999 
 		then 'Service Year ' || "MLR_ROLL_FWD"."SERVICE_YEAR" 
	else 'Total' end 

	,"MLR_ROLL_FWD"."YEAR_QUARTER" 

FOR FETCH ONLY

一个巨大的担忧是查询 3 和 4 是相同的。您会认为,如果我将 2 个交叉表绑定到同一个查询,这不会导致 SQL 运行两次。

4

0 回答 0