动态报表D-Query 添加NULL查询支持

2021-10-30 19:33发布


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

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

点击蓝字 关注我们

前言

动态报表是我开发的一个类似于SQVI 的报表查询器.可以快速实现一个查询报表. 并且附加了很多常见的报表功能,并且可以关联多个查询结果到一个清单中. 

详细介绍见链接

动态报表简介
无峰,公众号:ABAP 技巧与实战动态报表简介

动态报表远程安装目前还有点小问题(区别于服务器版本), 无法自行安装. 

感兴趣的朋友可以准备一个VPN连接, 联系我远程连接系统,制作一个本地安装包供你使用.

本文介绍一下动态报表对左连接的一种特殊查询支持.


需求说明

假定有两个表 ZTTS_H, ZTTS_I. 如下图. 

观察表内容,可以看到ZTTS_H 中的凭证 1003/1004/1006/1007 在ZTTS_I表中不存在.

如果我们要查询不完整的凭证( ZTTS_H 中存在的凭证,但是ZTTS_I中不存在的凭证 )

SQL语句的实现比较简单

SELECT H~*,I~* FROM ZTTS_H AS H LEFT JOIN ZTTS_I AS I ON I~VBELN = H~VBELN

WHERE I~WERKS IS NULL

但是如果通过报表,则无法实现这种查询了. 因为报表的选择条件中不支持解析为 NULL值.

只能在查询ALV结果中使用 过滤器过滤 WERKS = ''的值(因为ABAP层面已经为这些不存在内容的字段赋值''了,可以使用'' 来过滤数据)

但是这种基于结果的过滤会导致性能大幅下降. 


动态报表的实现方式

通过动态报表可以非常简单的实现上述查询



01

建立一个查询


使用ZTTS_H表,关联ZTTS_I. 使用左外连接


02

设置选择条件


把明细表ZTTS_I 中的任意字段作为选择条件


03

输入特殊选择条件


在选择界面输入特定字符 NULL  或 # (如果选择字段长度不足4位,可以输入 # )


04

执行结果


后续动态报表执行时,会把NULL 或 # 解析成  IS NULL

这样动态报表的输出结果中就实现了只显示ZTTS_H表存在且ZTTS_I表不存在的数据.


05

特殊说明


如果选择屏幕输入下图  后续会解析成 IS NOT NULL . 此时的效果等同于 INNER JOIN 关联的结果


总结

恰当的使用左连接中右表的NULL判断. 会给查找特定类型的数据带来很大的性能改进. 动态报表D-Query引入对 IS NULL 的支持将丰富动态报表支援的业务场景.

可以解决此类的报表查询需求. 比如

  • 获取没有任何MARC条目的商品( 查询商品存在与MARA 但不存在与MARC的记录)

  • 获取没有维护任何销售视图的客户(查询客户存在与KNA1 但是不存在KBVV的记录)

  • ....

THE

END


约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)



公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077


公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群

赞赏支持