Crystal Reports:如何增强性能?

2020-09-01 02:02发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好。

我有一个报告,我在命令部分使用了" IF THEN"功能,并且我认为这会导致性能下降。 例如,下面类似于命令部分中整个SQL的1/5:

 if('{?pgmid}'如'1'+'%')和'{?geotype}'='station_response_area'
 开始
 选择identity_num,
 单元,
 event_date,
 station_response_area地理类型,
 measure_time,
 CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
 pgmid,
 NFPA标准,
 响应类别
 符合标准
 将(measure_time作为varchar)转换为time_sec,
 pgmdorder,
 event_type,
 property_use
 来自vw_nfpa_firstArv_RPT
 介于'{?BeginDate}'和'{?EndDate}'之间的event_date
 和pgmid = {?PgmID}
 按measure_time asc排序
 结束

 if((('{?pgmid}'如'2'+'%')或('{?pgmid}'如'3'+'%'))和'{?geotype}'='station_response_area'
 开始
 选择identity_num,
 单元,
 event_date,
 station_response_area地理类型,
 measure_time,
 CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
 pgmid,
 NFPA标准,
 响应类别
 符合标准
 将(measure_time作为varchar)转换为time_sec,
 pgmdorder,
 event_type,
 property_use
 来自[DW_PROD]。[dbo]。[vw_nfpa_ERF_RPT]
 介于'{?BeginDate}'和'{?EndDate}'之间的event_date
 和pgmid = {?PgmID}
 按measure_time asc排序
 结束
 

是否可以用其他方法代替" IF THEN"以增强报告的性能?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好。

我有一个报告,我在命令部分使用了" IF THEN"功能,并且我认为这会导致性能下降。 例如,下面类似于命令部分中整个SQL的1/5:

 if('{?pgmid}'如'1'+'%')和'{?geotype}'='station_response_area'
 开始
 选择identity_num,
 单元,
 event_date,
 station_response_area地理类型,
 measure_time,
 CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
 pgmid,
 NFPA标准,
 响应类别
 符合标准
 将(measure_time作为varchar)转换为time_sec,
 pgmdorder,
 event_type,
 property_use
 来自vw_nfpa_firstArv_RPT
 介于'{?BeginDate}'和'{?EndDate}'之间的event_date
 和pgmid = {?PgmID}
 按measure_time asc排序
 结束

 if((('{?pgmid}'如'2'+'%')或('{?pgmid}'如'3'+'%'))和'{?geotype}'='station_response_area'
 开始
 选择identity_num,
 单元,
 event_date,
 station_response_area地理类型,
 measure_time,
 CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
 pgmid,
 NFPA标准,
 响应类别
 符合标准
 将(measure_time作为varchar)转换为time_sec,
 pgmdorder,
 event_type,
 property_use
 来自[DW_PROD]。[dbo]。[vw_nfpa_ERF_RPT]
 介于'{?BeginDate}'和'{?EndDate}'之间的event_date
 和pgmid = {?PgmID}
 按measure_time asc排序
 结束
 

是否可以用其他方法代替" IF THEN"以增强报告的性能?

付费偷看设置
发送
2条回答
clasier
1楼 · 2020-09-01 02:38.采纳回答

If..Then绝对会减慢查询速度。

我会尝试将条件从If..Then移至where子句,然后使用" UNION ALL"将查询字符串化 一起。 像这样的东西:

选择
   event_num,
   单元,
   event_date,
   station_response_area地理类型,
   measure_time,
   CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
   pgmid,
   NFPA标准,
   响应类别
   符合标准
   将(measure_time作为varchar)转换为time_sec,
   pgmdorder,
   event_type,
   property_use
 来自vw_nfpa_firstArv_RPT
 其中" {?pgmid}"就像" 1%")
   和'{?geotype}'='station_response_area'
   以及介于'{?BeginDate}'和'{?EndDate}'之间的event_date
   和pgmid = {?PgmID}
 按measure_time asc排序


 全联盟


 选择
   event_num,
   单元,
   event_date,
   station_response_area地理类型,
   measure_time,
   CONVERT(CHAR(8),DATEADD(second,measure_time,0),108)作为Response_Time,
   pgmid,
   NFPA标准,
   响应类别
   符合标准
   将(measure_time作为varchar)转换为time_sec,
   pgmdorder,
   event_type,
   property_use
 来自[DW_PROD]。[dbo]。[vw_nfpa_ERF_RPT]
 其中('{?pgmid}'如'2%')或('{?pgmid}'如'3%'))
   和'{?geotype}'='station_response_area'
   以及介于'{?BeginDate}'和'{?EndDate}'之间的event_date
   和pgmid = {?PgmID}
 按measure_time asc排序
 

通过首先检查参数,如果参数没有表明应该运行查询的一部分,则选择实际上不会执行任何操作。

此外,您也不会 不需要使用" +'%'",只需将"%"放在值的末尾,就像我上面显示的那样。

-Dell

打个大熊猫
2楼-- · 2020-09-01 02:42

很多!

一周热门 更多>