找文章 / 找答案
  • 发帖数28
  • 粉丝0

此人很懒,什么也没有留下

  • 解答问题超厉害

    经常帮助其他会员答疑
精选问答 更多内容

同步数据集 ?{_USER_}的坑,让领导骂了个狗血喷头

SqmX7pVBCanChIh新手上路 显示全部楼层 发表于 2019-10-16 11:36:35 |阅读模式 打印 上一主题 下一主题
业务部门吐槽报表查询太慢。这还不简单,做个定时任务,晚上同步数据集,一早查询准快

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


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

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

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

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

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














回复

使用道具 举报

精彩评论8

永洪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
永洪tech-Bella 发表于 2019-10-25 10:00
_USER_是全局参数,是你当前登录的用户名,在定时任务自动执行时,读取的是任务-赋予权限-分配的用户名;                 ...

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

回复 支持 反对

使用道具 举报

永洪tech-Lan 显示全部楼层 发表于 2019-11-1 19:24:01
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:44
永洪tech-Lan 发表于 2019-11-1 19:24
不建议再sql里写where条件然后同步数据,因为咱们同步的数据是where条件过滤之后的,所以若当前执行任务 ...

此法可行。要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了。
回复 支持 反对

使用道具 举报

永洪tech-Bella白银一 显示全部楼层 发表于 2019-11-4 18:17:08
SqmX7pVBCanChIh 发表于 2019-11-4 10:41
此法可行。要是”同步数据集“ 能”应对“ 动态变量(?{_USER_}) 就方便多了。 ...

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

咱们这个想法不合理。同步数据集数据,实现的是将数据抽取到永洪本地,不再每次查询去数据库查,提升查询性能。同步过来的数据是sql去数据查,当时返回的数据。同步后数据不会变,需要重新同步。
回复 支持 反对

使用道具 举报

BoJie青铜四 显示全部楼层 发表于 2019-11-6 17:03:57
(个人见解)其实,这里涉及到数据读取机制的问题。
一、没有同步数据集。此时,报表查询时是通过sql语言直接查询的是数据库里的数据,此时“where 责任人=?{_USER_} ”这种方法能够根据用户来过滤数据。但是,此方法对数据量小的时候方便、快捷。当数据量达到一定规模之后,这种方法的效率是十分低下的。此时就需要同步数据集。
二、同步数据集。对于大量数据而言,同步数据集的方法能够大大提高查询效率。此时,数据被读取到永洪本地,权限问题可以通过行过滤来实现。
综上所述:1.数据量小,没有同步数据集,可以用SQL限制权限。
2.数据量大,同步数据集,使用行过滤。
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

oscarxu铂金一 显示全部楼层 发表于 2024-2-19 20:15:21
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部