我有一份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当前值的数据。
我认为报告花费的时间比预期的要长,因为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;
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;
一个很大的问题是查询3和4是相同的。你会认为如果我将2个交叉表绑定到同一个Query,那么这不会导致SQL运行两次。