Cognos Report重新发出多个查询,而不是执行更多本地处理,报告速度慢

时间:2014-10-10 17:38:56

标签: cognos-10

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

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

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

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

enter image description here

我认为报告花费的时间比预期的要长,因为Cognos正在对视图执行多个查询,而不是仅执行一次。我希望Cognos出于性能原因,返回View中的所有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语法查询。我的报告中只有一个查询,再次在VIEW中返回所有行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
&#13;
&#13;
&#13;

&#13;
&#13;
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
&#13;
&#13;
&#13;

一个很大的问题是查询3和4是相同的。你会认为如果我将2个交叉表绑定到同一个Query,那么这不会导致SQL运行两次。

0 个答案:

没有答案