找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15531

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-1 00:17  /   查看:265  /  回复:0
本帖最后由 Clark.Pan 于 2024-4-1 00:21 编辑

背景:

在日常做报表的时候,在两个表交叉数据时会用到内关联的关系,本教程会教您在reportsheet中如何设置内关联关系。
解决方案:
以下面地址中FilterByJoin这个表格为例:
https://demo.grapecity.com.cn/sp ... /data-filter/purejs
大家可以发现,CompanyName中设置了过滤器,过滤条件是Customers表中的ID字段等于Orders表中的CustomerId字段。
image.png221970214.png
查看结果,我们可以发现,表中会有如下图所示的空字段:
image.png377473449.png
以上述圈释出的这条数据,分析其原因,我们可以发现,在Orders表中,我们可以看到ID为64的字段,其CustomerId为“DUMOS”
image.png283301390.png
但在Customers表中,我们找不到ID为“DUMOS”的字段
image.png239795531.png
在CompanyName设置的过滤器相当于Left join,Order为左表,所以会存在Id为64的这条数据。
但在实际场景中,我们的报表绝大多数情况是不需要这些空白数据的。所以我们实际想要的其实是Inner join的内关联。那么我们需要做如下设置:
首先我们将数据筛选从CompanyName上设置到Id字段上。条件为CustomerId等于Customers表中的Id字段。
image.png696637267.png
然后,我们查看结果,发现空白的数据已经去掉了,但是这还不是InnerJoin。目前这样其实还是Left join,但是左表变成了Customers表,又因为Customers表中的数据是Orders表的子集,所以只是看似已经达到了Inner join的效果而已。
要实现真正的Inner join,我们要将上面的两个设置结合起来,也就是CommpanyName上设置的过滤条件是Customers表中的ID字段等于Orders表中的CustomerId字段。Id上设置的过滤条件是CustomerId等于Customers表中的Id字段。 两个Left join结合起来,就成了Inner join。
image.png151786803.png
点击预览,我们发现,空白数据被移除了,但是Id的顺序有了问题,这个时候我们只需要在Id字段上在设置一个排序即可
image.png190368041.png
image.png214991149.png
结果我们看到Id为“64”的字段已经没有了
image.png917520141.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部