动态列实现方案

楼主
走在数据追梦路上的瑟瑟发抖的萌新!
本帖最后由 星痕 于 2016-9-23 10:10 编辑

                                                                                             
相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活。现有的方式都是通过变向的隐藏等方式来实现的。而看各位大大们的类似实现方式,结合实际工作中遇到的一个相关内容。我觉得应该算是成功的解决了这个困惑。话不多说,小伙伴们跟着我的思路来。

我本地常用数据库是mysql,所以比较了解一点,我的实现方式也是基于mysql的。首先帆薯们先看看这个内容 MySQL自带information_schema数据库使用
看完之后相信可能还是有点不明白。我大概说一下,就是说mysql中有一个系统库information_schema。这个库中存放着mysql数据库的数据库实例名,表名称,表注释,字段名称,字段注释等等等等。而这个库的存在为我们动态列的实现就提供了一个基础。(其余的数据库oracle、sqlserver、db2等也有类似的存在。)
                                                                                             
然后我们继续回到我们的主题。我本地建立了一个测试库reporttest,测试表report。(帖子最后会提供建库语句与测试数据)。
帆薯们在mysql库中新建一个库reporttest(或者使用已经存在的库,但是如果使用已经存在的,那么报表内部sql内容就需要更改。所以最好新建一个),然后用类似navicat的工具运行我提供的reporttest.sql文件,即可建表并且导入数据,然后刷新即可,此时数据准备完成。
                                                                                             
设计器创建数据连接test,填写对应的数据库信息,测试成功即OK。
此时,库名称为reporttest,表名称为report,数据连接test。这时直接预览动态列实现方案.cpt。





可以很清晰的看到效果,我选择哪个列,它就只查询那个列,只展示哪个列的数据,这就是动态列的实现方案。
帆薯们可以依据我的逻辑,替换成你自己的数据连接,库,表数据进行测试使用体验!
经过本地一些测试,性能有明显的提升。具体的就要靠帆薯们一起优化了。大家有什么更优化的方案,欢迎交流。
                                                                                               
关于动态列的效果,有几点需要提示大家注意一下:
1、最主要的就是表字段最好带有注释,这样的话可以直接通过上面的方式取得表字段对应的注释当做name来显示使用,否则的话,
     当大批量字段注释不规范的时候,就需要你自己手动配置数据字典了。
2、数据库不同,系统库存储结构也不同,可能是多个库多张表,但是整体的逻辑是不会变的。所以帆薯们要好好看我的数据集SQL哦!
3、帆软的函数使用希望大家能够更灵活一点,千万不要受限于自己的思维,如果你给自己划定了区域,那么你就被自己局限了,你的进步注定有限。

                                                                                               
最后,祝福各位番薯们身体健康、工作顺利哦!帆软论坛是我到目前为止接触、了解、依赖度最高的一个地方,因为这里有着虽然不相识,可是我们可以互助的帆薯们。
没事的时候我们可以聊天打屁,谈谈人生,谈谈理想,但是如果有需要,我们可以把自己对帆软的知识掌握、心得、体验迅速的分享给大家!
我希望论坛带给大家的是一种互相尊重、互相帮助的精神,这也是互助团队的意义,也是每一位帆薯应该都尽力守护的!
国庆节快到了,大家好好计划一下去哪玩吧,工作之余,也要给自己的心灵、身体放个假哦!





分享扩散:
参与人数 +11 F豆 +911 +20 F币 +20 理由
李复勇 + 1 默默地点个赞,然后闪人
zsh331 + 10 感谢分享
wiseM__花生丶 + 14 这我看懂了,赞一个!
我爱刘歆 + 1 赞一个!
windy_gui + 1 赞一个!
传说哥 + 666 + 20 + 20 很给力!
astar123 + 50 感谢帮助
孤陌 + 100 很给力!
boykarl911 + 1 露个脸!
哈易春 + 1 66666
macro_hard + 66 很给力!

查看全部评分

沙发
发表于 2016-9-23 08:28:17
沙发,给星星大神赞一个,膜拜星神中。。。
板凳
发表于 2016-9-23 08:32:01
大神你真棒!{:8_209:}
地板
发表于 2016-9-23 08:42:10
顶!d=====( ̄▽ ̄*)b你一下,不错,大神6666
5楼
发表于 2016-9-23 08:47:57
大神我爱你
6楼
发表于 2016-9-23 08:49:07
大神你真棒!
7楼
发表于 2016-9-23 09:12:42
似乎有点明白星神,就是表的结构信息在系统表中
从系统表中取字段名或其注释做为下拉选择
动态拼接SQL,得到动态列效果
不错的思路。
星神真棒!
8楼
发表于 2016-9-23 10:04:56
500豆,,哈哈饥饿抢豆子中{:5_129:}
9楼
发表于 2016-9-23 10:15:55
跟帆软案例那个是一样的(数据集形式的),其实我那个动态列好处是不用改造数据集,多数据集也可以支持动态列,坏处是影响了一定的性能(如果数据量不大的话,其实是没啥影响的);而数据集形式的动态列呢,一个是你说的那样,列名要写别名,最好是中文,否则弄到控件里也不知道是哪个字段,还有就是要实现之前项目中的动态列,基本要把所有数据集改一遍,还不支持多数据集(你控件加载的列只能选一个数据集)
10楼
发表于 2016-9-24 12:23:55
星神,顶你!
11楼
发表于 2016-9-26 11:52:43
星大神人如其名,吾唯有以头抢地尔。{:7_186:}
12楼
发表于 2016-9-27 16:18:59
13楼
发表于 2016-9-29 09:22:16
似乎有点明白星神,就是表的结构信息在系统表中
14楼
发表于 2016-9-30 17:44:31
这个我看懂了,兴许以后用得上!赞{:5_126:}
15楼
发表于 2016-10-10 16:17:26
我好像明白了什么……
16楼
发表于 2016-10-13 14:05:29
豆子好多 没有怎么办
17楼
发表于 2016-10-16 16:04:41
支持!!!!
18楼
发表于 2016-11-29 12:10:51
不错,但是没有这么多F豆啊,能少点不
19楼
发表于 2016-12-20 23:29:24
20楼
发表于 2016-12-20 23:35:50
来自手机
zsh331 发表于 2016-12-20 23:29

大神好
21楼
发表于 2016-12-20 23:41:19
星痕 发表于 2016-12-20 23:35
大神好

星神还在泡妞,注意身体呀,有身体才能...晚安!
22楼
发表于 2016-12-20 23:55:08
来自手机
zsh331 发表于 2016-12-20 23:41
星神还在泡妞,注意身体呀,有身体才能...晚安!

……没有……刚下班回来吃完晚饭
23楼
发表于 2017-1-20 12:05:56
值得学习
24楼
发表于 2017-1-20 13:31:47
{:8_205:}
25楼
发表于 2017-1-23 11:00:42
哈哈哈哈哈哈哈哈哈哈哈哈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表