原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
动态报表D-Query 是一个用于取代标准QUERY的程序.使用动态报表无需写代码,非开发人员也可生成专业的报表程序.
> 详见动态报表简介
>
> 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query简介
> ](https://mp.weixin.qq.com/s/MwzR2gC58de65C9V9a8rQA?token=120419292&lang=zh_CN)
** 本文主要介绍动态报表新增功能:最大查询记录的限制 **
二
汇总-明细
动态报表涉及的汇总-明细层级本意就在于引导改变用户的查询习惯, 大数据量查询时,先按照特定关键字统计查询. 然后再显示特定关键字中的明细.
这样避免大量明细数据查询导致的各种问题
• 查询耗时过大
• 超时错误
• 查询内容超出最大内存限制
• ......
三
实际情况
但是实际使用中, 还是由很多用户习惯于直接呈现明细清单(动态报表被用于设计直接显示明细的报表).
这样就导致如果数据查询量过大时,可能导致超时错误或空间不足错误
下图示例是查询数据量超出了系统分配的用户最大内存使用空间导致的严重错误.
四
思虑
因此考虑对动态报表添加一个最大条目数限制.
在最终查询结果呈现之前,
先预先查询用户本次查询的结果记录数(基于HANA对聚合语句的优化,这个多出来的统计查询对性能影响不大,但不排除特定的CDS视图,比如数据量较大的MBEWH视图,标准SE16N查询记录数时耗时也很长,原因不明)
然后比较查询结果记录数与该查询设置的最大条目数.
如果查询记录数>最大条目数. 则弹窗提醒用户.
提醒窗口允许用户调整最大条目数限定.
查询结果将按照这个限定输出查询结果集
当然也可以通过特殊参数设置成 -1 跳过查询条目数检查,这样特殊查询可以保留不检查条目数
五
实现效果
查询配置中添加最大条目数限制, 如果没有输入,用十万作为默认值, 允许配置-1跳过查询条目数检查
执行查询时, 预先按查询条件统计查询的记录数,如果大于设置的最大条目数限制. 弹窗提醒,并允许用户调整最大查询记录数
如果查询条目数<设置的最大条目数限制. 则不会弹窗提示
如果确认用于输入本次查询的最大条目数,则按用户限定的条目数输出查询结果集
如果用户点击取消按钮.
. 系统提示查询错误: 用户取消查询
六
注意事项
实现时的注意事项
因为动态报表查询本身就是一个统计查询,针对统计查询的结果条目数统计必须使用二次查询. 如下图. 使用ABAP的二次查询.
二次查询中的原始查询语句如果是动态查询, 则二次查询表(下图的+SUM) 必须被动态引用到主查询中
七
总结
动态报表添加最大记录限制可以避免因为查询的设计及查询条件限制比较少,查询的结果集过大导致的超时,超内存空间错误.
但这个设计允许用户限定大数据量查询的结果集条目数. 可能会导致查询结果不完整.
还是期望用户的查询回归到统计-明细查询. 以便能看到数据的全貌
** THE **
** END **
** 约定 **
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论