guoqp 发表于 2024-1-10 13:36:10

表格筛选后一条数据变成N条数据的BUG

本帖最后由 guoqp 于 2024-1-10 14:52 编辑

不知道什么原因,我也不好去复现,现在问题出现了,找不到解决办法,其他列筛选都没有问题,就这列一筛选就出问题,为了方便查看问题,我录了屏.


"设计阶段"列筛选前是这个效果

"设计阶段"列筛选后是这个效果,不知道哪里出了问题,也不知道该如何去跟踪问题所在


=========================================================================
经过不断尝试,我找到了问题所在,是因为"设计阶段"这列使用组合框,且组合框的数据绑定使用了分组


组合框绑定我举例说明
如表有A,B,C三列
数据如下
AAA,BBB,CCC
BBB,AAA,123
CCC,123,ABC
AAA,123,BBB
BBB,AAA,ABC
CCC,ABC,123

组合框值与显示列都绑定的A列,可以看到A列中的数据其实是有重复的,这里重复多少次上边筛选出来就会重复多少行。
可以完整的复现出来


我用DEMO复现出来了,你们参考下

Erik.Xue 发表于 2024-1-10 18:07:01

您好,这边复现了,先调查下具体原因,感谢反馈~

Erik.Xue 发表于 2024-1-11 16:04:37

您好,这个问题确认后不是bug。


具体原因是:

因为关联关系,组合框在表格里准确的是说执行 left join。组合框中值是分类名,分类名BBB有重复的,根据这个BBB在表1中查到2条
表2中BBB也有2条,组合一下,就是4条。

注意:组合框不建议值是重复的。

guoqp 发表于 2024-1-12 19:49:02

Erik.Xue 发表于 2024-1-11 16:04
您好,这个问题确认后不是bug。




第一、但确实有这样的场景需求,活字格目前是没有提供唯一值查询功能的,要解决唯一值查询就要写SQL,再使用动态绑定数据源,而且还要是EL组件才行,没法放在表格里。
第二,组合框本身就支持这种去重,用起来很方便,但其一旦应用到表格就会出现这样的情况,不管它是不是BUG,都应该想办法解决,这是一种觉需求吧。

Simon.Sun 发表于 2024-1-15 09:27:40

您好,是这样的,组合框本身是会去重的。但是放到表格里,表格去查询数据的时候是会有关联查询的。因为组合框有值字段和显示字段的概念。
比如这里设置的组合框后,表格查询的 SQL 类似:
select a. as C0,a. as C1,a.[分类名] as C2,a. as C3,a. as C4 from .[表2] as aleft join .[表1] as a1 on a.[分类名] = a1.[分类名] Where a1.[分类名] = \"AAA\" ORDER BY a. ASC因为有左关联,就会出现 6 条数据。表格会将查询的结果展示出来。
更加建议您处理下组合框的数据来源,比如说写视图,提前最值字段做下去重,比如:

然后组合框的数据来源选择视图就好了。

guoqp 发表于 2024-1-16 09:21:58

本帖最后由 guoqp 于 2024-1-16 09:40 编辑

Simon.Sun 发表于 2024-1-15 09:27
您好,是这样的,组合框本身是会去重的。但是放到表格里,表格去查询数据的时候是会有关联查询的。因为组合 ...
我发现按你这个方法,只适用于单列唯一值的情况(只是一列),如果我们需求场景是需要有两列,其中一列进行条件筛选时就不行了(比如我需要的专业列,但不同的部门看到的应该是不同的专业,所以我们要加入部门列作为查询条件,这时就会出现重复,比如我有四个部门都有管道专业,那就会重复4次)

这里我想说的是,其实根本问题在于,表格的列筛选为什么要去左联该列组件的数据源,跟组件的数据源有什么逻辑关系?我们筛选是在本数据表的值中筛选,去左联一个供用户选择的组件的数据源作为筛选选件这个就有点看不懂了,我觉得这个就是一个软件设计的BUG

下边用一个筛选后的SQL来说明
select
      a.[图纸名称] as C0,a.[图纸编号] as C1,a.[图幅] as C2,a.[数量] as C3,a.[设备位号] as C4,a.[设计人员] as C5,a.[校核人员] as C6,a.[审核人员] as C7,a.[审定人员] as C8,a.[定额编码] as C9,
      a.[定额单位] as C10,a.[单位数量] as C11,a.[定额工时] as C12,a.[设计阶段] as C13,a.[专业] as C14,a.[子项] as C15,a1.[项目名称] as C16,a.[部门] as C17,a.[项目编号] as C18,a.[标准工时] as C19,
      a.[定额项] as C20,a. as C21,a. as C22
from .[定额工时数据表_中石油版] as a
      left join .[项目分配表] as a1 on a.[项目编号] = a1.[项目编号]
      left join .[定额工时专业视图] as a2 on a.[专业] = a2.[专业]
Where a.[年度] = @p0 AND a.[项目编号] = @p1 AND a.[部门] = @p2 AND a2.[专业] = @p3
ORDER BY a.[图纸编号] ASC,a. ASC

这最后一个left join .[定额工时专业视图] as a2 on a.[专业] = a2.[专业] 完全是多余的,与数据表没有半点逻辑关系,这只是供用户选择该字段值的一个下拉组件的数据源而已

我也上一个DEMO吧

Patrick.Zhu 发表于 2024-1-16 10:02:31

大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的那个表里面是什么内容呢?

提前解释下为什么要问这个问题,因为看起来,一开始采用一个单独的字典表进行维护更合适你的场景。

guoqp 发表于 2024-1-16 10:26:22

Patrick.Zhu 发表于 2024-1-16 10:02
大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的 ...

是的,阶段与专业都来自于一个字典表,阶段还好,哪怕设为固定值都没有问题,但专业就不行了,一个专业有可能要对应好几个部门,也就是说不同的部门有不同的专业,所以单独维护这个字典表也需要加上部门这个查询条件,你可以看上边这个DEMO就是一个真实的场景,如果将全部专业都放出来这不合适,因为人家根本不参与这些专业,放出来反而不好用,不放出来就得用部门作为条件去过滤,所以就存在上边所说的问题

guoqp 发表于 2024-1-16 10:28:00

Patrick.Zhu 发表于 2024-1-16 10:02
大佬,我想先问一下,你为啥这么设计,因为这个设计阶段一看就应该是一个单独的字典表维护的工序,你引用的 ...

我研究下活字格的筛选SQL,根本问题在于活字格在筛选时不应该去左联字段列组件的数据源,只要把这个解决了就不存在这个问题了

Simon.Sun 发表于 2024-1-17 09:33:16

本帖最后由 Simon.Sun 于 2024-1-17 09:36 编辑

大佬好。您说的这个情况确实存在,对于组合框,表格数据在展示的时候目前是通过左连接带出显示数据的。因为考虑到值字段和显示字段不统一的情况。
您这个情况有些特殊,值字段和显示字段是同一个字段,而且值字段会有重复的情况,当然并不是说您的这个场景不合理。
我觉得更好的做法是表2分类字段来存储字典表的 ID,保证组合框的值字段是唯一了,这样就能避免这个问题了,您觉得是否可行呢?
页: [1] 2
查看完整版本: 表格筛选后一条数据变成N条数据的BUG