我有一份 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 运行两次。