日期:2014-05-19  浏览次数:20697 次

关于系统内自定义报表功能实现的探讨
最近参考了Salesforce CRM和百会CRM的报表模块。

发现他们思路都是大概相似的,即用户可以在系统里自定义报表,选择一些自己感兴趣的字段,然后定义一些

查询条件等组成一个自定义报表。

我们系统现在也想实现类似功能。

大家有什么好的思路没有,比如怎么样将系统内表的字段提供给用户让用户自己选择感兴趣的字段来展示。

应该不是用数据库的元数据吧,那么就不能控制哪些可以让用户选择,哪些不能。

难道是另外建的表存储的可供用户选择的字段?

大家有没有好的思路。

------解决方案--------------------
1、当然是需要提供的表明 让用户选择显示的字段
难道是另外建的表存储的可供用户选择的字段?

你这个思路倒是很不错...而且很有这种必要
------解决方案--------------------
感觉建表去存储用户自定义的报表字段也不错
这要看用户的自定义报表是否经常变化 如果变化频繁也就不太重要了
但是这个和你对用户权限的验证是不冲突的,因为即使存储了他定义的报表字段
还是要判断用户当前情况下还是否对该表有查询的权限
------解决方案--------------------
刚做了个 这样功能的小报表,没用任何第三方包。
1.如果报表时多角色共同功能,就有必要提供可供选择的字段。如果报表不复杂,不多。可以用静态方法预先组织好。或者你说的用表存也很好。
2.页面展示的列名,选择后匹配对应的数据库字段有些麻烦(如果是先选择列,再查询的话)。而且查询到数据后再匹配到正确的字段名称也不是很方便。

页面先提供代复选的字段名,值为数据库字段名(我们垃圾系统,安全性要求不高,本来这样是不可取的)。用户选择完毕后 提交至后台。

service方法中根据选择列组织sql语句。这时也要按列的顺序再保存一套选择的页面显示表头(list)。
查询的结果字段也是不定的。所以不能用bean。我选择用list<list>保存值。这样顺序出来的结果页能匹配上报表表头对应的列。在前台组织结果。

仅供参考。希望能看到更好的方式
------解决方案--------------------
这个不用新建表的,只要用一张虚拟表,一张虚拟表字段表,一张或N张数据表(不同类型字段在一个表或不同表),把它们关联起来,用户新建表时,向虚拟表插一条数据,虚拟字段表插相应表的表头内容,数据表插入不同类型的数据,查询时跟据虚拟表名,字段名,数据表就可以查出数据。