Clark.Pan 发表于 2024-4-1 00:17:52

ReportSheet通过数据过滤器设置内关联(inner join)关系

本帖最后由 Clark.Pan 于 2024-4-1 00:21 编辑

背景:

在日常做报表的时候,在两个表交叉数据时会用到内关联的关系,本教程会教您在reportsheet中如何设置内关联关系。
解决方案:
以下面地址中FilterByJoin这个表格为例:
https://demo.grapecity.com.cn/sp ... /data-filter/purejs
大家可以发现,CompanyName中设置了过滤器,过滤条件是Customers表中的ID字段等于Orders表中的CustomerId字段。

查看结果,我们可以发现,表中会有如下图所示的空字段:

以上述圈释出的这条数据,分析其原因,我们可以发现,在Orders表中,我们可以看到ID为64的字段,其CustomerId为“DUMOS”

但在Customers表中,我们找不到ID为“DUMOS”的字段

在CompanyName设置的过滤器相当于Left join,Order为左表,所以会存在Id为64的这条数据。
但在实际场景中,我们的报表绝大多数情况是不需要这些空白数据的。所以我们实际想要的其实是Inner join的内关联。那么我们需要做如下设置:
首先我们将数据筛选从CompanyName上设置到Id字段上。条件为CustomerId等于Customers表中的Id字段。

然后,我们查看结果,发现空白的数据已经去掉了,但是这还不是InnerJoin。目前这样其实还是Left join,但是左表变成了Customers表,又因为Customers表中的数据是Orders表的子集,所以只是看似已经达到了Inner join的效果而已。
要实现真正的Inner join,我们要将上面的两个设置结合起来,也就是CommpanyName上设置的过滤条件是Customers表中的ID字段等于Orders表中的CustomerId字段。Id上设置的过滤条件是CustomerId等于Customers表中的Id字段。 两个Left join结合起来,就成了Inner join。

点击预览,我们发现,空白数据被移除了,但是Id的顺序有了问题,这个时候我们只需要在Id字段上在设置一个排序即可


结果我们看到Id为“64”的字段已经没有了

页: [1]
查看完整版本: ReportSheet通过数据过滤器设置内关联(inner join)关系