0

可能であればスピードアップを試みたい Cognos レポートがあります。出力を HTML に送信する場合 (レポート全体が確実に作成されるように最後のページにジャンプすることを含む)、レポートは 4 分、出力を EXCEL に送信する場合は 7 分、PDF の場合は 8 分かかります。

レポートは、データベース VIEW に関連付けられた単一のクエリ サブジェクトを使用します。ビューから * を選択すると、ビューは 28 秒で 200 行を返します。これが私のレポートの唯一のクエリです。

この 1 つの Cognos クエリに両方ともバインドされている 2 つのクロス タブがあります。最初のクロス集計では、列「FUNDING REPORT NAME」にセクション区切りがありますが、2 番目のクロス集計にはありません。代わりに、すべての FUNDING REPORT NAMES を要約しています。

次に、レポート ページを「REPORT GROUP」と「LEGAL ENTITY」の 2 つの列にグループ化します。これにより、個別の値のペアごとに個別のタブが作成されます。各タブで、Cognos は REPORT GROUP/LEGAL ENTITY の現在の値のデータを自動フィルタリングして要約します。

ここに画像の説明を入力

Cognos がビューに対してクエリを 1 回だけ実行するのではなく、複数のクエリを実行しているため、レポートに予想以上に時間がかかっていると思います。パフォーマンス上の理由から 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 レコードすべての行を返すクエリが 1 つだけあります。

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

大きな懸念事項の 1 つは、クエリ 3 と 4 が同一であることです。2 つのクロス集計を同じクエリにバインドしても、SQL が 2 回実行されることはないと思われるかもしれません。

4

0 に答える 0