永洪社区

标题: 同步数据集 ?{_USER_}的坑,让领导骂了个狗血喷头 [打印本页]

作者: SqmX7pVBCanChIh    时间: 2019-10-16 11:36
标题: 同步数据集 ?{_USER_}的坑,让领导骂了个狗血喷头
业务部门吐槽报表查询太慢。这还不简单,做个定时任务,晚上同步数据集,一早查询准快

第二天一上班业务部门就炸了,数据怎么一条都没有了!!!


业务部门领导找我领导一顿,领导又找我一顿

检查了一下sql,发现  where 责任人=?{_USER_} , “我尼玛。。。”

释放了数据集,禁用了任务,让业务部门先用了起来。

有啥方案同步有 ?{_USER_} 之类的数据集?我太懒了,不想麻烦,最好在同步数据集的时候,能有个选项,让我禁用掉所有的过滤条件,简单粗暴。

或者解析出 where 后面的条件,用UI展示,勾选 禁用哪一个。















作者: 永洪tech-Bella    时间: 2019-10-25 10:00
_USER_是全局参数,是你当前登录的用户名,在定时任务自动执行时,读取的是任务-赋予权限-分配的用户名;                                 如果想在定时任务那控制参数值,也就是条件,可以自定义一个参数,然后在定时任务那收集此参数,赋值即可; SQL传参的使用,规范写法,以此为例 where 1=1 <参数1>and 负责人=?{参数1} </参数1>;此语法表示:参数1有值是条件生效,无值则不生效不拼接此条件
作者: SqmX7pVBCanChIh    时间: 2019-10-31 11:05
永洪tech-Bella 发表于 2019-10-25 10:00
_USER_是全局参数,是你当前登录的用户名,在定时任务自动执行时,读取的是任务-赋予权限-分配的用户名;                 ...

用你提供的方法同步数据集后。打开报告的时候,用脚本把参数1设置为?{_USER_}。结果看到的是所有人的数据。where 好像没有执行。


作者: 永洪tech-Lan    时间: 2019-11-1 19:24
SqmX7pVBCanChIh 发表于 2019-10-31 11:05
用你提供的方法同步数据集后。打开报告的时候,用脚本把参数1设置为?{_USER_}。结果看到的是所有人的数据 ...

不建议再sql里写where条件然后同步数据,因为咱们同步的数据是where条件过滤之后的,所以若当前执行任务的用户没有对应的字段数据,入集市后整个数据否是空的。对入集市的数据做权限控制,建议使用增量方法,创建数据集市数据集,在已经入集市的数据里设置行过滤器。
增量入集市方法参考:http://club.yonghongtech.com/forum.php?mod=viewthread&fid=44&tid=1509&highlight=%E5%A2%9E%E9%87%8F
创建数据集市数据及参考:http://club.yonghongtech.com/forum.php?mod=viewthread&fid=44&tid=7016&highlight=%E6%95%B0%E6%8D%AE%E9%9B%86%E5%B8%82

作者: SqmX7pVBCanChIh    时间: 2019-11-4 10:41
永洪tech-Lan 发表于 2019-11-1 19:24
不建议再sql里写where条件然后同步数据,因为咱们同步的数据是where条件过滤之后的,所以若当前执行任务 ...

此法可行。要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了。
作者: 永洪tech-Bella    时间: 2019-11-4 18:17
SqmX7pVBCanChIh 发表于 2019-11-4 10:41
此法可行。要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了。 ...

要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了

咱们这个想法不合理。同步数据集数据,实现的是将数据抽取到永洪本地,不再每次查询去数据库查,提升查询性能。同步过来的数据是sql去数据查,当时返回的数据。同步后数据不会变,需要重新同步。
作者: BoJie    时间: 2019-11-6 17:03
(个人见解)其实,这里涉及到数据读取机制的问题。
一、没有同步数据集。此时,报表查询时是通过sql语言直接查询的是数据库里的数据,此时“where 责任人=?{_USER_} ”这种方法能够根据用户来过滤数据。但是,此方法对数据量小的时候方便、快捷。当数据量达到一定规模之后,这种方法的效率是十分低下的。此时就需要同步数据集。
二、同步数据集。对于大量数据而言,同步数据集的方法能够大大提高查询效率。此时,数据被读取到永洪本地,权限问题可以通过行过滤来实现。
综上所述:1.数据量小,没有同步数据集,可以用SQL限制权限。
2.数据量大,同步数据集,使用行过滤。

作者: 永洪tech-Bella    时间: 2019-11-7 10:43
BoJie 发表于 2019-11-6 17:03
(个人见解)其实,这里涉及到数据读取机制的问题。
一、没有同步数据集。此时,报表查询时是通过sql语言直 ...

理解很好,这里数据量到底多少才算大,要看数据库的情况,当一个数据量数据库查询耗费的时间比较多,可以考虑同步减轻数据库压力,同时提升查询性能。
同步还有一个原则,对数据的实时性要求不是太高,比如每5分钟数据就要更新,且报表端需要查到更新的情况。
作者: oscarxu    时间: 2024-2-19 20:15





欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4