同步数据集 ?{_USER_}的坑,让领导骂了个狗血喷头
永洪tech-Bella
显示全部楼层
发表于 2019-10-25 10:00:05
_USER_是全局参数,是你当前登录的用户名,在定时任务自动执行时,读取的是任务-赋予权限-分配的用户名; 如果想在定时任务那控制参数值,也就是条件,可以自定义一个参数,然后在定时任务那收集此参数,赋值即可; SQL传参的使用,规范写法,以此为例 where 1=1 <参数1>and 负责人=?{参数1} </参数1>;此语法表示:参数1有值是条件生效,无值则不生效不拼接此条件 |
|
|
|
|
SqmX7pVBCanChIh
显示全部楼层
发表于 2019-10-31 11:05:42
用你提供的方法同步数据集后。打开报告的时候,用脚本把参数1设置为?{_USER_}。结果看到的是所有人的数据。where 好像没有执行。
|
|
|
|
|
永洪tech-Lan
显示全部楼层
发表于 2019-11-1 19:24:01
|
|
|
|
SqmX7pVBCanChIh
显示全部楼层
发表于 2019-11-4 10:41:44
此法可行。要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了。 |
|
|
|
|
永洪tech-Bella
显示全部楼层
发表于 2019-11-4 18:17:08
要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了
咱们这个想法不合理。同步数据集数据,实现的是将数据抽取到永洪本地,不再每次查询去数据库查,提升查询性能。同步过来的数据是sql去数据查,当时返回的数据。同步后数据不会变,需要重新同步。 |
|
|
|
|
BoJie
显示全部楼层
发表于 2019-11-6 17:03:57
(个人见解)其实,这里涉及到数据读取机制的问题。
一、没有同步数据集。此时,报表查询时是通过sql语言直接查询的是数据库里的数据,此时“where 责任人=?{_USER_} ”这种方法能够根据用户来过滤数据。但是,此方法对数据量小的时候方便、快捷。当数据量达到一定规模之后,这种方法的效率是十分低下的。此时就需要同步数据集。
二、同步数据集。对于大量数据而言,同步数据集的方法能够大大提高查询效率。此时,数据被读取到永洪本地,权限问题可以通过行过滤来实现。
综上所述:1.数据量小,没有同步数据集,可以用SQL限制权限。
2.数据量大,同步数据集,使用行过滤。
|
|
|
|
|
永洪tech-Bella
显示全部楼层
发表于 2019-11-7 10:43:22
理解很好,这里数据量到底多少才算大,要看数据库的情况,当一个数据量数据库查询耗费的时间比较多,可以考虑同步减轻数据库压力,同时提升查询性能。
同步还有一个原则,对数据的实时性要求不是太高,比如每5分钟数据就要更新,且报表端需要查到更新的情况。 |
|
|
|
|
oscarxu
显示全部楼层
发表于 2024-2-19 20:15:21
|
|
|
|